我有以下情况: 在工作表(下拉列表)中,我有2列包含产品名称及其各自的ID。在另一个工作表(SelectProduct)中,我有一个产品名称的下拉列表,我为其编写了一些VBA代码以允许多个选择。
以什么方式对产品串进行拆分并检索EACH产品的ID,然后将每个ID作为字符串放在不同的单元格中?
例如。单元格A2中的初始字符串是Product1; Product2; Product3,我想最终得到ID1; ID2;另一个单元格中的ID3。
编辑:以上只是一个了解我需要的例子。 我的专栏有606个产品,ID范围从1到606
另一个例子:cell-Tire中的字符串; Bumper; Helmet
这些特定产品的ID结果 - 156; 35; 310
ID不会按顺序排列,因为它取决于产品的选择顺序。
答案 0 :(得分:1)
使用 C3:D10 中的查找表和 A1 中的数据,这个小 UDF():
Public Function GetIds(r1 As Range, r2 As Range) As String
Dim t As String
ary = Split(r1.Text, ";")
For Each a In ary
For i = 1 To r2.Rows.Count
If a = r2(i, 1).Value Then
GetIds = GetIds & ";" & r2(i, 2)
End If
Next i
Next a
GetIds = Mid(GetIds, 2)
End Function
将产生:
ID可以是数字的也可以是非数字的
答案 1 :(得分:0)
快速接近我会这样做:
首先,我会通过分隔符(我理解为半列)分割:
a = "Product1;Product2;Product3"
b = Split(a, ";")
在这种情况下,b
将是一个元素数组。因此,我会从右开始解析,直到我再也找不到任何数字:
Set c = New Collection
For j = 0 To UBound(b)
cnt1 = ""
cnt2 = 1
Do While IsNumeric(Left(Right(b(j), cnt2), 1))
cnt1 = Left(Right(b(j), cnt2), 1) & cnt1
cnt2 = cnt2 + 1
Loop
c.Add "ID" & cnt1
Next j
请注意您的" ID +号码"将在集合c
中。
这意味着您可以通过循环遍历它来构建它们:
newString = ""
For Each element In c
newString = element & ";"
Next element
P.S。我相信虽然使用RegEx(正则表达式)研究解决方案会更有效,但模式并不太复杂。
答案 2 :(得分:0)
获取ID#的最简单方法是循环遍历每个字符并删除任何非alpha数字。
>
只需将A1设置为您的单元格所在的范围,
str2将全部带有数字;分体