2015-10-06 55 views
1

我遇到以下情况: 在工作表(下拉列表)中,我有2列包含产品名称及其各自的ID。在另一个工作表(SelectProduct)中,我有一个产品名称的下拉列表,我写了一些VBA代码以允许多个选择。Excel:拆分分隔字符串并检索字符串中每个元素的数字值

有什么方法可以对产品字符串执行类似分割的操作,并检索每个产品的ID,然后将每个ID放在不同的单元格中作为字符串?

例如。单元格A2中的初始字符串是Product1; Product2; Product3,我想在另一个单元格中以ID1; ID2; ID3结尾。

编辑:上面只是一个例子来得到我需要什么的想法。 我的列具有606种产品,具有ID的范围从1到606

另一个例子:字符串中细胞轮胎;保险杠;头盔

那些特定产品 - 156的ID的结果; 35; 310

ID将不会按顺序排列,因为它取决于产品的选择顺序。

+1

可能不是最好的**解决方案,但也许是一个UDF,它使用'Split'方法将单元格A2加载到数组中,比查找每个ID并将其写回单元格? –

+0

ID值在哪里?一种方法是将字符串读入为变量,使用“;”将变量分割为数组。作为分隔符,遍历数组遍历数组,查找数组中项目的每个ID值,将结果匹配连接到一个字符串,然后将该字符串吐出到表单中。 – sous2817

+0

如果总是说'产品',那么为什么不直接用'ID'替换'产品'呢? MsgBox替换(Application.Range(“A2”),“Product”,“ID”) – PractLogical

回答

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可以是数字或非数字

+0

中检索有关这些产品的信息,正如我在考虑/建议:) –

+0

正如我正在考虑Scott的建议,您发布了此信息。它看起来奇迹,理论上应该工作,但是它给了我#NAME?错误。我的ID在不同的工作表中。我正在调用函数= GetIds(A2,Dropdown!B1:C606)。我错过了什么? – Hidoshi

+0

我试图把产品列表放在同一张表中,我称之为功能。仍然获得#NAME? – Hidoshi

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 

附:我相信虽然使用RegEx(正则表达式)研究解决方案会更有效率,但该模式并不太复杂。

0

要获得ID#s,最简单的方法是遍历每个字符并去除任何非alpha数字。

str2 = "" 
str1 = ActiveSheet.Range("A1").Value 
For i = 1 To Len(str1) 
c = Mid(str1, i, 1) 
If IsNumeric(c) Or c = ";" Then 
str2 = str2 & c 
End If 
Next i 

刚刚成立A1到什么范围你的是,

的STR2蜂将所有数字与;分体