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

Excel VBA:匹配JIS编号并填充未占用工单列问题求助

问题:JIS编号匹配工单时避免数据覆盖的VBA优化方案

背景与核心规则

  • 需将含JIS编号的源表格(raw_tbl)数据,匹配到目标表格(processed_tbl)的对应工单行中
  • processed_tbl中每个JIS编号对应多行工单位置,已提前确保该表格有足够行容纳所有raw_tbl的工单
  • 匹配规则:
    1. 遍历raw_tbl的每个JIS编号,定位processed_tbl中相同的JIS编号行
    2. 若该行的Work Order列为空,将raw_tbl对应行的数据填入
    3. 若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:05:05