Excel:拆分分隔的字符串并检索字符串中每个元素的数值

时间:2015-10-06 12:30:08

标签: string excel vba excel-vba

我有以下情况: 在工作表(下拉列表)中,我有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不会按顺序排列,因为它取决于产品的选择顺序。

3 个答案:

答案 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

将产生:

enter image description here

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将全部带有数字;分体