当我执行下面所示的代码时,数组会自动将其自身重新调整为 Z(1 到 10)
,但我不喜欢它重新调整尺寸的方式,因为我总是想保留数组位置与其在电子表格中的行位置相同。但我仍然可以通过将两者相等来将数组分配给 Excel 范围,如下所示:
Dim range_test As Range
Set range_test = ThisWorkbook.Worksheets("Sheet1").Range("A2:A11")
ReDim Z(2 To 11) As Variant
Z = range_test
ThisWorkbook.Worksheets("Sheet1").Range("D2:D11") = Z
但是当我包含整个范围(包括第一行或标题)时,我的问题是我无法使用上面使用的代码将数组分配给 Excel 范围,否则它将包含标题。所以我将必须按照如下所示的方式进行:
Dim range_test As Range
Set range_test = ThisWorkbook.Worksheets("Sheet1").Range("A1:A11")
ReDim Z(1 To 11) As Variant
Z = range_test
Dim i As Long
For i = 2 To 11
ThisWorkbook.Worksheets("Sheet1").Range("E" & i) = Z(i, 1)
Next i
我想要做的是类似于数组允许您像其他语言(例如 MATLAB)一样对它进行切片的逻辑,因为我觉得与将数组等同于一个数组相比,创建一个用于填充数组的循环会占用更多资源。范围,反之亦然(如果我错了,请纠正我)。请引用以下概念:
ThisWorkbook.Worksheets("Sheet1").Range("G2:G11") = Z(2 to 11)
ThisWorkbook.Worksheets("Sheet1").Range("H2:H11") = Y(2 to 11)
最佳答案
如果我理解正确,你可以避免循环
ThisWorkbook.Worksheets("Sheet1").Range("E2:E11").Resize(range_test.Count - 1) = Application.Index(Z, Evaluate("row(2:10)"))
您不需要对“2:10”位进行硬编码。
关于arrays - 如何正确地将不从索引1开始的数组范围分配给Excel范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605638/