求助:如何用VBA实现列间依次填充1-10、11-20等差序列
VBA按列填充连续数值解决方案
问题根源
你的代码有两个核心问题:
- 循环顺序错误:原代码是先遍历行、再遍历列,导致会先填满第一行1-10,第二行11-20,和你要的「先列后行」填充逻辑不符。
- LR/LC的初始化逻辑无效:工作表初始为空时,
Cells(Rows.Count,1).End(xlUp).Row会返回1,用它作为循环范围只会填充1行,这也是你替换后只输出第一列的原因。
修正后的代码
Sub counter() Dim R As Integer Dim C As Integer Dim T As Integer T = 1 ' 先遍历列(这里填2列,可按需修改) For C = 1 To 2 ' 再遍历每列的10行 For R = 1 To 10 Cells(R, C).Value = T T = T + 1 Next R Next C End Sub
关键修改说明
- 调换循环层级:外层循环列、内层循环行,确保每列先填满1-10(第一列)、11-20(第二列),完全匹配你的需求。
- 移除无效的LR/LC变量:因为你是主动填充固定数量的行和列,不需要依赖工作表已有数据的行/列数。如果后续需要动态填充更多列,只需把
For C = 1 To 2中的2改成你需要的列数即可。
可选:动态从空白列开始填充
如果需要从工作表最后一列的下一列开始填充(比如已有数据,要追加列),可以调整代码如下:
Sub counterDynamic() Dim R As Integer Dim C As Integer Dim T As Integer Dim StartCol As Integer ' 获取最后一列的下一列作为起始列 StartCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1 T = 1 ' 填充2列,每列10行 For C = StartCol To StartCol + 1 For R = 1 To 10 Cells(R, C).Value = T T = T + 1 Next R Next C End Sub
内容的提问来源于stack exchange,提问作者Carol Cronje
相关产品推荐
相关产品推荐

