为了账号安全,请及时绑定邮箱和手机立即绑定

从VBA中的范围创建阵列

从VBA中的范围创建阵列

30秒到达战场 2019-09-26 11:05:38
我遇到了一个看似基本的问题,但找不到解决该问题的任何资源。简而言之,我只想将一个单元格范围(全部为一列)的内容加载到数组中。我能够通过DirArray = Array(Range("A1"), Range("A2"))但是由于某种原因,我无法以这种方式创建数组:DirArray = Array(Range("A1:A2"))我的实际Range更长(并且长度可能会有所不同),因此我不想以这种方式单独枚举单元格。谁能告诉我如何正确地将整个范围加载到数组中?使用后面的代码:MsgBox UBound(DirArray, 1)和MsgBox UBound(DirArray)返回0,而使用前者则返回1。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果我们这样做的话:

Dim myArr as VariantmyArr = Range("A1:A10")

新数组将具有二维。使用它并不总是那么舒服:

//img1.sycdn.imooc.com//5d8c2b240001cb2c06240476.jpg

为了摆脱两个维度,当将单个列放入数组时,我们可以使用内置的Excel函数“ Transpose”。有了它,数据就成为一维的:

//img1.sycdn.imooc.com//5d8c2b250001494406210405.jpg

如果我们连续有数据,则单个转置将无法完成任务。我们需要两次使用移调功能:

//img1.sycdn.imooc.com//5d8c2b270001288b07680308.jpg


查看完整回答
反对 回复 2019-09-26
?
阿晨1998

TA贡献2037条经验 获得超6个赞

使用Value2具有性能优势。根据查尔斯·威廉姆斯博客

Range.Value2与Range.Value的工作方式相同,除了它不检查单元格格式并转换为日期或货币。这就是为什么检索数字时它比.Value更快的原因。

所以

DirArray = [a1:a5].Value2

奖励阅读

  • Range.Value返回或设置一个Variant值,该值表示指定范围的值。

  • Range.Value2此属性和Value属性之间的唯一区别是Value2属性不使用Currency和Date数据类型。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 600 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信