Excel:分隔分隔的string,并检索string中每个元素的数值

我有以下情况:在工作表(下拉列表)中,我有2列包含产品名称及其各自的ID。 在不同的工作表(SelectProduct)中,我有一个产品名称的下拉列表,我写了一些VBA代码以允许多个select。

用什么方法来执行类似于产品string的分割,然后检索每个产品的ID,然后将每个ID放在不同的单元格中作为string?

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

编辑:以上只是一个例子,得到我需要什么的想法。 我的专栏有606个产品,ID范围从1到606

另一个例子:细胞中的string – 轮胎;保险杠;头盔

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

ID将不会按顺序排列,因为这取决于产品的select顺序。

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

作为快速的方法,我会这样做:

首先,我会用分隔符(我理解为一个半列)来分割:

 a = "Product1;Product2;Product3" b = Split(a, ";") 

在这种情况下, b将是一个元素的数组。 因此,我会从右边开始parsing,直到我找不到任何数字:

 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 

请注意您的“身份证号码”将在collectionsc 。 这意味着你可以通过循环来构build它们:

 newString = "" For Each element In c newString = element & ";" Next element 

Ps我相信,虽然使用RegEx(正则expression式)来研究解决scheme会更高效,但模式并不太复杂。

获得ID#的最简单的方法是遍历每个字符并去掉任何非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将与所有数字一起; 分体