使用vbaparsingexcelstring

我想parsing一个数字string,并相应地创build行。 示例数据图片的左侧是input数据的示例,右边是我想要的输出。 我想为每个数字组合的括号内的每个数字插入一个唯一的数据行。

示例数据

以下是我用来解决问题的代码示例。

Option Explicit Sub example() Dim num As Variant Dim x As Variant Dim i As Integer Dim j As Integer Dim k As Integer Dim m As Integer Dim test As Variant Dim test2 As Variant Dim count As Integer m = 0 For i = 1 To 3 num = Range("C" & 5 + i + m).Value For j = 1 To Len(num) test = Mid(num, j) If Left(Mid(num, j), 1) = "[" Then For k = 1 To Len(num) - (j + 1) m = m + 1 Range("C" & 5 + m + i - 1).EntireRow.Insert test2 = Left(Mid(num, j + k), 1) Range("C" & 5 + m + i - 1).Value = Left(num, j - 1) + test2 Next k End If Next j Next i End Sub 

请考虑使用以下脚本:

 Sub splitcombinations() Dim rngCell As Range Set rngCell = ThisWorkbook.Sheets(1).Range("A2") Dim strCombinationDigits As String, strBaseDigits As String Dim intCombinationDigitsLen As Integer Dim x As Integer Do While rngCell.Value2 <> "" If InStr(rngCell.Value2, "[") > 0 Then strCombinationDigits = Mid(rngCell.Value2, InStr(rngCell.Value2, "[") + 1, InStr(rngCell.Value2, "]") - InStr(rngCell.Value2, "[") - 1) intCombinationDigitsLen = Len(strCombinationDigits) strBaseDigits = Left(rngCell.Value2, InStr(rngCell.Value2, "[") - 1) ActiveSheet.Range(rngCell.Offset(1, 0), rngCell.Offset(intCombinationDigitsLen - 1, 0)).EntireRow.Insert For x = 1 To intCombinationDigitsLen rngCell.Offset(x - 1, 0).Value2 = strBaseDigits & Mid(strCombinationDigits, x, 1) rngCell.Offset(x - 1, 1).Value2 = rngCell.Offset(0, 1).Value2 rngCell.Offset(x - 1, 2).Value2 = rngCell.Offset(0, 2).Value2 Next End If Set rngCell = rngCell.Offset(intCombinationDigitsLen , 0) Loop End Sub