2016-05-23 5 views
0

私は、関数InStr関数を使用する方法を知っているが、私は知らないことは、このようにそれを使用する方法である:アドバンス機能InStr関数

Image of my excel. 私は右のセルにデータを挿入するためにループを作りたいです。 第二の要素を追加するための私のコードは次のとおりです。

For j = 3 To 129 
    For i = 2 To 849 
     Cells(i, j) = Mid(Cells(i, 1), InStr(Cells(i, 1), ",") + 1, (InStr(InStr(Cells(i, 1), ",") + 1, Cells(i, 1), ",")) - (InStr(Cells(i, 1), ",") + 1)) 
    Next i 
Next j 

問題がある、私は変数jに応じて、InStr関数の多くを行うために、複雑なループを使用しなければならないでしょう。

InStrの関数が私の言う場所にある場合:x番目の文字( "、")を探したいと思います。問題は、1番目の "InStr"を無視する必要があるということです。 "2番目の位置を与えるので、"、 "。

私は質問がもっと複​​雑であると思うので、あなたが理解できなかったことを私に尋ねてください!

P .:既にカラムB /エントリとC /クラスの値を挿入しました。代わりに

+0

InStrでは、どこから探し始めるかを指定できることがわかっていますそれは文字列の4桁目から始まり、最初の3文字は無視されます。 'Instr(4、Cells(i、1)、")+1) – Dave

+0

私が知っている、問題は、私が位置を見つけるために知っている方法が呼び出されているということです私の関数InStr内の関数InStr。私が無視したいコンマごとに、他のInStrを呼び出す必要があります。これは私が考えることができない進歩です。 –

+0

また、コンマの各行を分割して配列を作成し、順番に繰り返してセルに書き込むこともできます。また、いくつかの要素を好きなようにさまざまなセルに書き込むこともできます。 'myArray = Split(Cells(i、1)、"、 ")'は、あなたが使用したい要素をより良く制御できるようにします。 – Dave

答えて

0

使用Split()

あなたは、彼らはすでにに現れるのと同じ順序ですべての値を入れたい場合は:

Dim values As Variant 

For i = 2 to Cells(Rows.Count, 1).End(xlUp).Row 

    values = Split(Cells(i, 1).Value, ",") 
    Cells(i, 1).Resize(1, UBound(values) + 1).Value = values 

Next 

それとも、別の列に異なる値たい場合:

Dim values As Variant 

For i = 2 to Cells(Rows.Count, 1).End(xlUp).Row 

    '// Create an array of values from your string 
    values = Split(Cells(i, 1).Value, ",") 

    '// Lets say you want to put the 3rd value in column D 
    Range("D" & i).Value = CStr(values(2)) '// arrays are zero indexed and start at 0 

Next 

+0

ループでエラーが発生するおそらく、セル(Rows.Count、1).End(xlUp) –

+0

更新された最初のコードが完璧に動作していると思います。私は2番目のものは分かりませんが、私はちょうど約126列の最初のものを作るためにループが必要だと思っています。 –

+0

@VBAAdvance最初に行うべきことは、各コンマにすべての値を分けて(左の緑色の目盛り) –

関連する問題