VBA如何用单行代码将工作表范围字符串存入一维字符串数组
语法错误原因
- 你提前声明了
1 To 2的定长字符串数组,VBA不支持对定长数组执行整体赋值操作,只有动态数组可以接受整体赋值。 - 多单元格的
Range.Value默认返回下标从1开始的二维Variant类型数组(第一维对应行,第二维对应列),和你声明的一维字符串数组类型完全不匹配,赋值自然会报错。
单行无循环实现方案
可以通过Transpose+Join+Split的组合实现单行写入一维字符串数组,无需编写显式遍历代码:
Sub myArr() Dim V As Variant ' 单行赋值,分隔符请选择单元格内容中不存在的字符,避免拆分错误 V = Split(Join(WorksheetFunction.Transpose(Range("A1:A2").Value), "|"), "|") ' 测试输出:Hello World Debug.Print V(0), V(1) End Sub
补充说明
- 该方案返回的数组是下标从0开始的一维字符串数组,如果你需要下标从1开始,可以在模块顶部添加
Option Base 1声明。 - 如果读取的是单行单元格范围(例如
A1:C1),不需要调用Transpose,直接写V = Split(Join(Range("A1:C1").Value, "|"), "|")即可。 - 如果单元格内容可能包含任意字符,可以使用不可见特殊字符作为分隔符,例如
vbCrLf、Chr(0)等,避免拆分冲突。 - 注意:如果单元格范围行数超过65536,
Transpose函数会失效,这种场景建议使用循环实现。
内容的提问来源于stack exchange,提问作者Kawalpreet Kaur
相关产品推荐
相关产品推荐

