VBA有没有简单的方法可以删除空白但不是全部
我通常使用此代码删除空白:
Option Explicit
Sub DeleteBlanks()
Dim intCol As Integer
For intCol = 1 To 14 'cols A to D
Range(Cells(2, intCol), Cells(146521, intCol)). _
SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
Next intCol
End Sub
但我的情况有点特别,我无法使用此代码 我的表看起来像这个,但有更多列:
Item code Description Cond1 Cond2 ....
A ID1 Alpha 1 BOX 10 BOX
B
ID1 Bravo 1 BOX 50 BOX
C ID1 Charlie 1 BOX
D
ID1 Delta 5 BOX
E ID1 Echo 2 BOX 20 BOX
F ID1 Foxtrot 1 BOX 40 BOX
G ID1 Golf 1 BOX 20 BOX
我想这样:
Item code Description Cond1 Cond2 ....
A ID1 Alpha 1 BOX 10 BOX
B ID1 Bravo 1 BOX 50 BOX
C ID1 Charlie 1 BOX
D ID1 Delta 5 BOX
E ID1 Echo 2 BOX 20 BOX
F ID1 Foxtrot 1 BOX 40 BOX
G ID1 Golf 1 BOX 20 BOX
目标不是删除COND2等列中的空格,而只是在ITEM和CODE不在同一行时将该行按顺序排列。 我希望我很清楚。 如果可以轻松改变列数或行数,那将是很好的。 同样的答案,但是从ITEM CODE和DESCRIPTION中重新排序。
如果我不够清楚,请向我询问更多信息。 提前致谢。 詹姆斯
答案 0 :(得分:0)
如果排序,我想你可能只是添加一个列(比如A)和A2:
=IF(C1="",B1,B2)
复制下来。选择ColumnA,Copy,Paste Special,值顶部,将B1移至A1,删除ColumnB并过滤以删除ColumnB中的空白。
答案 1 :(得分:0)
如果您填写第一列中的值,则可以使用某些代码删除空白。 以下代码将使用空白</ p>上方的值填充选定范围
Sub Fill_in_blanks()
' this macro fills in blanks with the values above
' the empty cell
' it then does a copy paste special values to
' convert all the cells from a formula to a value
Dim myRng As Range
Set myRng = Selection
myRng.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=R[-1]C"
myRng.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
然后,您可以通过选择第2列并使用此代码删除具有空白列2的行来删除整行
Sub del_blank_zero()
Dim rng As Range
Dim mycell As Range
Set rng = Selection
For Each mycell In rng
If mycell = 0 Or mycell = "" Then
mycell.EntireRow.Delete
End If
'Debug.Print mycell.Address
Next mycell
End Sub
从下面的问题我修改了删除代码 仅选择第一列,然后运行代码,它处理您提供的示例 我没有使用10的偏移量,如果您的数据更宽或更窄,您只需更改该值
Sub del_blank_zero()
Dim rng As Range
Dim mycell As Range
Set rng = Selection
For Each mycell In rng
If mycell.Offset(0, 1) = 0 Or mycell.Offset(0, 1) = "" Then
Range(mycell.Offset(0, 1), mycell.Offset(0, 10)).Delete Shift:=xlUp
End If
If mycell = 0 Or mycell = "" Then
mycell.Delete Shift:=xlUp
End If
Next mycell
End Sub