Excel 舍入大量单元格时速度较慢 (VBA)

Excel slow when rounding a huge range of cells (VBA)

我给了一个任务,用 119col*176Rows = 20944(可能更多)双数单元格对 table 进行四舍五入。这来自具有大量测量和计算的测量机。 我的第一个想法是做一个简单的 vba 来循环更新该范围内的所有单元格,一个一个地循环,如下面的代码所示:.

但是...这太慢了,甚至 Excel 应用程序也会崩溃。我只需要相同的工作表,但值四舍五入到小数点后三位(来自 Excel 的 Format Cells 功能的四舍五入数字在这种情况下确实得到了工作,我需要四舍五入的数字并削减到每个值的小数点后第三位)

任何解决方法都将不胜感激

   Sub Round_numbers_click()
        Dim rng As Range
        Dim rCell As Range
    
        Dim valOriginal As Double
        Dim valRounded As Double
        
        Range("E15").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        
        Set rng = Application.Selection
        
        For Each rCell In rng.Cells
            valOriginal = col.Cells.Value
            valRounded = Round(valOriginal, 3)
            rCell.Value = valRounded
        Next rCell
    End Sub

将范围保存到变体数组,处理数组并将数组保存回范围。

Sub Round_numbers_click()
        Dim rng As Range
        Dim rCell As Range
        Dim vArr As Variant
        Dim iRow As Long, iCol As Long
    
        Dim valOriginal As Double
        Dim valRounded As Double
        
        Range("E15").Select
        Range(Selection, Selection.End(xlDown)).Select
        Range(Selection, Selection.End(xlToRight)).Select
        
        Set rng = Application.Selection
        vArr = rng
        For iRow = 1 To UBound(vArr, 1)
            For iCol = 1 To UBound(vArr, 2)
                vArr(iRow, iCol) = Round(Val(vArr(iRow, iCol)), 3)
            Next
        Next
        rng = vArr
    End Sub

您可以尝试使用评估。

Sub RoundToThree()
Dim rng As Range
Dim res As Variant

    Set rng = Range("E15")
    
    Set rng = Range(rng, rng.End(xlDown))
    
    Set rng = Range(rng, rng.End(xlToRight))
    
    res = Evaluate("ROUND(" & rng.Address & ",3)")
    
    rng.Value = res
    
End Sub