Excel 如何循环给定次数的列

Excel 如何循环给定次数的列,excel,vba,Excel,Vba,我的第一行充满了值。我想在每个值之间插入两列,直到我的顶行中的最后一个非空单元格 我被困在代码中: Sub AddCol() ' 'AddCol宏 ' 对于i=1到2 表格(“现金流”)。选择 列(i+1)。选择 选择。插入Shift:=X1torRight,CopyOrigin:=xlFormatFromLeftOrAbove 接下来我 端接头 这将适用于您: Sub AddCol() ' ' AddCol Macro ' With Thisworkbook.Worksheets("Cash

我的第一行充满了值。我想在每个值之间插入两列,直到我的顶行中的最后一个非空单元格

我被困在代码中:

Sub AddCol()
'
'AddCol宏
'
对于i=1到2
表格(“现金流”)。选择
列(i+1)。选择
选择。插入Shift:=X1torRight,CopyOrigin:=xlFormatFromLeftOrAbove
接下来我
端接头

这将适用于您:

Sub AddCol() ' ' AddCol Macro '

With Thisworkbook.Worksheets("CashFlow")

For i = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column * 3 Step 3


    .Columns(i + 1).Insert Shift:=x1ToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    .Columns(i + 1).Insert Shift:=x1ToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Next i

End With    

End Sub
有几件事

a) 您需要获取列数的值,以便可以循环并添加

b) 循环时,从最高到最低循环,因为您正在添加列。如果从最低到最高循环,则会影响计数器,并且最终不会循环整个标头集

见以下代码:

子列sadd()
暗淡的lCol尽可能长
我想我会坚持多久
将myWS设置为工作表
设置myWS=表(“现金流”)
lCol=myWS.Cells(1,myWS.Columns.Count).End(xlToLeft).Column
对于i=lCol至1步骤-1
myWS.Columns(i).Insert-Shift:=xlToRight,CopyOrigin:=xlFormatFromLeftOrAbove
myWS.Columns(i).Insert-Shift:=xlToRight,CopyOrigin:=xlFormatFromLeftOrAbove
接下来我
端接头
一种较短的方式:

.Columns(i + 1).Resize(, 2).Insert Shift:=x1ToRight, CopyOrigin:=xlFormatFromLeftOrAbove

避免使用
工作表(“现金流”)。激活
使用此工作簿。工作表(“现金流”)
而不是您应该完全参考
列(i)
,因为如果程序切换工作表,插入内容将转到活动工作表。感谢@Damian作出了假设,但已编辑。您好Dean,再看一眼代码——J变量的作用是什么?@khalilsalame很好。我最初有
j
变量,因为我要循环添加列。但是,我选择了只包含两个
列。在单独的行中插入
。我已经更新了代码来显示这一点。