【VBA】CSVの文字内の「,」を除く方法!LINE INPUT!

この記事は約5分で読めます。
スポンサーリンク
コピーボタン
記事のタイトルとURLをコピー
スポンサーリンク

【VBA】CSVの文字内の「,」を除く方法!LINE INPUT!

VBAでCSVをLINE INPUTで読み込んだ時に、
文字内に「,」が含まれていると、

1,000 → 「1」「000」

のように分けられてしまいます。。

今回はそんなCSVの「,」の対処法を紹介したいと思います!

まずは再現。

まずは、SPLITで想定外の箇所まで
分割されてしまう事例を再現します。

下記のプログラムを実行すると、

Sub CSV()

    MOJIRETSU = "AAAA,BBB,""1,000"",10,""15,000"""
    Debug.Print MOJIRETSU 
    
    MOJI = Split(MOJIRETSU, ",")
    
    Debug.Print 0 & "→"; MOJI(0)
    Debug.Print 1 & "→"; MOJI(1)
    Debug.Print 2 & "→"; MOJI(2)
    Debug.Print 3 & "→"; MOJI(3)
    Debug.Print 4 & "→"; MOJI(4)
    Debug.Print 5 & "→"; MOJI(5)


End Sub

下記の通り、残念ながら数字の中の「,」も分割されてしまいます。

AAAA,BBB,"1,000",10,"15,000"
0→AAAA
1→BBB
2→"1
3→000"
4→10
5→"15

CSVで文字内に「,」が入るときは「"」で分けられる。

CSVファイルで、文字内に「,」が入るときは、
「”(ダブルクォーテーション)」で分けられます。

例えば、上記のMOJIRETSUの場合、

「AAAA,BBB,1,000,10,15,000」

だと、どこが区切り位置かわからないので、

「AAAA,BBB,"1,000",10,"15,000"」

のように、「”」を使うことで、どこが区切り位置かわかるようになっています。

この仕組みを使って、作ったのが↓のプログラムです。


Sub CSV2()

    MOJIRETSU = "AAAA,BBB,""1,000"",10,""15,000"""
    
    
    F = InStr(1, MOJIRETSU, """")
    If F > 0 Then
LABEL1:
        S = InStr(F + 1, MOJIRETSU, """")
        
        MOJI1 = Left(MOJIRETSU, F - 1)
        MOJI2 = Mid(Replace(MOJIRETSU, ",", "_"), F + 1, S - F - 1)
        MOJI3 = Right(MOJIRETSU, Len(MOJIRETSU) - S)
        
        MOJIRETSU = MOJI1 & MOJI2 & MOJI3
        
        F = InStr(1, MOJIRETSU, """")
        If F > 0 Then GoTo LABEL1
        
    End If
    
    
    MOJI = Split(MOJIRETSU, ",")
    
    Debug.Print MOJIRETSU 'AAAA,BBB,"1,000",10,"15,000"
    Debug.Print 0 & "→"; MOJI(0)
    Debug.Print 1 & "→"; MOJI(1)
    Debug.Print 2 & "→"; MOJI(2)
    Debug.Print 3 & "→"; MOJI(3)
    Debug.Print 4 & "→"; MOJI(4)
    

End Sub

この実行結果は、下記の通り、思った通りの場所で分割できていることが分かります。

AAAA,BBB,1_000,10,15_000
0→AAAA
1→BBB
2→1_000
3→10
4→15_000

プログラムの仕組み

仕組みとしては、本当に単純で、

F = InStr(1, MOJIRETSU, """")
S = InStr(F + 1, MOJIRETSU, """")


で、1つ目の「”」と、2つ目の「”」の位置を調べて、

    MOJI1 = Left(MOJIRETSU, F - 1)
    MOJI2 = Mid(Replace(MOJIRETSU, ",", "_"), F + 1, S - F - 1)
    MOJI3 = Right(MOJIRETSU, Len(MOJIRETSU) - S)

    MOJIRETSU = MOJI1 & MOJI2 & MOJI3

で、
・「”」の左までの文字列
・「”」「”」の間の[,]を[_]に変えた文字列
・「”」の右の文字列
を取り出して合体させています。

あとは、これを繰り返して、「”」がなくなるまで繰り返して終わりです。

まとめ

他の人のやり方を見ると、別で関数を作っていたのですが、
強引に作ってみました。笑

残念ながら文字列に「"」が入ってくるとどうもならなくなりますが、、、
「,」しかない場合は、このプログラムを使ってみてください!

コピーボタン
記事のタイトルとURLをコピー
スポンサーリンク
スポンサーリンク
マクロVBA
スポンサーリンク
nujonoaをフォローする
nujonoa_blog

コメント欄

タイトルとURLをコピーしました