【发布时间】:2014-02-22 08:05:55
【问题描述】:
我希望将单元格 A1:B100 复制到 D1:E100 但删除空白。这可以通过公式实现还是我必须使用 VBA?
这是一个例子:
【问题讨论】:
我希望将单元格 A1:B100 复制到 D1:E100 但删除空白。这可以通过公式实现还是我必须使用 VBA?
这是一个例子:
【问题讨论】:
有一个简单的方法:
初始数据:
第一步:从A:B复制所有数据。选择D1,鼠标右键选择PasteSpecial->PasteValues:
第 2 步: 使用选定范围和列中的数据 D:E(在我的情况下为 D1:E8)按 CTRL+G
第三步:在GoTo对话框窗口中按Special...并选择Blanks
第四步:现在D1:E8中的所有空单元格都被选中了。
第五步:鼠标右键点击amy选中的单元格然后按删除
第6步:选择“向上移动单元格”并按确定。 完成!
结果:
UPD: 作为 cmets 的跟进,OP 在 A:B 中有 =IF(Sheet1!D11="YES",Sheet1!A11, "")。而且由于""实际上不是空白单元格,我们不能使用Special->Blanks。
有VBA解决方案:
Sub test()
Dim lastrow As Long
Dim cell As Range
Dim rng As Range
'change sheet name to suit
With ThisWorkbook.Worksheets("Sheet1")
'find lastrow in columns A:B
lastrow = Application.Max(.Cells(.Rows.Count, "A").End(xlUp).Row, _
.Cells(.Rows.Count, "B").End(xlUp).Row)
'Copy values from A:B to D:E
.Range("D1:E" & lastrow).Value = .Range("A1:B" & lastrow).Value
'Iterates throught each cell in D:E and if it equals to "" - remember it
For Each cell In .Range("D1:E" & lastrow)
If cell.Value = "" Then
If rng Is Nothing Then
Set rng = cell
Else
Set rng = Union(rng, cell)
End If
End If
Next
'delete all empty cells (with "")
If Not rng Is Nothing Then rng.Delete Shift:=xlUp
End With
End Sub
【讨论】:
1) 首先,在对任何工作簿进行任何重大更改之前,请务必确保您有一个备份副本或最近保存的副本,以防您需要恢复原始数据。
2) 现在,从列表顶部到底部选择一列中的单元格。
3) 确保此选定范围内的所有空白单元格都是您要删除的行。
4) 按键盘上的 F5 键(或选择编辑、转到)。
5) 单击特殊...按钮。
6) 单击空白选项,然后单击确定。这将选择您之前选择的范围内的所有空白单元格。
7) 现在选择“编辑”、“删除”,选择“整行”选项并单击“确定”。
8)我认为这可以满足您的要求,如果您仍想复制,请选择所有单元格并复制到其他单元格。
【讨论】: