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
我给了一个任务,用 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