下記図のように、一つのフォルダにある大量のテキストファイルから指定データのみ一瞬で抽出する方法を紹介します!
これならいちいちひとつずつテキストファイルを開く必要なく、ミスも減らせるね!
目次
大量のテキストファイルから指定データを抽出 サンプル
1つのフォルダに保存した大量のテキストファイルから特定の文字列の行のみデータを抽出したい
このようなケースで、下記図のようなテキストファイル(*.txt)から定数 SHITEI_DATAで指定した製品名が”maru-aaaj”の行データのみ抽出するスクリプトになります。
マクロが存在するファイルのWorksheet”Sheet1″にデータが抽出されるので注意してください。
Const PATH = "C:\Users\xxxx\OneDrive\デスクトップ\VBA\実践\大量のテキストファイルから指定データ抽出"
Const SHITEI_DATA = "maru-aaaj"
Sub 大量のテキストファイルから指定データを抽出()
Dim folder_Path As String
Dim bkPath_text As String
Dim File_Name As String
Dim buf_Space As String
Dim v As Variant
Dim File_Count As Long
Dim i As Long, j As Long
Application.ScreenUpdating = False
ThisWorkbook.Worksheets("Sheet1").Activate
'データクリア
Range("A1:A1048576").ClearContents
ChDir PATH
MsgBox "テキストファイルからデータ抽出するよ!テキストファイルが入ったフォルダを選択してね!( ー`дー´)"
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
folder_Path = .SelectedItems(1)
Else
MsgBox "フォルダが正しく選択されなかったので終了します(#^ω^)"
Exit Sub
End If
End With
bkPath_text = Dir(folder_Path & "\*.txt")
If bkPath_text = "" Then
MsgBox "textファイルがありません(#^ω^)"
End If
j = 1
Do 'テキストファイル数分繰り返し
buf_Space = Space(FileLen(folder_Path & "\" & bkPath_text))
Open (folder_Path & "\" & bkPath_text) For Binary As #1
Get #1, , buf_Space
Close #1
'1行毎にSplit関数でデータ分割、配列に格納
v = Split(buf_Space, vbCrLf)
For i = 0 To UBound(v)
If InStr(v(i), SHITEI_DATA) > 0 Then
Cells(j, 1) = v(i)
j = j + 1
End If
Next i
File_Count = File_Count + 1
bkPath_text = Dir
'全ファイルアクセスすると終了
Loop Until bkPath_text = ""
MsgBox File_Count & "テキストファイルを処理しました(`・ω・´)ゞ"
End Sub
まとめ
サンプルは定数 SHITEI_DATAの値を書き換えていただくだけで、そのまま活用していただけます。
この記事がミス撲滅や生産性向上につながるととても嬉しいです。
VBA初級から抜け出すための知恵と、実務で活用できるスキルが学べる1冊です!激しくオススメ!
コメント