簡體   English   中英

Excel 2010 VBA Macro使Excel凍結

[英]Excel 2010 VBA Macro making excel freeze

我有一個很大的數據塊,跨度大於50,向下大於1500,某些條目是非常大的負數,例如-1000000或-9820000,我希望所有這些都變成-100。 我還希望-100以上的任何非零數字顯示2個小數。 我以為這個vba宏可以用,但是它會導致excel死機,並且excel屏幕會變成灰色和idk,這是怎么回事。 我認為可能是因為單元格太多,所以需要很長時間並且超載某些東西,有沒有辦法使此代碼更有效?

Sub Blah()
    For ColNum = 2 To WorksheetFunction.CountA(Range("1:1"))
        For RowNum = 2 To WorksheetFunction.CountA(Range("A:A"))
            If Cells(RowNum, ColNum) < -101 Then Cells(RowNum, ColNum) = -100
            If Cells(RowNum, ColNum) <> 0 And Cells(RowNum, ColNum).Value > -100 Then Cells(RowNum, ColNum).NumberFormat = "0.00"
        Next RowNum
    Next ColNum
End Sub

盡管Tmdean指出了解決方案,但我將發布示例代碼,這可能會有所幫助。

Edit1:似乎在單元格中分配負值也花了一段時間。 因此,應用相同的原理。 首先獲取相關單元格並一次性分配值。

Sub marine()
    Dim r As Range, c As Range, nonzero As Range, s As Range

    Set r = ActiveSheet.UsedRange
    For Each c In r
        Select Case True
        Case c.Value <= -101
            '~~> Identify the cells first and combine all of them, don't assign value
            If s Is Nothing Then Set s = c _
            Else Set s = Union(s, c)
        Case c.Value <> 0 And c.Value > -100
            '~~> Identify the cells first and combine all of them, do not format
            If nonzero Is Nothing Then Set nonzero = c _
            Else Set nonzero = Union(nonzero, c)
        End Select
    Next
    '~~> Once you got all the cells, assign value in one go
    If Not s Is Nothing Then s.Value = -100
    '~~> Once you got all the cells, format in one go
    If Not nonzero Is Nothing Then nonzero.NumberFormat = "0.00"
End Sub

您可以用For Loop替換它,更容易些。
您還可以更明確地設置范圍對象或使用UsedRange。 HTH。

該代碼中沒有什么特別慢。 您要更改多少個單元格? 我唯一的建議是事先將整個范圍的NumberFormat設置為0.00,然后僅對循環中0或-100的單元格將其設置回General。 更改NumberFormat可能是最昂貴的操作,因此您希望最大程度地減少為單個單元格設置它的時間。

很快有人會建議您關閉Application.ScreenUpdating。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM