Vba 循环以从列中删除空白单元格 < >我需要从F4上删除列F中的空白单元格。每行将有0到很多空白单元格

Vba 循环以从列中删除空白单元格 < >我需要从F4上删除列F中的空白单元格。每行将有0到很多空白单元格,vba,excel,Vba,Excel,我对编码非常陌生,我最成功的方法是使用做了类似事情的代码并将其分解 下面是适用于类似情况的代码: Sub test() Dim i As Long With Worksheets("Sheet1") For i = 4 To .Cells(.Rows.Count, "F").End(xlUp).Row Do While .Cells(i, "F").Value2 = .Cells(1, "B").Value2 And Not IsEmpty(.Cells(i, "F")

我对编码非常陌生,我最成功的方法是使用做了类似事情的代码并将其分解

下面是适用于类似情况的代码:

Sub test()
Dim i As Long
With Worksheets("Sheet1")
    For i = 4 To .Cells(.Rows.Count, "F").End(xlUp).Row
        Do While .Cells(i, "F").Value2 = .Cells(1, "B").Value2 And Not 
IsEmpty(.Cells(i, "F"))
            .Cells(i, "F").Resize(1, 4).Delete shift:=xlToLeft
        Loop
Next i
End With
End Sub
下面是我试图用它做的:

Sub test()
Dim i As Long
With Worksheets("sheet1")
For i = 4 To .Cells(.Rows.Count, "F").End(xlUp).Row
    Do While .Cells(i, "F").Value2 = ""
        .Cells(i, "F").Resize(1, 4).Delete shift:=xlToLeft
    Loop
Next i
End With
End Sub
我在运行它时没有收到任何错误,但它也不工作


感谢您的指导

将空白单元格向右移动,以删除空白单元格。如果这些单元格也为空,则不会出现任何更改。如果要删除整行,请将代码更改为:

Sub test()
Dim i As Long
With Worksheets("sheet1")
For i =  .Cells(.Rows.Count, "F").End(xlUp).Row to 4 Step-1
    IF .Cells(i, "F").Value2 = ""
        .Cells(i, "F").entirerow.Delete shift:=xlUp
    Loop
Next i
End With
End Sub
试试这个:

Sub test()
Dim i As Long
Dim lastrow as integer

With Worksheets("sheet1")
lastrow= cells(rows.count, 6).end(xlup).row     'define your last filled row

For i = 4 To lastrow
    if IsEmpty(cells(i,6))= TRUE then
    Cells(i,6).Delete shift:=xlToLeft
Next i
End With
End Sub
然而,我通常发现从下往上删除单元格效果更好。所以……也许你也可以试试这个:

Sub test()
Dim i As Long
Dim lastrow as integer

With Worksheets("sheet1")
lastrow= cells(rows.count, 6).end(xlup).row     'define your last filled row

For i = lastrow To 4 step -1
    if IsEmpty(cells(i,6))= TRUE then
    Cells(i,6).Delete shift:=xlToLeft
Next i
End With
End Sub
假定 1.该代码的目的是仅消除F列中的空格 2.不需要删除整行。 3.删除单元格xlLeft会无意中将G列的内容(或空白单元格)放入F列。 可以尝试以下代码

   Sub test()
   Dim i As Long
   With Worksheets("sheet1")
   For i = .Cells(.Rows.Count, "F").End(xlUp).Row To 4 Step -1
       If .Cells(i, "F").Value2 = "" Then
      .Range(.Cells(i + 1, "F"), .Cells(.Cells(.Rows.Count, "F").End(xlUp).Row, "F")).Cut
      .Cells(i, "F").Select
      .Paste
       End If
    Next i
    End With
    End Sub

“它不起作用”不是很好的描述,如果看不到你的数据示例或不知道你想做什么,很难提供帮助。在这一点上,我唯一的建议是逐行检查代码,监视变量的值,找出发生了什么。看看Chip Pearson's这对我来说很好。F列中的值是您期望的值吗?顺便说一句,
Do-While.Cells(i,“F”).Value2=“”
可能是一个无限循环,如果您碰巧删除了它右边的所有内容。没错,“它不起作用”对我来说并没有多大帮助。我的意思是,运行宏不会对电子表格产生任何更改。不过,现在可以用了,谢谢!谢谢这帮了大忙。我将If-Then改为Do-While循环,现在工作起来就像做梦一样。@JamesG请向上投票,并将解决方案标记为答案(如果它对您有帮助)。