VBA中是否存在简便方法向数组的首尾分别添加指定字符串?
VBA 数组首尾追加元素实现方案
你当前从Excel Range读取的nameArray为默认1开头的二维单列数组,以下是兼容性最强、无需修改原有后续遍历逻辑的实现方法:
核心实现代码
直接在你读取数组的代码后插入以下追加逻辑即可,原有For Each遍历代码不需要任何调整:
Dim nameArray as variant Dim k as integer Dim item1 as string Dim item2 as string k = 1 nameArray = Range(Cells(2, 3), Cells(5, 3)).Value ' -------------------------- ' 新增:首尾追加元素逻辑开始 ' -------------------------- Dim originalRowCnt As Long, newRowCnt As Long, i As Long originalRowCnt = UBound(nameArray, 1) newRowCnt = originalRowCnt + 2 ' 构建长度+2的新二维单列数组,适配原数组格式 Dim newArr As Variant ReDim newArr(1 To newRowCnt, 1 To 1) ' 开头插入item1 newArr(1, 1) = item1 ' 填充原数组内容到中间位置 For i = 1 To originalRowCnt newArr(i + 1, 1) = nameArray(i, 1) Next ' 结尾插入item2 newArr(newRowCnt, 1) = item2 ' 替换原数组变量 nameArray = newArr ' -------------------------- ' 新增:首尾追加元素逻辑结束 ' -------------------------- ' 原有遍历逻辑完全不变 For Each i In nameArray newcol = baseclmn + k tblComp.ListColumns.Add(newcol).Name = i k = k + 1 Next I
简化版方案(仅适用于无需保留二维数组格式的场景)
如果后续逻辑不需要用二维数组,可转一维数组后操作,代码更简短:
' 把原二维单列数组转一维 Dim tempArr As Variant tempArr = Application.Transpose(nameArray) ' 拼接首尾元素 nameArray = Array(item1) ReDim Preserve nameArray(0 To UBound(tempArr) + 1) For i = 0 To UBound(tempArr) nameArray(i + 1) = tempArr(i) Next nameArray(UBound(nameArray)) = item2
注意:该方案得到的是0开头的一维数组,若原有代码用索引访问数组需要调整下标,
For Each遍历不受影响。
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

