Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在不循环的情况下将部分数组输出到范围?_Excel_Vba - Fatal编程技术网

Excel 在不循环的情况下将部分数组输出到范围?

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(

将数组的一部分输出到范围的最快、最有效的方法是什么

我可以很容易地将工作表范围读取到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(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
附加为最后一列,并按相反顺序添加。非常感谢。