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

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

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

CSVファイルを開く際の文字コードにより、
読み込み方法を使い分けましょう!


列を指定したCSVファイルの読み込みについては、
以下の記事をご確認ください!
※不要な列を読み込まないようにできます。



PR

文字コード「Shift_JIS」で読み込む場合

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

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

文字コードは「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 fileNo As Long
    Dim line As String
    
    '開始行を設定
    row = START_ROW
    '出力するシートを設定
    Set ws = Worksheets("sample")
    '使用可能なファイル番号を取得
    fileNo = FreeFile
    
    '開く
    Open CSV_FILE For Input As #fileNo
    
    '最終行まで繰り返し
    Do While Not EOF(fileNo)
        '次の行を読み込む
        Line Input #fileNo, line
        '対象文字列が含まれている場合は出力
        If line Like "*みかん*" Then
            ws.Cells(row, TARGET_COLUMN) = line
            row = row + 1
        End If
    Loop
    
    '閉じる
    Close #fileNo
    
End Sub

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


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

実行結果
実行結果
PR

文字コード「UTF-8」で読み込む場合

「Openステートメント(=Shift_JIS)」で読み込んだ際に、文字化けしてしまうことがあります。

文字化けすると、「特定の文字列」が含まれている/いないを判定できません。

「Openステートメント(=Shift_JIS)」で読み込んだ際に文字化けが発生した場合は、文字コード「UTF-8」で読み込みましょう。

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

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

文字コードは「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

参考①

以下の方法でも同様のことができます。
※こちらの方法は「1行目の見出し(項目名)」を取得できるため、より良い方法かもしれません。

①CSVファイルを単純に読み込んで
②オートフィルタで抽出した行以外を削除

詳細は以下の記事をご確認ください。

●CSVファイルを単純に読み込む


●オートフィルタで抽出した行以外を削除

PR

参考②

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

●「Openステートメント」


●「ADODB.Stream」

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