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行ずつ読み込んで、カンマ位置で区切って情報を取得する必要があるけど、 この方法ならばコードがもの凄くシンプルに出来るからとてもおススメな方法です。

[Excel VBA] データをまとめて入れておけるArraylist
今回はちょっと高度な技だけど、使いこなせるととても便利なArraylistというものを教えるよ。 例えば10列あるデータを取得して、別のシートに加工して貼り付けるとしたら、その10列分の変数を用意して、1つの列ごとに値を代入して...
コメント