从VBA中的范围创建阵列

我遇到了一个看似基本的问题,但找不到解决该问题的任何资源。

简而言之,我只想将一个单元格范围(全部为一列)的内容加载到数组中。

我能够通过

DirArray = Array(Range("A1"), Range("A2"))

但是由于某种原因,我无法以这种方式创建数组:

DirArray = Array(Range("A1:A2"))

我的实际Range更长(并且长度可能会有所不同),因此我不想以这种方式单独枚举单元格。谁能告诉我如何正确地将整个范围加载到数组中?

使用后面的代码:

MsgBox UBound(DirArray, 1)

MsgBox UBound(DirArray)

返回0,而使用前者则返回1。


30秒到达战场
浏览 607回答 3
3回答

慕哥9229398

如果我们这样做的话:Dim myArr as VariantmyArr = Range("A1:A10")新数组将具有二维。使用它并不总是那么舒服:为了摆脱两个维度,当将单个列放入数组时,我们可以使用内置的Excel函数“ Transpose”。有了它,数据就成为一维的:如果我们连续有数据,则单个转置将无法完成任务。我们需要两次使用移调功能:

阿晨1998

使用Value2具有性能优势。根据查尔斯·威廉姆斯博客Range.Value2与Range.Value的工作方式相同,除了它不检查单元格格式并转换为日期或货币。这就是为什么检索数字时它比.Value更快的原因。所以DirArray = [a1:a5].Value2奖励阅读Range.Value:返回或设置一个Variant值,该值表示指定范围的值。Range.Value2:此属性和Value属性之间的唯一区别是Value2属性不使用Currency和Date数据类型。
打开App,查看更多内容
随时随地看视频慕课网APP