VB:选择列中的每个第6个单元格并插入右侧

时间:2016-06-04 00:03:54

标签: excel vba excel-vba

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

这就是我迄今为止所做的工作,但它很长并需要永远输入:

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

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

感谢。

3 个答案:

答案 0 :(得分:1)

在循环中执行此操作,因此您无需全部输入。

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

next

您不必进行选择,也可以执行range("A"&i).insert Shift:=xlToRight

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

你可以如下:

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

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

    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)

      只会考虑“常量”(如上所定义)字符串值

    • SpecialCells(xlCellTypeConstants, xlNumbers)

      仅考虑“常量”(如上定义)数值

    只有键入xlCellTypeFormulas而不是xlCellTypeConstants

  • ,才能对包含公式的单元格实现相同的效果