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
-