Excel 在不循环的情况下将部分数组输出到范围?
将数组的一部分输出到范围的最快、最有效的方法是什么 我可以很容易地将工作表范围读取到VBA数组:Excel 在不循环的情况下将部分数组输出到范围?,excel,vba,Excel,Vba,将数组的一部分输出到范围的最快、最有效的方法是什么 我可以很容易地将工作表范围读取到VBA数组: Dim rng as Range Dim arr() as Variant set rng as whatever arr = rng 我可以同样轻松地将数组写入工作表: rng = arr 但是,如果我只想将数组中选定的列重新发布到工作表中,比如24-26列: For i = 2 To 413497 For j = 24 To 26 Cells(i, j) = arr(
Dim rng as Range
Dim arr() as Variant
set rng as whatever
arr = rng
我可以同样轻松地将数组写入工作表:
rng = arr
但是,如果我只想将数组中选定的列重新发布到工作表中,比如24-26列:
For i = 2 To 413497
For j = 24 To 26
Cells(i, j) = arr(i, j)
Next j
Next i
有没有一种最快的方法不用for next循环就可以完成
Sub TruncateArray()
Dim oneDarray()
Dim twoDarray()
Dim shortArray() As String
Dim longArray() As String
longArray = Split("1,2,3,4,5,6,7,8,9,0", ",")
shortArray = longArray
ReDim Preserve shortArray(5)
ActiveSheet.Range("A1:F1") = shortArray
twoDarray = ActiveSheet.Range("A1:F1").Value
oneDarray = Application.Transpose(Application.Transpose(twoDarray))
ReDim Preserve oneDarray(1 To 3)
ActiveSheet.Range("A2:C2") = oneDarray
End Sub
您可以使用application.index:
Sub tst()
Dim rng As Range
Dim arr() As Variant, x
Set rng = Range("a1:ab500000")
arr = rng
x = Application.Index(arr, [row(2:413497)], Array(24, 25, 26))
Sheets(2).Cells(2, 1).Resize(413497, 3).Value = x
End Sub
谢谢,但我看不出它是如何回答我关于2D数组的问题的。@MichalRosa抱歉,错过了这一部分,因为它没有被突出提到。答案已更新,以显示如何处理二维阵列。确实是完美的短+1);旁注:它是413496,最好使用
.Resize(UBound(x),UBound(x,2))
-FYI。因此,您甚至可以使用数组(26,25,24,1)
:-)将第一个基于一的列计数器1
附加为最后一列,并按相反顺序添加。非常感谢。