スポンサーリンク

【Excel/VBA】テキストファイル(CSVファイル)読み込みの時に項目行を飛ばしたい

vba
スポンサーリンク
※当サイトは広告を含みます

csvファイルなどテキストファイルを読み込みするとき、1行目が項目行の場合、そこはインポートしなくていいんだけどな、というときがあります。特に、連続してcsvファイルを読み込みするときなど。

いつも、Line Input #1 とかでテキストファイルの読み込みをやってます。

で、もし項目行と判定できたら読み込みしない、とかしてました。

ふとネットでもっと良い方法をみかけたのでこれだ~採用~と思ったので、備忘録として記録しておきたくここに書きます。

この1組、2組、3組というファイル名のcsvファイルを読み込みします。

まず、こう書きました。

Sub Sample()

    Dim path As String
    path = “C:\Users\81907\Documents\”      ‘csvファイルの保存してあるパス
    Dim vFile As String
    vFile = Dir(path & “*組.csv”)           ‘〇組というファイルを次々開く

    Dim buf As String                       ‘csvファイル1行分を受け取る変数
    Dim tmp As Variant                      ‘1行分をカンマで分割し配列で受け取る
    Dim i As Long: i = 1                    ‘Excel出力行

    Do Until vFile = “”                     ‘〇組というcsvファイルがなくなるまで繰り返し

        Open path & vFile For Input As #1   ‘csvファイル開く

        Do Until EOF(1)                     ‘csvファイルの最後の行まで
            Line Input #1, buf              ‘1行分を変数bufで受け取り
            tmp = Split(buf, “,”)           ‘bufをカンマで分割し配列tmpで受け取る

            Cells(i, 1).Value = tmp(0)      ‘1列目クラス
            Cells(i, 2).Value = tmp(1)      ‘2列目氏名
            Cells(i, 3).Value = tmp(2)      ‘3列目身長
            Cells(i, 4).Value = tmp(3)      ‘4列目体重
            i = i + 1                       ‘Excelの行をカウントアップ

        Loop                                ‘csv次の行へ
        Close #1                            ‘csvファイル閉じる

        vFile = Dir()                       ‘次のファイルを変数vFileで受け取り

    Loop
End Sub

こうなっちゃいました。それぞれのファイルの項目名が入っちゃいました。

f:id:mwke:20211024141334p:plain

受け側のファイルに最初から項目名を用意しておいて、csvファイルは1行目の項目行を飛ばして2行目から読み込みすることにします。

変更したのは赤いところです。

Sub Sample()

    Dim path As String
    path = “C:\Users\81907\Documents\”      ‘csvファイルの保存してあるパス
    Dim vFile As String
    vFile = Dir(path & “*組.csv”)           ‘〇組というファイルを次々開く

    Dim buf As String                       ‘csvファイル1行分を受け取る変数
    Dim tmp As Variant                      ‘1行分をカンマで分割し配列で受け取る
    Dim i As Long: i = 2                    ‘Excel出力行。2行目から出力

    Do Until vFile = “”                     ‘〇組というcsvファイルがなくなるまで繰り返し

        Open path & vFile For Input As #1   ‘csvファイル開く

        ‘※最初に1行読んじゃう
        Line Input #1, buf

        ‘2行目から最後の行まではExcelに出力する
        Do Until EOF(1)                     ‘csvファイルの最後の行まで
            Line Input #1, buf              ‘1行分を変数bufで受け取り
            tmp = Split(buf, “,”)           ‘bufをカンマで分割し配列tmpで受け取る

            Cells(i, 1).Value = tmp(0)      ‘1列目クラス
            Cells(i, 2).Value = tmp(1)      ‘2列目氏名
            Cells(i, 3).Value = tmp(2)      ‘3列目身長
            Cells(i, 4).Value = tmp(3)      ‘4列目体重
            i = i + 1                       ‘Excelの行をカウントアップ

        Loop                                ‘csv次の行へ
        Close #1                            ‘csvファイル閉じる

        vFile = Dir()                       ‘次のファイルを変数vFileで受け取り

    Loop
End Sub

イエ~イ。できました!

1つ目のファイルは項目行を出力、2つ目以降は2行目から、という場合は、いろいろ考えられますが、

flagという目印変数を用意。初期値False

1ファイル読み込み後はflagをTrueにする

flagがFalseの場合は1行目から読込・出力、flagがTrueの場合は2行目から読込・出力する。

ということにしました。

Sub Sample()

    Dim path As String
    path = “C:\Users\81907\Documents\”      ‘csvファイルの保存してあるパス
    Dim vFile As String
    vFile = Dir(path & “*組.csv”)           ‘〇組というファイルを次々開く

    Dim buf As String                       ‘csvファイル1行分を受け取る変数
    Dim tmp As Variant                      ‘1行分をカンマで分割し配列で受け取る
    Dim i As Long: i = 1                    ‘Excel出力行
    Dim flag As Boolean: flag = False       ‘目印。ファイル2つ目以降はTrueにする

    Do Until vFile = “”                     ‘〇組というcsvファイルがなくなるまで繰り返し

        Open path & vFile For Input As #1   ‘csvファイル開く

        ‘※2回目以降、最初に1行読んじゃう
        If flag = True Then
            Line Input #1, buf
        End If

        ‘1つ目のファイルは1行目から、
        ‘2つ目のファイルからは2行目から
        Do Until EOF(1)                     ‘csvファイルの最後の行まで
            Line Input #1, buf              ‘1行分を変数bufで受け取り
            tmp = Split(buf, “,”)           ‘bufをカンマで分割し配列tmpで受け取る

            Cells(i, 1).Value = tmp(0)      ‘1列目クラス
            Cells(i, 2).Value = tmp(1)      ‘2列目氏名
            Cells(i, 3).Value = tmp(2)      ‘3列目身長
            Cells(i, 4).Value = tmp(3)      ‘4列目体重
            i = i + 1                       ‘Excelの行をカウントアップ

        Loop                                ‘csv次の行へ
        Close #1                            ‘csvファイル閉じる

        ‘flagをTrueにする
        flag = True
        vFile = Dir()                       ‘次のファイルを変数vFileで受け取り

    Loop
End Sub

以上です。

ありがとうございました。

スポンサーリンク
スポンサーリンク
vba
スポンサーリンク
mwkをフォローする
エクセルがともだち

コメント

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