Excel【Csvファイル】を検索する
Csvファイル内のデータを調べる方法について紹介します。
Csvファイル検索方法
サンプルデータとして、【 売上管理表 】で解説していきます。
検索データ:【 品目 = みかん 】
◇Excelの検索機能を使う
まずは、CsvファイルをExcelのシートに表示させます。
CsvファイルをExcelに取込方法は、前回紹介しました
「テキストデータ取込」でも出来ます。
今回は、CsvファイルをExcelでそのまま開きます。
リボン「ホーム」の中の「検索と選択」
または、「Ctr + F」で検索します。
「みかん」の検索結果が5件ありました。
◇Excelオートフィルタを使う
オートフィルタでも、該当が5件ありました。
では、そのデータの使用を考えたとき、以下の方法になります。
・検索結果を別シートに貼付し、計算式で必要なセルに連携させる
・検索結果の必要な値を必要なセルに貼付する
・検索結果を必要なセルに手入力する
◇マクロを使う(VBA開発)
ワークシートに「検索キー」を入力できるセルを作成し、
検索結果を表示するようにします。
標準モジュール(CsvSqlRead)
Sub CsvSqlRead()
Dim clsSql As clsSqlRead
Dim strFileName As String
Dim Ws As Worksheet
Dim strPath As String
Dim FDir As String
Dim sttTime As Double
Dim endTime As Double
Dim prsTime As Double
Dim clsTm As clsTimer
Set Ws = ThisWorkbook.Worksheets("Sheet1")
Set clsSql = New clsSqlRead
Set clsTm = New clsTimer
sttTime = clsTm.startTime
strPath = Application.ThisWorkbook.Path & "¥"
strFileName = "売上管理表.csv"
Call clsSql.OpenDataBase(strFileName, strPath)
endTime = clsTm.endTime
prsTime = clsTm.processTime(sttTime, endTime)
Ws.Range("E1").Value = prsTime
MsgBox "csv取込完了!"
Set clsSql = Nothing
End Sub
クラスモジュール(clsSqlRead)
Public Sub OpenDataBase(ByVal tgtCsv As String, ByVal FlePth As String)
On Error GoTo PROC_ERR
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sEXTENDED As String
Dim sSrcDir As String ' 接続先フォルダ'
Dim sSql As String ' SQL'
Dim oWs As Worksheet
Dim EndRow As Long
Dim NxtRow As Long
Dim Hed As Variant
sSrcDir = FlePth
Set oWs = ThisWorkbook.Sheets("Sheet1")
' プロパイダの設定'
cn.Provider = "Microsoft.ACE.OLEDB.12.0" ' Office 2007 以降
' 読み込むファイルの格納フォルダのパス'
cn.Properties("Data Source") = sSrcDir
' その他のプロパティの設定'
sEXTENDED = "text"
sEXTENDED = sEXTENDED & ";FMT=Delimited"
sEXTENDED = sEXTENDED & ";HDR=Yes"
cn.Properties("Extended Properties").Value = sEXTENDED
' 接続開始'
cn.Open
If IsEmpty(oWs.Range("B1").Value) = False And IsEmpty(oWs.Range("B2").Value) = True Then
sSql = "SELECT * FROM [" & tgtCsv & "] " & _
"WHERE 品目 = '" & oWs.Range("B1").Value & "' ;"
End If
If IsEmpty(oWs.Range("B1").Value) = True And IsEmpty(oWs.Range("B2").Value) = False Then
sSql = "SELECT * FROM [" & tgtCsv & "] " & _
"WHERE 仕入日 = #" & oWs.Range("B2").Value & "# ;"
End If
If IsEmpty(oWs.Range("B1").Value) = False And IsEmpty(oWs.Range("B2").Value) = False Then
sSql = "SELECT * FROM [" & tgtCsv & "] " & _
"WHERE 品目 = '" & oWs.Range("B1").Value & "' " & _
"AND 仕入日 = #" & oWs.Range("B2").Value & "# ;"
End If
' SQL実行'
rs.Open sSql, cn
If rs.EOF Then
' 結果が1行もない場合終わり'
GoTo PROC_EXIT
End If
EndRow = oWs.Cells(Rows.Count, 1).End(xlUp).Row
NxtRow = EndRow + 1
' 結果をそのまま表示'
oWs.Cells(NxtRow, 1).CopyFromRecordset rs
rs.Close
cn.Close
PROC_EXIT:
On Error Resume Next
' 後処理'
Set rs = Nothing
Set cn = Nothing
Exit Sub
PROC_ERR:
MsgBox "ADO接続(CSV/TEXT)エラー:" & Err.Description & "(" & Err.Number & ")" & vbCrLf & sSrcDir, vbCritical
GoTo PROC_EXIT
End Sub
セルB1に検索キー「みかん」を入力し、実行します。
検索時間は、0.2秒でした。
検索キー「仕入日」を増やしてみます。
セルB2に検索キーを入力するようにします。
品目は「みかん」、仕入日は「10月25日」で検索してみます。
検索時間は、0.2秒弱でした。
ちゃんと検索できました。
Csvファイル検索方法について紹介しました。
次回は、検索結果の活用編を紹介します。