将数组写入一个范围。 只获得数组的第一个值

我想写一个数组到一个范围,我已经尝试了几种方法,但无论如何,我总是只获得一次又一次的数组的第一个值。

这里是代码:

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) AA BB CC DD EE 

我真正看到的是:

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

我在这里做错了什么?

我试图按照Chip Pearson的build议,在这里find

但没有运气…

好的,在这个问题的第二部分join:

我有一个有8061个元素的1D数组,我传递给下面的函数:

 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 

所以当我运行这个时,转置function正确转换成:

 Array(1 to 8061, 1 to 1) 

该范围似乎是列G中的8061个单元的单个列。

但是我得到以下错误:

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

该错误在以下行中引发:

 rngData = arrayDataTransposed 

—更新—

所以我从我的示例代码(b / c,我真的不认为这很重要)中遗漏的一件事是我的数组的内容实际上是公式。 这里是我在实际的实时代码中使用的行:

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

那么,我发现(用Excel英雄的帮助)是上面的声明没有双引号需要一个string,所以我不得不改变这个:

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

我可以把它记下来,直到深夜的骨头编码。

然而,我学到的另一件事是,当我回到运行完整的代码是,它需要将FOREVER粘贴到范围。 这通常是一个非常简单的任务,很快就会发生,所以我真的很困惑。

经过多次debugging,我发现这个问题strSheetName我closures了所有警报/计算等事实,当我粘贴这些公式时, strSheetName表还没有b / c我正在开发这个代码与主文件分开。 显然,当你粘贴代码的时候,会popup一个对话框,但是如果你关掉了所有的东西,你就看不到它,但是它会把所有东西放慢。 如果这些选项卡不存在,则需要大约6分钟的时间来粘贴范围,如果存在,则需要几秒钟(也许更less)。 无论如何,为了进一步优化代码,我只是添加了一个检查所需工作表的函数,如果它不存在,它会将该选项卡添加为占位符,因此整个过程不会减慢抓取速度。

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

做这个:

 arrayData = Array("A", "B", "C", "D", "E") [a1].Resize(UBound(arrayData)) = Application.Transpose(arrayData) 

重要的是Transpose()函数。

但是,如果您计划将它们写入工作表,最好是从二维数组开始工作。 只要你把它们定义为第一排的排和第二排的排,那么就不需要换位了。

这个:

 Sub test() ActiveWorkbook.Worksheets("Sheet1").Cells.Clear Dim arrayData(1 To 5, 1 To 1) As Variant arrayData(1, 1) = "A" arrayData(2, 1) = "B" arrayData(3, 1) = "C" arrayData(4, 1) = "D" arrayData(5, 1) = "E" Dim rngTarget As Range Set rngTarget = ActiveWorkbook.Worksheets("Sheet1").Range("A1:A5") rngTarget = arrayData End Sub 

会产生:

在这里输入图像说明