如何修改VBA宏以统计每20只股票的批量处理耗时?
调整VBA宏实现每20只股票批量耗时记录
我来帮你调整这个VBA宏,完美实现每处理20只股票就记录一次批量耗时的需求,具体改动和完整代码如下:
核心思路
- 不再只统计600只股票的总时长,而是每20只作为一个批次,单独记录每批的处理耗时
- 用变量跟踪结果写入的单元格位置,从C30开始,每写完一批自动下移一行
- 精准判断每批的开始与结束节点,确保每20只的耗时计算准确
修改后的完整代码
Sub UpdatedRepeatMacro() Dim i As Integer Dim BatchStart As Double Dim rowNum As Integer ' 控制结果写入的行号 Dim ElapsedTime As String rowNum = 30 ' 初始写入位置为C30 For i = 1 To 600 ' 每一批的第一只股票(第1、21、41...只),记录批次开始时间 If i Mod 20 = 1 Then BatchStart = Timer End If Call Sheet4.SpinButton1_SpinDown DoEvents Application.Run "EikonRefreshWorkbook" DoEvents Application.Run "EikonRefreshWorkbook" DoEvents Call CopyPaste DoEvents ' 每处理完20只,计算并记录这批的耗时 If i Mod 20 = 0 Then ElapsedTime = Format((Timer - BatchStart) / 86400, "hh:mm:ss:ms") Range("C" & rowNum).Value = ElapsedTime rowNum = rowNum + 1 ' 行号下移,准备写下一批结果 End If Next i MsgBox "所有股票指示器已更新,每20只的批量耗时已记录在C30开始的单元格中。", vbOKOnly End Sub
关键改动说明
- 新增
BatchStart变量:专门记录每一批20只股票的处理起始时间,替代了原来全局的Start变量,确保每批耗时计算独立不混淆。 - 新增
rowNum变量:控制结果写入的位置,初始设为30(对应C30),每写完一批自动+1,无需手动调整单元格位置。 - 时间格式修正:去掉了原来除以
86400*600的计算,因为现在我们要的是20只股票的总处理耗时,而非单只平均时间;Timer - BatchStart得到秒数,除以86400(一天的总秒数)后用Format转成时分秒毫秒格式。 - 批量判断逻辑:用
i Mod 20 = 1判断每批的开始,i Mod 20 = 0判断每批的结束,600只股票刚好分成30批,完全匹配需求。
内容的提问来源于stack exchange,提问作者AND AND AND
相关产品推荐
相关产品推荐

