VB:select列中的第6个单元格并插入到右侧

我想从单元格A2开始,然后select该列中的每个第6个单元格。 接下来,我想插入一个单元格,并将所有内容都移到右侧。

这是我迄今为止的工作,但它是很长的,需要永远输出:

Range("A2,A8,A14,A20,A26,A32,A38,A44,A50,A56,A62,A68,A74").Select Selection.Insert Shift:=xlToRight 

请告诉我有一个更简单的expression式来获得所需的输出。

谢谢。

做一个循环,所以你不必input全部。

 for i = 2 to 10000 step 6 range("A" & i).Select Selection.Insert Shift:=xlToRight next 

你不必做select,你也可以做range("A"&i).insert Shift:=xlToRight

您可以使用Union函数来设置范围,然后将所有单元格移动到一起。

 Sub Demo() Dim rng As Range Dim lastRow As Long 'get last row in column "A" lastRow = Cells(Rows.Count, "A").End(xlUp).Row 'set range using Union function For i = 2 To lastRow Step 6 If rng Is Nothing Then Set rng = Range("A" & i) Set rng = Union(Range("A" & i), rng) Next 'move range to right rng.Insert Shift:=xlToRight End Sub 

你可以如下所示:

 For Each cell In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeConstants, xlNumbers) If (cell.Row - 2) Mod 6 = 0 Then cell.Insert Shift:=xlToRight Next cell 

但是如果你的需要不是实际上移动单元格(即将所有行单元格移动到相关单元格的右侧),而只是改变它们的值,那么你可以如下所示:

  For Each cell In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeConstants) If (cell.Row - 2) Mod 6 = 0 Then cell.Offset(, 1) = cell: cell.ClearContents Next cell 

这要快得多

关于你在上面的代码中看到的几句话:

  • Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)部分注意只考虑从“A1”到其最后一个非空列的“A”

  • .SpecialCells(xlCellTypeConstants)部分注意进一步过滤前一个范围,只考虑具有“常量”(即不是由公式产生的值)的单元格

    你甚至可以更具体的像

    • SpecialCells(xlCellTypeConstants, xlTextValues)

      这将只考虑“常量”(如上面定义的)string值

    • SpecialCells(xlCellTypeConstants, xlNumbers)

      这将只考虑“常量”(如上面定义的)数值

    只有通过键入xlCellTypeFormulas而不是xlCellTypeConstants