在 Excel 中,我使用 VBA 创建一个数组来收集数据,然后将其粘贴回工作表中。这在较小的数据集(约 15,000 行)上运行良好,但当我移动到较大的数据集(约 117,000 行)时,“转置”步骤中发生了一些情况。
在数组中,我想将标题和数据粘贴到新工作表中从单元格 B5 开始的 5 列中。我定义范围(“ListDestination”),然后使用以下代码将其粘贴:
shNew.Name = shName
Set ListDestination = shNew.Range("B5").Resize(UBound(arrList, 2), UBound(arrList, 1))
ListDestination = WorksheetFunction.Transpose(arrList)
当我检查立即窗口中的列表目的地时,它是正确的($B$5:$F$116771
)并且在 Watches 窗口中,我可以看到 arrList 已定义(1 到 5、0 到 116767),这是正确的。扩展它时,它还会在正确的位置显示数据。但是,在“Transpose”行之后,工作表中的结果是:
![Spreadsheet screenshot](https://i.stack.imgur.com/vNSr2.png)
...而它应该是:
![Corrected screenshot](https://i.stack.imgur.com/IxKeJ.png)
就其价值而言,它确实粘贴了整个“列表目的地”范围,但在第 51236 行之后我得到的只是#N/A:
![Column break screenshot](https://i.stack.imgur.com/8ZGZJ.png)
由于这适用于较小的数据集,因此我没有更改代码中的任何内容,因此我认为它一定与数据集的大小有关。
感谢您的任何帮助,您可以提供。
这是一个转置数组的简单函数。
Function my_transpose(arr As Variant) As Variant()
Dim tempArray() As Variant
ReDim tempArray(LBound(arr, 2) To UBound(arr, 2), LBound(arr, 1) To UBound(arr,1)) As Variant
Dim i As Long
For i = LBound(arr, 1) To UBound(arr, 1)
Dim j As Long
For j = LBound(arr, 2) To UBound(arr, 2)
tempArray(j, i) = arr(i, j)
Next j
Next i
my_transpose = tempArray
End Function
然后你会在你的行中使用这样的:
shNew.Name = shName
Set ListDestination = shNew.Range("B5").Resize(UBound(arrList, 2), UBound(arrList, 1))
ListDestination = my_transpose(arrList)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)