You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化大数据集下VBA实现Index-Match的运行速度

高效实现VBA版Index-Match批量填充(大数据集场景)

我的输出数据集存于ws_ps工作表(约15万行),末尾存在空列需填充,填充逻辑为匹配ws_priips工作表(约5万行)的对应值,本质是实现Excel的Index-Match功能。目前仅能使用VBA,已尝试两种方案但耗时过长:

  • 方案1:逐行调用WorksheetFunction,运行耗时12分钟
  • 方案2:将数据加载到数组后双层循环匹配,耗时15分钟

已知手动输入公式下拉可解决问题,但为降低操作误差、简化流程必须避免手动操作。现需为约10列实现该功能,求无需手动写公式或Python的大幅提速方案。

方案1代码(逐行调用WorksheetFunction)

On Error Resume Next
last_row_ps = ws_ps.UsedRange.Rows.Count
For ps_row = 2 To last_row_ps
    ws_ps.Cells(ps_row, 5).Value = WorksheetFunction.IfError(WorksheetFunction.Index(ws_priips.Range("A:G"), _
    WorksheetFunction.Match(ws_ps.Cells(ps_row, 2), ws_priips.Range("G:G"), 0), 5), "")
Next ps_row
On Error GoTo -1

方案2代码(数组双层循环匹配)

last_row_ps = ws_ps.UsedRange.Rows.Count
last_row_priips = ws_priips.UsedRange.Rows.Count
ps_array = ws_ps.Range("A1:X" & last_row_ps).Value
priips_array = ws_priips.Range("A1:AZ" & last_row_priips).Value

For ps_row = 2 To UBound(ps_array, 1)
    For priips_row = 2 To UBound(priips_array, 1)
        If ps_array(ps_row, 2) <> "" Then
            If ps_array(ps_row, 2) = priips_array(priips_row, 7) Then
                ws_ps.Cells(ps_row, 5).Value = priips_array(priips_row, 5)
                GoTo SkipLoop
            End If
        Else
            GoTo SkipLoop
        End If
    Next priips_row
SkipLoop:
Next ps_row

内容的提问来源于stack exchange,提问作者Entelechy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:36:06