使用开头的 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 的示例
- 12018 120180000000852
- 38003 380030000003456
- C0009 C00090000087652
- P0009 P00090000378464
- A0010 A00100000456321
难以获取 PO 编号的单元格值示例,某些单元格包含不可用的部分订单号以及可能小于或短于 15 位数字的随机文本或数字字符串
- 540501/120180000000852
- BOA00100000456321 8054960602
- 86790865//380030000003456
- DSA1491799-000
- 380030000056
我的最终目标是有一个列只列出从 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”之前。
我有两列 (B&C) 的订单数据,其中包含各种字母和数字的组合,可能包含也可能不包含以多种不同方式混合在单元格中的特定 15 位订单号。订单号可以位于单元格的左中或右方。所有订单号都有一个特定的 5 位数字标识符(总共 75 个唯一标识符)作为每个订单号的开头。 5 位标识符和完整的 15 位订单 ID 的示例
- 12018 120180000000852
- 38003 380030000003456
- C0009 C00090000087652
- P0009 P00090000378464
- A0010 A00100000456321
难以获取 PO 编号的单元格值示例,某些单元格包含不可用的部分订单号以及可能小于或短于 15 位数字的随机文本或数字字符串
- 540501/120180000000852
- BOA00100000456321 8054960602
- 86790865//380030000003456
- DSA1491799-000
- 380030000056
我的最终目标是有一个列只列出从 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”之前。