[Excel VBA] CSV検索ツール

Vlookup不要のCSV検索

CSVのファイルを検索するときに、ある一つの情報だけを検索したいのであれば、Excelで開いて、検索をすればいいけれど、もし大量の行数の中から複数行探したいような場合、1件ずつ検索していくと大変だよね。

そういう場合、例えばVlookupを使ってCSVのファイルから情報を持ってくる方法もできるけど、データ量が多いとものすごく重かったりします。

 そんなときに、CSVファイルの内容からキー情報だけを指定して、検索ボタンを押すだけで、指定した情報を抽出するExcelツールを紹介するよ。

 ここでは顧客マスタのCSVから特定の顧客情報だけ抽出するよ。まずは抽出したい顧客番号を入れて、次に検索ボタンを押すだけで、該当の顧客名、電話番号をそれぞれB列、C列に表示するよ。

CSVのデータはいつものように↓こんな感じです。

次にソースコードはこちら!

Option Explicit

Public objCn As New ADODB.Connection
Public objRS As ADODB.Recordset

'読み込むCSVファイル名
Const CSVFileName As String = "[カスタマー情報.csv]"
Private Sub Search_Click()

    Application.EnableEvents = False
    Application.Cursor = xlWait
    
    Call clear_cells
    Call read_parts
    
    Application.Cursor = xlDefault
    Application.EnableEvents = True

    MsgBox ("検索完了")

End Sub


Sub read_CustomerInfo()

Dim WSH As Object
Dim DTPath As String
Dim RowCount As Integer
Dim CustCode As Integer

RowCount = 2

'デスクトップパス名取得
Set WSH = CreateObject("Wscript.Shell")
DTPath = WSH.SpecialFolders("Desktop")
Set WSH = Nothing

objCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
         & "Data Source=" & DTPath & ";" _
         & "Extended Properties=""text; HDR=Yes; FMT=Delimited;"""
  

'A列が空白になったら顧客番号読み込み終了
Do While Cells(RowCount, 1) <> ""

    'セルに記載された顧客番号取得
    CustCode = UCase(Cells(RowCount, 1))
    Call ReadCsv(CustCode, RowCount)
    RowCount = RowCount + 1

Loop

objCn.Close
Set objCn = Nothing

End Sub

Sub ReadCsv(CustCode, RowCount)
    
    Dim strSQL As String
    Dim ColCount As Integer
    

    strSQL = " SELECT * FROM " & CSVFileName & " Where 顧客番号 = " & CustCode
  
    Set objRS = New ADODB.Recordset
    Set objRS = objCn.Execute(strSQL)
  
    'データなしの場合は空白
    If objRS.BOF = True Then
        For ColCount = 2 To 3
            Cells(RowCount, ColCount) = ""
        Next
    Else
        Cells(RowCount, 1) = objRS("顧客番号")
        Cells(RowCount, 2) = objRS("顧客名")
        Cells(RowCount, 3) = objRS("住所")
    End If
  
    Set objRS = Nothing
 
 End Sub

今回のコードではデスクトップ上のCSVファイル「カスタマー情報.csv」を検索するようになっているから、そこは自由に書きかえてね。

抽出用のExcelはこんな感じです。ボタンの位置は1列目の好きなところで大丈夫だよ。

ボタンを配置したらマクロの登録で「read_CustomerInfo」を指定してね。

あとは下記参照設定をお忘れなく。

今回はコードの説明はしないけど、SQL文というデータベースへ問い合わせを行うときに使用する言語を使っているよ。

CSVを1つのデータベースとして取り扱っている方法なんだけど、 CSVはテキストファイルだから本来は1行ずつ読み込んで、カンマ位置で区切って情報を取得する必要があるけど、 この方法ならばコードがもの凄くシンプルに出来るからとてもおススメな方法です。

今回はちょっと高度な技だけど、使いこなせるととても便利なArraylistというものを教えるよ。 例えば10列あるデータを取得し...