非循环VBA实现Excel N列固定数字前置拼接递增序列填充
VBA无循环填充指定区域实现方案
需求说明
现有如下预定义变量:
Code = "XYZ123" First = 13 Last = 27
需要填充工作表N列中从First行到Last行的单元格,填充值拼接规则:
- 取Code字符串第5位字符(示例值为
'2') - 拼接Code字符串第4位字符(示例值为
'1') - 拼接Code字符串第6位字符(示例值为
'3') - 拼接从1开始、长度为
Last - First + 1的连续递增序列
预期输出效果:
N13: 2131 N14: 2132 N15: 2133 ... N27: 21315
实现要求:不允许使用For循环遍历单元格。
实现代码
Sub FillTargetRange() Dim Code As String, First As Long, Last As Long Code = "XYZ123" First = 13 Last = 27 ' 提取固定前缀 Dim fillPrefix As String fillPrefix = Mid(Code, 5, 1) & Mid(Code, 4, 1) & Mid(Code, 6, 1) ' 数组计算一次性写入,无任何循环逻辑 With Range("N" & First & ":N" & Last) .Value = Evaluate("=""" & fillPrefix & """&ROW(" & First & ":" & Last & ")-" & First - 1) End With End Sub
逻辑说明
- 提前提取拼接规则中固定不变的3位字符前缀,避免重复计算
- 借助
Evaluate函数直接生成和目标区域尺寸一致的一维数组:通过ROW(行号区间)生成连续行号序列,减去偏移量First-1后得到从1开始的递增序列,和前缀拼接后直接一次性赋值给目标单元格区域 - 代码执行效率远高于循环遍历写法,运行结果完全匹配预期:N13单元格值为
2131,逐行递增到N27单元格值为21315
内容的提问来源于stack exchange,提问作者Diaa
相关产品推荐
相关产品推荐

