首页 > 解决方案 > 将范围转换为数组

问题描述

我有以下工作表:

报告

我想将 C15 到最后一行/列的范围转换为数组。

我尝试了以下代码但无法正常工作:

Sub rangeToArray()

    Dim arr() As Variant

    arr = Range("C15", Range("C15").End(xlDown).End(xlToRight))

   End Sub

我明白了:手表

有人可以帮我吗?我想获得从 C15 到最后一行/列的范围,并根据不同的标准对其进行排序并将行复制到具有相同格式的不同电子表格中。我想将范围转换为数组,因为我有超过 30k 行并且工作速度更快。

谢谢!

标签: excelvba

解决方案


arr = Range("C15", Range("C15").End(xlDown).End(xlToRight))只是另一种说法arr = Range("C15").CurrentRegion

最重要的是,这当前指的是ActiveSheet,因此您可能想尝试以下操作:

Sub rangeToArray()

Dim arr() As Variant

With Sheet1 'Change to whichever CodeName your sheet has
    arr = .Range("C15").CurrentRegion
End With

End Sub

注意:正如我在评论中所说,CurrentRegion一旦您的数据开始出现空白,它将无法正常工作。因此,您可能需要重新编写代码以检查 column 中最后使用的行和 row 中C:C最后使用的列15

Sub rangeToArray()

Dim arr() As Variant
Dim lr As Long, lc As Long

With Sheet1 'Change to whichever CodeName your sheet has
    lr = .Cells(.Rows.Count, 3).End(xlUp).Row
    lc = .Cells(15, .Columns.Count).End(xlToLeft).Column
    arr = .Range(.Cells(15, 3), .Cells(lr, lc))
End With

End Sub

推荐阅读