优化大数据集下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
相关产品推荐
相关产品推荐

