<スポンサーリンク>

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

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

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

<スポンサーリンク>

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

1,000 → 「1」「000」

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

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

まずは再現。

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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

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

1
2
3
4
5
6
7
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"」

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

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

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

プログラムの仕組み

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

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


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

1
2
3
4
5
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をフォローする

コメント欄

<スポンサーリンク>
タイトルとURLをコピーしました