arrays - 如何正确地将不从索引1开始的数组范围分配给Excel范围?

标签 arrays excel vba

当我执行下面所示的代码时,数组会自动将其自身重新调整为 Z(1 到 10),但我不喜欢它重新调整尺寸的方式,因为我总是想保留数组位置与其在电子表格中的行位置相同。但我仍然可以通过将两者相等来将数组分配给 Excel 范围,如下所示:

enter image description here

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”位进行硬编码。

enter image description here

关于arrays - 如何正确地将不从索引1开始的数组范围分配给Excel范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605638/

相关文章:

c++ - 如何检查数组的所有值是否都等于 0?

python - numpy 数组中的匹配元素

javascript - 如何将包含日语字符的字符串有条件地放入Javascript中的单独数组中

arrays - 根据其他单元格中的值求和

excel - 将参数传递给 PowerPivot 查询

excel - 在 Excel 窗口/工作表上找到 FreezePanes 点

vba - 为什么 Len 和 VBA.Len 返回不同的结果?

vba - 如何使用VBA更改Excel图表中的数据标签宽度?

excel - 选择文件夹路径 - 不读取所选文件夹中的文件

excel - 错误 : Invalid Use of Property when attemting to reset Excel UsedRange