使用开头的 5 位订单 ID 将 15 位订单号拉到新列

Pull 15 digit order number to new column using the beginning 5 digit order ID

我有两列 (B&C) 的订单数据,其中包含各种字母和数字的组合,可能包含也可能不包含以多种不同方式混合在单元格中的特定 15 位订单号。订单号可以位于单元格的左中或右方。所有订单号都有一个特定的 5 位数字标识符(总共 75 个唯一标识符)作为每个订单号的开头。 5 位标识符和完整的 15 位订单 ID 的示例

难以获取 PO 编号的单元格值示例,某些单元格包含不可用的部分订单号以及可能小于或短于 15 位数字的随机文本或数字字符串

我的最终目标是有一个列只列出从 B 和 C 中提取的 15 位订单号,任何多于或少的东西都将是空白。使用所有 75 个唯一的 5 位订单 ID 的列是否有助于提取该订单数据。

Z 列中的“5 位标识符”(从第 2 行开始)和 A 列中的 'full 15 digit order ID' 从第 2 行开始,B 列中有一个未使用的列,打开 VBE 并粘贴以下内容进入一个新的模块代码 sheet.

Sub digit_identifiers()
    Dim r As Long, v As Long, vDIDs As Variant, vDOIDs As Variant
    
    With Worksheets("Sheet1")  '<~~set this worksheet properly!!
        vDIDs = .Range(.Cells(2, "Z"), .Cells(Rows.Count, "Z").End(xlUp)).Value2
        vDOIDs = .Range(.Cells(2, "A"), .Cells(Rows.Count, "A").End(xlUp)).Value2
        .Range(.Cells(2, "B"), .Cells(Rows.Count, "B").End(xlUp)).NumberFormat = "[color13]@"
        
        For r = LBound(vDOIDs, 1) To UBound(vDOIDs, 1)
            For v = LBound(vDIDs, 1) To UBound(vDIDs, 1)
                If CStr(vDOIDs(r, 1)) Like Chr(42) & CStr(vDIDs(v, 1)) & Chr(42) Then
                    'full 15 digit order ID
                    .Cells(1 + r, "B") = CStr(Mid(CStr(vDOIDs(r, 1)), InStr(1, CStr(vDOIDs(r, 1)), CStr(vDIDs(v, 1)), vbTextCompare), 15))
                    'alternate for just the 5 digit identifier
                    '.Cells(1 + r, "B") = CStr(vDIDs(v, 1))
                    Exit For
                End If
            Next v
        Next r
    End With
End Sub

点击Alt+Q到return到工作sheet然后Alt +F8 到 运行 宏。您的结果应类似于以下内容。

您将“5 位标识符”放入 Z 列的顺序可能会影响结果。如果“38003”在结果本应为 'C0009' 时可能会产生误报匹配,请确保 'C0009' 按顺序排在“38003”之前。