PR
CSVファイル操作

【Excel VBA】CSVファイル内で文字列を検索して該当する行だけをExcelに書き出す

CSVファイル内にあるデータの中から指定した文字列を検索し、該当した行だけをExcelに書き出すマクロを紹介します。

今回の事例では「test2.csv(事前準備必要)」ファイル内の列名”品目”の列に”リンゴ”という文字列が存在している行のみをExcelに書き出す処理を行います。

Sub CSVファイル内の文字列検索該当行のみExcelに書き出す()

Dim fso As Object
Dim file As Object
Dim filePath As String  'ファイル名とパスを指定
Dim filename As Object  'CSVファイル名を取得する用
Dim line As String  '読み込み用変数の宣言
Dim searchtitle As String  '検索する列名の文字列
Dim searchString As String  '検索対象の文字列
Dim searchcolmun As Integer  '検索対象の列
Dim j, k, m '繰り返し用の変数

'ファイルのパスを指定する
filePath = "C:\test\test2.csv"

Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(filePath)
Set filename = fso.GetFile(filePath)

'検索対象の列名を指定する
searchtitle = "品目"

'検索対象の文字列を指定する
searchString = "リンゴ"

'CSVファイルのデータを書き出すExcelの行(k=1行目スタート)
k = 1

'csvファイルを最終行目まで繰り返す
Do Until file.AtEndOfStream
   line = file.readline
   Data = Split(line, ",")
        If k = 1 Then
            For j = LBound(Data) To UBound(Data)
                If InStr(Data(j), searchtitle) > 0 Then
                    '検索対象の列名を指定する
                    searchcolmun = j
                    '列名をExcelに書き出す
                    For m = LBound(Data) To UBound(Data)
                        Cells(k, m + 1) = Data(m)
                    Next m
                    '列名が検索でヒットしたらk=1にしてフラグ立て
                    k = k + 1
                    '列名の検索がヒットしたのでfor(j)の繰り返しから抜ける
                    j = UBound(Data)
                End If
            Next j
            
            '列名が見つからない場合はマクロを終了
            If k = 0 Then
                MsgBox "検索対象の列名が見つかりません"
                Exit Sub
            End If
        
        Else 'k<>1(検索対象列確定後)
            If InStr(Data(searchcolmun), searchString) > 0 Then
                '検索文字列がヒットしたCSVファイルの行をExcelに書き出す
                For j = LBound(Data) To UBound(Data)
                    Cells(k, j + 1).Value = Data(j)
                Next j
                k = k + 1  'Excelに書き出す行を1行進める
            End If
        
        End If

Loop

'csvファイルを閉じる
file.Close

End Sub

マクロを実行すると下図のようにエクセルにCSVから該当する行だけ書き出されます。

今回は1個のCSVファイル内の処理でしたが、複数ファイルが検索対象になる場合は上記コードの対象を応用することで対応できます。

コメント