我们有以下 Excel 表:
单元格 A2 至 A10 已过滤:选项 3 和选项 4 已过滤。现在我们要将 A12:A16 中的数字粘贴到可见单元格旁边(即 B2:B10)。我们怎样才能做到这一点?
答案1
让 Y 和 Z 代表两个临时列(即超出您的数据)。
- 将您的数据从 A12-A16 移动到 B12-B16。
- 在 Y2 中,输入
=ROW()
。(在 Excel 2010 中,=ROW
可能会起作用,甚至可能是必需的。) - 向下拖至 Y10。
- 选择 Y2-Y10,键入Alt+ ;。(@Sean:谢谢你教我这个技巧!)
- 复制;然后单击 A12 并粘贴。
- 输入
=IFERROR(VLOOKUP(Y2,A$12:B$16,2,FALSE),"")
Z2 并向下拖至 Z10。(现在看起来应该像 B12-B16 中的数据。) - 关闭过滤。
- 复制 Z2-Z10,并将值粘贴到 B2-B10 中。
- (删除 Y 列和 Z 列。)
答案2
我找不到一种无需借助 VBA 即可粘贴并避免隐藏行的方法(我可以在复制之前使用ALT+仅复制可见项目)。;
此宏将复制 A12:16 到 B2,并向下复制,跳过隐藏行
Sub Paste2VisRows()
Dim rFrom As Range, rTo As Range
Dim i As Long, Ofset As Long
Set rFrom = Range("A12:A16")
Set rTo = Range("B2")
For i = 1 To rFrom.Rows.Count
Do Until Not rTo.Offset(Ofset).Rows.Hidden
Ofset = Ofset + 1
Loop
rFrom.Rows(i).Copy Destination:=rTo.Offset(Ofset)
Ofset = Ofset + 1
Next i
End Sub
答案3
从@SeanCheshire 复制宏代码并稍加修改,这样它会提示用户选择复制区域和粘贴区域。
复制区域可以选择范围,例如A1:A10,粘贴区域只需选择1个单元格,例如B11,如果让B12到B14隐藏,那么它会粘贴到B11,B15,B16,... B23
Sub Paste2VisRows()
Dim rFrom As Range, rTo As Range
Dim i As Long, Ofset As Long
Dim RngCopySelection As Range
Set RngCopySelection = Application.InputBox("Please select copy area", "Area Selection", , , , , , 8)
Dim RngPasteSelection As Range
Set RngPasteSelection = Application.InputBox("Please select paste area", "Area Selection", , , , , , 8)
Set rFrom = RngCopySelection
Set rTo = RngPasteSelection
For i = 1 To rFrom.Rows.Count
Do Until Not rTo.Offset(Ofset).Rows.Hidden
Ofset = Ofset + 1
Loop
rFrom.Rows(i).Copy Destination:=rTo.Offset(Ofset)
Ofset = Ofset + 1
Next i
End Sub
答案4
其想法是将所需的行排序到表格的顶部,粘贴数据,然后恢复到原始顺序。
- 用 1 填充单独的临时列
- 移除过滤器
- 确保只有包含所需数据的行上的单元格才填充 1
- 在另一列中对整个表格进行编号
- 使用 1 对表格进行升序排序
- 粘贴所需数据
- 使用数字列恢复原始顺序
- 删除临时列
注释。* 使用 Office 2007。* 据我所知,这是唯一合乎逻辑的方法。