【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()
    
    Dim csvFile As String
    Dim outputWs As Worksheet
    Dim outputRow As Long
    Dim outputColumn As Long
    Dim fileNo As Long
    Dim line As String
    
    '読み込むCSVファイル
    csvFile = "C:\Users\user\Desktop\sample_shift_jis.csv"
    '出力シート
    Set outputWs = Worksheets("sample")
    '出力行
    outputRow = 2
    '出力列
    outputColumn = 2

    '使用可能なファイル番号を取得
    fileNo = FreeFile
    
    '開く
    Open csvFile For Input As #fileNo
    
    '最終行まで繰り返し
    Do While Not EOF(fileNo)
        '次の行を読み込む
        Line Input #fileNo, line
        '対象文字列が含まれている場合は出力
        If line Like "*みかん*" Then
            outputWs.Cells(outputRow, outputColumn) = line
            outputRow = outputRow + 1
        End If
    Loop
    
    '閉じる
    Close #fileNo
    
End Sub

以下を指定します。
※状況に応じて任意の値を指定してください。

・読み込むCSVファイル(13行目)
・出力シート(15行目)
・出力行(17行目)
・出力列(19行目)


上記の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()
    
    Dim csvFile As String
    Dim outputWs As Worksheet
    Dim outputRow As Long
    Dim outputColumn As Long
    Dim line As String
    
    '読み込むCSVファイル
    csvFile = "C:\Users\user\Desktop\sample_shift_jis.csv"
    '出力シート
    Set outputWs = Worksheets("sample")
    '出力行を設定
    outputRow = 2
    '出力列を設定
    outputColumn = 2

    With CreateObject("ADODB.Stream")
        '開く
        .Open
        '文字コードに「UTF-8」を指定
        .Charset = "UTF-8"
        '改行コードに「adCRLF」を指定
        .LineSeparator = -1
        'ファイル名を指定
        .LoadFromFile = csvFile
        
        '最終行まで繰り返し
        Do While Not .EOS
            '次の行を読み込む
            line = .ReadText(-2)
            '対象文字列が含まれている場合は出力
            If line Like "*みかん*" Then
                outputWs.Cells(outputRow, outputColumn) = line
                outputRow = outputRow + 1
            End If
        Loop
        
        '閉じる
        .Close
    End With
    
End Sub

以下を指定します。
※状況に応じて任意の値を指定してください。

・読み込むCSVファイル(12行目)
・出力シート(14行目)
・出力行(16行目)
・出力列(18行目)


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

実行結果
実行結果


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


PR

参考①

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

①CSVファイルを単純に読み込んで
②その後、オートフィルタを利用して不要な行を削除

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

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


●オートフィルタを利用して不要な行を削除


PR

参考②

シートへ読み込んだデータを、配列へ格納することもできます。

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


PR

参考③

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

●「Openステートメント」


●「ADODB.Stream」