如果为0或""删除行:代码工作但很慢

时间:2016-04-26 14:14:04

标签: excel vba macros

问题:

通过此论坛上的录音机和帮助,我制作了一个代码(用于按钮)。专栏' i'已经(从第25行)' Pcs'或一个数字。我的宏找到Pcs并将其更改为""并且宏删除""和0' s。填充细胞的长度是可变的,所以我做了500作为结束'但它永远达不到。如果我运行宏,它可以工作并完成工作,但需要很长时间,特别是因为它必须做500行..

function myFunction(cssClasses){  

  $(cssClasses).css({
                    'position' : 'absolute',
                    'left' : '50%',
                    'top' : '50%',
                    'margin-left' : -$('.box.wide .title').outerWidth()/2,
                    'margin-top' : -$('.box.wide .title').outerHeight()/2
                });

}

myFunction('.box.standard .title');
myFunction('.box.large .title');
myFunction('.box.wide .title');

我很高兴我可以在论坛和录音机的帮助下制作这个宏,但现在我卡住加速了,没有真正的线索从哪里开始。有人有提示吗?

谢谢,如果需要更多信息或努力,请告诉我。

2 个答案:

答案 0 :(得分:3)

要以快速可用的方式进行,您可以使用:

Sub DelMe()
  Dim i As Long, x As Variant, y As Range
  With Sheets("Sheet1")
    x = .Range("I1", .Cells(Rows.Count, 9).End(xlUp)).Value
    If UBound(x) < 25 Then Exit Sub
    For i = 25 To UBound(x)
      If x(i, 1) = 0 Or x(i, 1) = "" Or InStr(1, x(i, 1), "pcs", vbTextCompare) > 0 Then
        If y Is Nothing Then
          Set y = .Rows(i)
        Else
          Set y = Union(y, .Rows(i))
        End If
      End If
    Next
    y.EntireRow.Delete xlUp
  End With
End Sub

它只是一次删除所有范围(您想要删除的范围)。

如果您有任何疑问,请询问:)

答案 1 :(得分:1)

试试这个:

Sub fix3()


Dim intEnd As Long
Dim ws As Worksheet
Dim i As Long

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

On Error GoTo getout
Set ws = Sheets("Sheet1") 'Change to your sheet
ws.Cells.Replace What:="pcs", Replacement:="", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

intEnd = ws.Range("I" & ws.Rows.Count).End(xlUp).row

For i = intEnd To 25
    If Int(ws.Cells(i, "I").Value) = 0 Then
        ws.Rows(i).Delete
    End If
Next i
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Exit Sub

getout:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub