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将与所有数字一起; 分体