2016-06-17 9 views
1

私は数字の文字列を解析し、それに応じて行を作成しようとしています。 Example Dataの写真の左側には、入力データの例があり、右側には希望の出力が表示されています。私は、各数字の組み合わせのための括弧内の各数字のための一意の行のデータを挿入したいと思います。ここで解析はvbaを使用して数値の文字列をExcel

Example Data

私は問題を解決しようとするために使用されるコードの一例です。

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 
+0

はまた、私の例の目的のために私は私のデータの列Gに始まる出力データを持って、私は実際の場所に出力を挿入したいですそれに応じて行を挿入しながら既存の入力データがあった場所を示します。これは、入力データ内に、データ内で散在させる必要のない数値の組み合わせがあるためです。 – Rookie

+0

私のコード例では、データがC列にあると仮定しています – Rookie

答えて

1

次のスクリプトを使用することを検討してください:

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 
+0

実際にあなたが提案しているのは、大括弧(7)内に設定された文字数を仮定しています。実際には 'intCombinationDigitsLen'で何桁の桁数を計算し、それに応じて挿入する行数を変更します。それで、もし私が 'rngCell'に開始括弧が含まれていれば、それがスクリプトの追加された反復であると仮定して(そして空ではないと仮定して)、すべての繰り返しをチェックしているので、 。その後、再び下降する。私は 'intCombinationDigitsLen'によって相殺することができたと思いますが、何かが欠落していないことを確認したかったのです。 – nbayly

+0

ニースコード! Set rngCell = rngCell.Offset(1、0) 'を' Set rngCell = rngCell.Offset(intCombinationDigitsLen、0) ' – Brian

+0

に変更するだけです。さて、それを持っています! – Brian

関連する問題