【VBA】CSVファイルから特定の文字列を含む行のみを、シートへ読み込む

ファイルサイズの大きいCSVファイルを全て読み込むと、
Excelファイルが重くなってしまいます!

Excelファイルの肥大化を防ぐために
 ・必要なデータのみを読み込む
ようにしましょう!

CSVファイルの文字コードにあった
読み込み方法を使用しましょう!

PR

文字コードが「Shift_JIS」の場合

文字コードが「Shift_JIS」の場合は、特に考慮不要のためシンプルに
 ・Openステートメント
を使用してCSVファイルを読み込みます。

ここでは例として、
 ・デスクトップ配下のファイル「sample_shift_jis.csv」から
 ・文字列「みかん」が含まれている行のみを
 ・シート「sample」へ
読み込みます。

文字コードは「Shift_JIS」
文字コードは「Shift_JIS」
Option Explicit

Sub sample()

    '読み込むCSVファイル
    Const CSV_FILE As String = "C:\Users\user\Desktop\sample_shift_jis.csv"
    '出力する開始行を指定
    Const START_ROW As Long = 2
    '出力する列を指定
    Const TARGET_COLUMN As Long = 2
 
    Dim row As Long
    Dim ws As Worksheet   
    Dim num As Long
    Dim line As String
    
    '開始行を設定
    row = START_ROW
    '出力するシートを設定
    Set ws = Worksheets("sample")
    '使用可能なファイル番号を取得
    num = FreeFile
    
    '開く
    Open CSV_FILE For Input As #num
    
    '最終行まで繰り返し
    Do While Not EOF(num)
        '次の行を読み込む
        Line Input #num, line
        '対象文字列が含まれている場合は出力
        If line Like "*みかん*" Then
            ws.Cells(row, TARGET_COLUMN) = line
            row = row + 1
        End If
    Loop
    
    '閉じる
    Close #num
    
End Sub

状況に応じて、以下を変更してください。
・定数「CSV_FILE」
・定数「START_ROW」
・定数「TARGET_COLUMN」


上記のVBAコードの実行により、
 ・特定の文字列(みかん)を含む行のみを、
 ・シートへ読み込む
ことが出来ました。

実行結果
実行結果
PR

文字コードが「UTF-8」の場合

文字コードが「UTF-8」のCSVファイルを「Openステートメント」で読み込むと、文字化けしてしまい「特定の文字列」が含まれている/いないを判定できません。

そのため文字コードが「UTF-8」の場合は、
 ・ADODB.Stream
を使用してCSVファイルを読み込みます。
※「ADODB.Stream」は文字コードの指定ができるため。

ここでは例として、
 ・デスクトップ配下のファイル「sample_utf8.csv」から
 ・文字列「みかん」が含まれている行のみを
 ・シート「sample」へ
読み込みます。

文字コードは「UTF-8」
文字コードは「UTF-8」
Option Explicit

Sub sample()

    '読み込むCSVファイル
    Const CSV_FILE As String = "C:\Users\user\Desktop\sample_utf8.csv"
    '出力する開始行を指定
    Const START_ROW As Long = 2
    '出力する列を指定
    Const TARGET_COLUMN As Long = 2
 
    Dim row As Long
    Dim ws As Worksheet  
    Dim line As String
    
    '開始行を設定
    row = START_ROW
    '出力するシートを設定
    Set ws = Worksheets("sample")
    
    With CreateObject("ADODB.Stream")
        '開く
        .Open
        '文字コードに「UTF-8」を指定
        .Charset = "UTF-8"
        '改行コードに「adCRLF」を指定
        .LineSeparator = -1
        'ファイル名を指定
        .LoadFromFile = CSV_FILE
        
        '最終行まで繰り返し
        Do While Not .EOS
            '次の行を読み込む
            line = .ReadText(-2)
            '対象文字列が含まれている場合は出力
            If line Like "*みかん*" Then
                ws.Cells(row, TARGET_COLUMN) = line
                row = row + 1
            End If
        Loop
        
        '閉じる
        .Close
    End With
    
End Sub

状況に応じて、以下を変更してください。
・定数「CSV_FILE」
・定数「START_ROW」
・定数「TARGET_COLUMN」


上記のVBAコードの実行により、
 ・特定の文字列(みかん)を含む行のみを、
 ・シートへ読み込む
ことが出来ました。

実行結果
実行結果


セル内の文字列をカンマ区切りで分割したい場合は、
以下の記事を参照してください!


PR

参考①

CSVファイルを単純に読み込む方法は、以下の記事をご確認ください。

PR

参考②

上記のVBAコードで使用した以下の詳細については、公式サイトをご確認ください。

●「Openステートメント」


●「ADODB.Stream」

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