Arrays 将范围的值指定给数组
我编写了下面的代码,它在即时窗口中打印Arrays 将范围的值指定给数组,arrays,vba,excel,range,Arrays,Vba,Excel,Range,我编写了下面的代码,它在即时窗口中打印210 Sub RangeToArr() Dim data() As Variant data = Range("Salary[EmpNum]").Value Debug.Print UBound(data) End Sub 当我使用以下命令时,将显示下标超出范围运行时错误消息 Sub RangeToArr() Dim data() As Variant data = Range("Salary[EmpNum]").
210
Sub RangeToArr()
Dim data() As Variant
data = Range("Salary[EmpNum]").Value
Debug.Print UBound(data)
End Sub
当我使用以下命令时,将显示下标超出范围
运行时错误消息
Sub RangeToArr()
Dim data() As Variant
data = Range("Salary[EmpNum]").Value
Debug.Print data(210)
End Sub
如果
数据
是一个数组,那么问题是什么?否则,如何访问分配给数组的范围值,如上所述?要确保示例正常工作,请确保表示例中有210行
通常,请尝试以下方法了解阵列和范围:
- 将一个简单的命名范围
包装成多列多行MyNamedRange
- 在里面放一些值
- 运行此命令,查看即时窗口中的内容:
稍微更改
(1,2)
值以获得想法。要确保示例有效,请确保表示例中有210行
通常,请尝试以下方法了解阵列和范围:
- 将一个简单的命名范围
包装成多列多行MyNamedRange
- 在里面放一些值
- 运行此命令,查看即时窗口中的内容:
将
(1,2)
值稍微更改一下以了解情况。转换为数组的范围将创建一个二维数组,如果您尝试返回数据(210),您将引用它,就像它是一个一维数组一样。您可以通过返回
data(210, 1)
我只能假设为什么它强制使用二维数组。我的猜测是因为如果你的范围包括额外的列,它将是二维数组。即使只有一列,创建二维数组的行为也意味着处理数据的方法保持不变。有一个例外-如果您的范围是单个单元格,VBA将仅将值填充为单个维度。转换为数组的范围将创建一个二维数组,如果您尝试返回数据(210),您将引用它,就像它是一个单维数组一样。您可以通过返回
data(210, 1)
我只能假设为什么它强制使用二维数组。我的猜测是因为如果你的范围包括额外的列,它将是二维数组。即使只有一列,创建二维数组的行为也意味着处理数据的方法保持不变。这有一个例外-如果您的范围是单个单元格,VBA将仅将值填充为单个维度。还要使用断点检查“局部变量”窗口中的数据范围,它是否仅为单个维度?甚至一个列的数据也可以限定为(1到210,1到1)。进一步查看,并假设您希望数据表示范围,请从分配行中删除
.Value
部分。范围上方是筛选表范围的一列。范围是6到215Salary
是表对象的名称,EmpNum
是其中一列的标题。转换为数组的范围将创建一个二维数组,当您尝试返回数据(210)时,您将引用它,就像它是一个一维数组一样。如果您尝试返回数据(210,1),会发生什么情况?(编辑:-我最初放置数据(20,0)时忘记了范围转换为基1中的数组)每当使用单元格范围创建数组时,创建的数组将始终是二维数组。这是因为电子表格以两个维度存储值,即行和列。所以第一个维度是行,第二个维度是列。请参阅。还要使用断点检查“局部变量”窗口中的数据范围,它是否只是一个维度?甚至一个列的数据也可以限定为(1到210,1到1)。进一步查看,并假设您希望数据表示范围,请从分配行中删除.Value
部分。范围上方是筛选表范围的一列。范围是6到215Salary
是表对象的名称,EmpNum
是其中一列的标题。转换为数组的范围将创建一个二维数组,当您尝试返回数据(210)时,您将引用它,就像它是一个一维数组一样。如果您尝试返回数据(210,1),会发生什么情况?(编辑:-我最初放置数据(20,0)时忘记了范围转换为基1中的数组)每当使用单元格范围创建数组时,创建的数组将始终是二维数组。这是因为电子表格以两个维度存储值,即行和列。所以第一个维度是行,第二个维度是列。请参阅。如果Salary[EmpNum]是一个单列,则数组大小应为data(1到210,1)。如果答案错误,我不介意更正,但我需要了解假设中的错误,以便进行相应更新。如果Salary[EmpNum]是单列,则数组大小应为数据(1到210,1)。如果我的答案是错误的,我不介意纠正它,但我需要理解我的假设中的错误,这样我才能相应地更新。