亲,这个用VBA编程会方便很多。
先提醒,请务必先把数据备份一下!
打开你的Excel文件,按“Alt+F11”打开VBA编辑窗口,然后在左侧对应的Sheet上双击,右侧空白处粘贴下面的代码。关闭VBA窗口。然后按“Alt+F8”打开宏窗口,选择刚插入的宏,点击“执行”。
Sub hb()
Dim i, ra, r, c As Long
c = ActiveSheet.UsedRange.Columns.Count
ra = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1").Resize(ra, 1).SpecialCells(xlCellTypeBlanks).Delete
For i = 2 To c
r = Cells(Rows.Count, i).End(xlUp).Row
Cells(1, i).Resize(r, 1).SpecialCells(xlCellTypeBlanks).Delete
r = Cells(Rows.Count, i).End(xlUp).Row
ra = Cells(Rows.Count, "A").End(xlUp).Row
Cells(1, i).Resize(r, 1).Copy Cells(ra + 1, "A")
Next
End Sub
追问
我执行后报错,能帮忙再看下吗
追答我这边反复测试都没问题。最怕400错误……看图片你的数据都放在了Sheet1里面吧?代码更改如下,再试一下:
Sub hb()
On Error Resume Next
Dim i, ra, r, c As Long
With ThisWorkbook.Sheets("Sheet1")
c = .UsedRange.Columns.Count
ra = .Cells(Rows.Count, "A").End(xlUp).Row
If .Range("A1").Resize(ra, 1).SpecialCells(xlCellTypeBlanks) Is Nothing Then Else .Range("A1").Resize(ra, 1).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
For i = 2 To c
r = .Cells(Rows.Count, i).End(xlUp).Row
If .Cells(1, i).Resize(r, 1).SpecialCells(xlCellTypeBlanks) Is Nothing Then Else .Cells(1, i).Resize(r, 1).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
r = .Cells(Rows.Count, i).End(xlUp).Row
ra = .Cells(Rows.Count, "A").End(xlUp).Row
.Cells(1, i).Resize(r, 1).Copy .Cells(ra + 1, "A")
Next
End With
End Sub
追问可以执行。 但是如果最终结果显示在 G列,要怎么调
因为显示在A列,就覆盖了原先A列的数据了。
追答这个程序执行下来,不光是覆盖了A列的数据,而且B/C/D/E/……后面列的空白单元格全部都被删除了。这个表和原来完全面目全非。
这就是我要你备份原数据的原因!你觉得显示在哪一列还有意义吗?
追问懂了 谢谢