Excel VBA:匹配JIS编号并填充未占用工单列问题求助
问题:JIS编号匹配工单时避免数据覆盖的VBA优化方案
背景与核心规则
- 需将含JIS编号的源表格(raw_tbl)数据,匹配到目标表格(processed_tbl)的对应工单行中
- processed_tbl中每个JIS编号对应多行工单位置,已提前确保该表格有足够行容纳所有raw_tbl的工单
- 匹配规则:
- 遍历raw_tbl的每个JIS编号,定位processed_tbl中相同的JIS编号行
- 若该行的Work Order列为空,将raw_tbl对应行的数据填入
- 若Work Order列已被占用,继续查找该JIS编号的下一个实例,重复检查直到找到空的Work Order列
- 额外要求:禁止使用
Offset(防止表格列重排后代码失效),解决当前代码覆盖已填充数据的问题
现有VBA代码片段
For Each r In raw_tbl.ListColumns(raw_JIS_col_idx).DataBodyRange Set rangeFind = .Find(r.Value, LookIn:=xlValues) If Not rangeFind Is Nothing Then 'JIS found in processed table If rangeFind.Offset(0, 7).Value = "" Then 'check for empty work order For lc = 1 To raw_tbl.ListColumns.Count mc = Application.Match(raw_tbl.HeaderRowRange(, lc), processed_tbl.HeaderRowRange, 0) If Not IsError(mc) Then pRow = rangeFind.Row pCol = processed_tbl.ListColumns(mc).Index x = raw_tbl.DataBodyRange(rRow - 1, lc).Value processed_tbl.DataBodyRange(pRow - 1, pCol).Value = x End If Next lc 'else 'search for the next matching rangefind End If End if Next r
优化需求
- 替换
Offset(0,7)为通过表头匹配的可靠列定位方式 - 完善逻辑:找到第一个匹配JIS后,若Work Order列非空,继续查找该JIS的下一个实例,直到找到空行再填入数据
- 评估
Application.Match与Find两种方法在该场景下的适用性,选择更高效的实现方式
内容的提问来源于stack exchange,提问作者dubyarly
相关产品推荐
相关产品推荐

