我有两列(B& C)订单数据,其中包含多种字母和数字组合,可能包含也可能不包含以不同方式混合在单元格中的特定15位数订单号。订单号可以是单元格的左中间或右侧。所有订单号都有一个特定的5位数标识符(总共75个唯一的标识符),用于启动每个订单号。 5位数字标识符和完整15位订单ID的示例
使PO编号难以获取的单元格值示例,某些单元格包含不可用的部分订单编号以及可能小于或短于15位的随机文本或数字字符串
我的最终目标是让一个列只列出从B和C中提取的15位数订单号,或多或少只是空白。使用所有75个唯一5位数订单ID的列有助于提取订单数据。
答案 0 :(得分:1)
使用Z列中的“5位数字标识符”(从第2行开始)和A列中的“完整15位数订单ID”,从第2行开始,B列中未使用的列,打开VBE并粘贴以下链接到新的模块代码表。
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 返回工作表,然后 Alt + F8 运行宏。您的结果应类似于以下内容。
将“5位数字标识符”放入Z列的顺序可能会对结果产生影响。如果'38003`在结果应为'C0009'时可能产生误报匹配,请确保'C0009'在订单中位于'38003'之前。