我正在尝试转置“B”列的所有内容,但想跳过一行,然后抓取接下来的 4 行并将它们粘贴到同一列中。我怎样才能让这个循环跳过每 5 行,并自动将范围更改为下一个打开的单元格或“范围”,而无需手动逐个输入?
范围("B12:B16").选择 选择.复制 工作表(“Sheet2”).选择 范围("A2").选择 Selection.PasteSpecial 粘贴:=xlPasteAll, 操作:=xlNone, SkipBlanks:= _ 假,转置:=真 范围("B18:B22").选择 选择.复制 工作表(“Sheet2”).选择 范围("A3").选择 Selection.PasteSpecial 粘贴:=xlPasteAll, 操作:=xlNone, SkipBlanks:= _ 假,转置:=真 范围("B24:B28").选择 选择.复制 工作表(“Sheet2”).选择 范围("A4").选择 Selection.PasteSpecial 粘贴:=xlPasteAll, 操作:=xlNone, SkipBlanks:= _ 假,转置:=真
答案1
您可以将 Sheet1 上的列中的单元格命名为“数据”,然后在 Sheet2 中执行以下操作...
ABCDE 1 0 =INDEX(数据,$A1+1) =INDEX(数据,$A1+2) =INDEX(数据,$A1+3) =INDEX(数据,$A1+4) 2 =A1 + 5 =INDEX(数据,$A2 + 1) =INDEX(数据,$A2 + 2) =INDEX(数据,$A2 + 3) =INDEX(数据,$A2 + 4) 3 =A2 + 5 =INDEX(数据,$A3 + 1) =INDEX(数据,$A3 + 2) =INDEX(数据,$A3 + 3) =INDEX(数据,$A3 + 4) 4 ...
然后自动填充您需要的行数。
答案2
尝试一下我刚刚整理的以下内容,如果您想要的是宏版本而不是已经建议的基于公式的版本。
本质上,我认为它应该执行静态代码所做的事情,但在循环内 - 因此无需手动复制粘贴。如果整列都已满,它可能会阻塞(当它尝试选择最后一行之后时,它会死机)。
您可能需要更改起始和粘贴位置(靠近顶部)以满足您的特定要求 - 它当前从 B 列复制到 CF 列。
Dim CopyCell As Range
Dim PasteCell As Range
'starting location (ie, top of the list to copy)
Range("B1").Select
'pasting location (ie, top-left cell to start pasting to)
Set PasteCell = Range("C1")
Do While ActiveCell.Value <> 0
'copy the items in the next four rows
Set CopyCell = ActiveCell.Range("A1")
ActiveCell.Range("A1:A4").Select
Selection.Copy
'move to paste location
PasteCell.Select
'paste with transpose
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True
'adjust paste location for next paste
Set PasteCell = PasteCell.Offset(1, 0)
'return to last copied location and and move down five steps
'copying 4 rows but moving 5 is how every 5th row is missed
CopyCell.Select
ActiveCell.Offset(5, 0).Select
Loop