如何用VBA从Excel单行单元格区域创建数组?
VBA单行单元格区域转数组问题解决办法
当你将单行单元格区域(如A1:F1)赋值给Variant数组时,得到的是1行6列的二维数组,而非预期的一维数组。这就是原代码只能打印A1值的原因——你遍历的是数组的行维度,而该数组仅1行,循环仅执行一次。
解决方法1:遍历数组的列维度
直接针对二维数组的列维度遍历,无需修改数组结构:
Dim mCH As Variant Dim n As Integer mCH = Range("A1:F1").Value ' 遍历列维度(UBound(mCH, 2)返回列数6) For n = 1 To UBound(mCH, 2) Debug.Print mCH(1, n) ' 固定行号为1,依次取每一列的值 Next n
解决方法2:将二维数组转为一维数组
通过两次Application.Transpose将单行二维数组转成一维数组,适配原循环逻辑:
Dim mCH As Variant Dim n As Integer ' 两次转置:先把单行转成单列二维数组,再转成一维数组 mCH = Application.Transpose(Application.Transpose(Range("A1:F1").Value)) For n = 1 To UBound(mCH) Debug.Print mCH(n) Next n
原理说明
VBA中Range.Value返回的数组默认是基于1的二维数组:
- 单列区域(如
A1:A6)生成6行×1列的二维数组,行维度上界为6,遍历行即可获取所有值 - 单行区域(如
A1:F1)生成1行×6列的二维数组,列维度上界为6,必须遍历列才能拿到所有元素
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

