将数组写入范围。仅获取数组的第一个值

哥特米克

我试图将一个数组写入一个范围,并且尝试了几种方法,但是无论如何,我总是一遍又一遍地只获得数组的FIRST值。

这是代码:

Option Explicit

Sub test()

    ActiveWorkbook.Worksheets("Sheet1").Cells.Clear

    Dim arrayData() As Variant
    arrayData = Array("A", "B", "C", "D", "E")

    Dim rngTarget As Range
    Set rngTarget = ActiveWorkbook.Worksheets("Sheet1").Range("A1")

    'this doesn't work
    rngTarget.Resize(UBound(arrayData, 1), 1).Value = arrayData

    Dim rngTarget2 As Range
    Set rngTarget2 = ActiveWorkbook.Worksheets("Sheet1").Range(Cells(1, 5), Cells(UBound(arrayData, 1), 5))
    'this doesn't work either
    rngTarget2.Value = arrayData

End Sub

我希望看到的是:

(Col A)     (Col E)
A           A
B           B
C           C
D           D
E           E

我真正看到的是:

(Col A)     (Col E)
A           A
A           A
A           A
A           A
A           A

我在这里做错了什么?

我在这里找到了Chip Chipearson的建议

但是没有运气...

好的,因此添加此问题的第二部分:

我有一个包含8,061个元素的一维数组,正将其传递给以下函数:

Call writeArrayData7(strTabName, arrayBucketData, 7)

Sub writeArrayData7(strSheetName As String, arrayData As Variant, intColToStart As Integer)

    Dim lngNextRow As Long
    lngNextRow = 1 ' hard-coded b/c in this instance we are just using row 1

    ' Select range for data
    Dim rngData As Range
    Set rngData = Sheets(strSheetName).Range(Cells(lngNextRow, intColToStart), Cells(lngNextRow - 1 + UBound(arrayData, 1), intColToStart))

    ' Save data to range
    Dim arrayDataTransposed As Variant
    arrayDataTransposed = Application.Transpose(arrayData)
    rngData = arrayDataTransposed

End Sub

因此,当我运行此命令时,转置函数可以正确转换为:

Array(1 to 8061, 1 to 1)

该范围似乎是在G列中有8,061个单元格的单个列。

但是我收到以下错误:

Run-time error '1004':
Application-defined or object-defined error

该错误引发以下行:

rngData = arrayDataTransposed

-更新-

因此,我从示例代码中忽略了一件事(老实说我认为这没关系),数组的内容实际上是公式。这是我在实际实时代码中使用的行:

arrayData(i) = "=IFERROR(VLOOKUP($D" + CStr(i) + "," + strSheetName + "!$D:$F,3,FALSE),"")"

好吧,我发现(在Excel Hero的帮助下)是,上面的语句没有字符串所需的双引号,所以我不得不改为以下内容:

arrayBucketData(i) = "=IFERROR(VLOOKUP($D" + CStr(i) + "," + strSheetName + "!$D:$F,3,FALSE),"""")"

我可以将其归结为深夜的骨头编码。

但是,我了解到的另一件事是,当我返回运行完整代码时,需要永远将数组粘贴到范围中。通常,这是一个非常简单的任务,并且很快就会发生,所以我真的很困惑。

经过大量调试后,我发现问题出在以下事实:我关闭了所有警报/计算/等功能,当我粘贴这些公式时,工作strSheetName表还不存在。从主文件。显然,当您粘贴代码时,它会弹出一个对话框,但是,如果您关闭了所有内容,则看不到它,但实际上会减慢一切。如果这些选项卡不存在,则粘贴该范围大约需要6分钟,如果它们存在,则需要几秒钟(可能更少)。无论如何,为了进一步完善代码,我只是添加了一个检查所需工作表的函数,如果该工作表不存在,则将选项卡添加为占位符,以使整个过程不会减慢抓取速度。

感谢大家的帮助!我希望这可以帮助其他人。

卓越英雄

做这个:

arrayData = Array("A", "B", "C", "D", "E")

[a1].Resize(UBound(arrayData) + 1) = Application.Transpose(arrayData)

重要的是Transpose()函数。

但是,如果计划将2D数组写入工作表,则最好从一开始就使用它们。只要将它们定义为第一行中的行和第二行中的列,那么就不需要转置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自 json 数组的新 javascript 数组仅获取第一个值

数组函数仅返回第一个值

PHP数组获取项目值仅给出第一个字符

获取数组的第一个值

数组到Excel范围仅给出数组的第一个元素

数组的第一个值

JSONPath表达式从条件数组中获取值或仅获取第一个值

Select2预选择val数组仅解析数组的第一个值

如何将数组添加到列表并迭代以获取每个数组的第一个值?

如何在对象数组上使用map方法仅获取第一个值

HTML仅发布数组,仅发布第一个值

如何确定 First 的使用范围以仅获取组中的第一个值?

从数组获取第一个和最后一个值

我正在尝试将数组值绑定到php pdo中的一个准备好的语句,但仅绑定的数组的第一个元素

仅将电子邮件发送到电子邮件数组中的第一个值

Swift 谓词仅匹配值数组中的第一个值

Json 数组,从每个数组键中获取第一个值

比较2个数组值仅推入第一个结果

仅基于第一个值的唯一数组?

Bash数组仅执行第一个索引

如何仅解构数组的第一个索引

循环多维数组,仅获取第一个元素

在Golang中解组XML数组:仅获取第一个元素

如何停止循环以仅获取第一个数组的内容?

已解决:遍历数组并仅选择第一个值 TS & React

从IntPtr整理结构的数组-仅第一个值正确地整理

为什么列表函数仅输出数组的第一个值?

PHP相关数组仅显示值的第一个字母

为什么bash仅将第一个元素附加到数组