vba数组操作了,依然会卡一秒多
vba吧
全部回复
仅看楼主
level 13
Sub DivideByTenThousand(sourceRange As Range)
Application.ScreenUpdating = False ' 禁用屏幕刷新
Application.Calculation = xlCalculationManual ' 禁用自动计算
Dim inputData As Variant
Dim outputRange As Range
Dim i As Long, j As Long
' 一次性读取原始数据到数组
inputData = sourceRange.Value
' 设置输出区域(源区域右侧一列)
Set outputRange = sourceRange.Offset(0, 1)
' 处理数据数组
For i = LBound(inputData, 1) To UBound(inputData, 1)
For j = LBound(inputData, 2) To UBound(inputData, 2)
If IsNumeric(inputData(i, j)) Then
inputData(i, j) = Round(inputData(i, j) / 10000, 2)
Else
inputData(i, j) = 0
End If
Next j
Next i
' 一次性写入结果
outputRange.Value = inputData
' 恢复Excel设置
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
2025年04月18日 03点04分 1
level 13
因为接下来要对结果数值进行调整所以不能用公式
2025年04月18日 04点04分 2
level 5
只有一列那个j循环就取消吧,直接把j换成1
2025年04月18日 04点04分 3
也没有减少运算量。。
2025年04月19日 03点04分
level 13
估计是其他自定义公式重算,明明没有引用单元格
在外面调用时设置禁止刷新试试
2025年04月19日 03点04分 4
level 6
把你现在的除法改为乘法运算,速度可以提高几倍
2025年04月20日 10点04分 5
level 1
把刷新相关的那几行去掉。另外,提醒下vba的round不是四舍五入
2025年04月22日 01点04分 6
银行家四舍五入最好
2025年04月22日 04点04分
level 7
看起来程序代码已经最优了,1秒也不是很久,如果成千上万的数据那就正常了
2025年04月25日 01点04分 7
就几百行。我觉得也可能是自定义查询函数卡,我引用来源单元格的公式应该不会重算吧。两个value换成value2,现在不到一秒了
2025年04月25日 03点04分
1