我想从单元格A2开始,然后选择该列中的每个第6个单元格。接下来,我想插入一个单元格并将所有内容移到右侧。
这就是我迄今为止所做的工作,但它很长并需要永远输入:
Range("A2,A8,A14,A20,A26,A32,A38,A44,A50,A56,A62,A68,A74").Select
Selection.Insert Shift:=xlToRight
请告诉我有一个更简单的表达式来获得所需的输出。
感谢。
答案 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”到最后非空
.SpecialCells(xlCellTypeConstants)
部分注意进一步过滤前一个范围,只考虑具有“常数”(即不是由公式得出)值的单元格
你甚至可以更具体,如
SpecialCells(xlCellTypeConstants, xlTextValues)
只会考虑“常量”(如上所定义)字符串值
SpecialCells(xlCellTypeConstants, xlNumbers)
仅考虑“常量”(如上定义)数值
只有键入xlCellTypeFormulas
而不是xlCellTypeConstants