VBA中如何提取选中区域第一列所有单元格位置生成数组
VBA获取选区第一列单元格地址数组方案
实现逻辑
你需要获取选中区域第一列所有单元格的A1样式相对地址,组成一维字符串数组。直接调用Columns(1)生成的内容不符合要求,核心原因是:
- 直接读取
Columns(1).Value得到的是二维数组,存储的是单元格的内容值,不是地址字符串,结构和你需要的一维字符串数组完全不匹配,也就是你截图中展示的不可用情况。
可直接复用的代码
通用易读写法(推荐)
逻辑清晰,适配所有Excel版本,无兼容性问题:
Dim ar As Variant Dim firstColRng As Range Dim cellIdx As Long ' 定位选中区域的第一列 Set firstColRng = Selection.Columns(1) ' 初始化数组长度,和第一列单元格数量一致 ReDim ar(1 To firstColRng.Cells.Count) ' 遍历填充每个单元格的相对地址,Address(0,0)表示生成不带$符号的A1格式地址 For cellIdx = 1 To firstColRng.Cells.Count ar(cellIdx) = firstColRng.Cells(cellIdx).Address(0, 0) Next cellIdx
当选中区域为E26:I31时,上述代码生成的ar数组完全等价于Array("E26", "E27", "E28", "E29", "E30", "E31"),可以直接适配你现有代码的调用逻辑。
无循环快捷写法
不需要逐单元格遍历,借助工作表计算函数直接生成目标数组:
Dim ar As Variant ar = Application.Transpose(Evaluate( _ "ADDRESS(ROW(" & Selection.Columns(1).Address & "),COLUMN(" & Selection.Columns(1).Address & "),4)" _ ))
效果参考


内容的提问来源于stack exchange,提问作者Michael McCarthy
相关产品推荐
相关产品推荐

