【VBA】Dir関数で作業効率3倍アップ?ファイル検索とフォルダ操作の完全攻略法
フォルダ内にある全てのファイルをまとめて操作したい!大量にデータから特定のデータだけを抽出したい!!
こんな処理はVBAでDir関数を使えば自動化できます。
Dir関数を上手に使いこなせば、以下のような処理が可能になります。
- フォルダ内の写真をまとめて貼り付ける
- フォルダ内のエクセルファイルの名前や更新日を一覧表にする
- フォルダ内の1年以上前のデータをまとめて削除する
写真帖作成作業にDir関数を使ったマクロを導入することで、半日かかっていた作業が、わずか30分で完了するようになりました。
複数のファイルを「検索する」「操作する」「削除する」ような作業を手作業で処理している方は、Dir関数の使い方をマスターして効率化しちゃいましょう。
目次
【VBA】Dir関数とは?基本概念と動作原理を理解しよう
Dir関数は、VBAにおけるファイル操作の要となる重要な関数です。
この関数を使いこなすことで、
手作業で行っていたファイル検索や管理作業を自動化でき劇的に業務効率を向上させる
ことができます。
Dir関数の最大の特徴は、
指定したパスやファイル名パターンに一致するファイルやフォルダを瞬時に見つけ出せる
ことです。
たとえば、
- 数百個のExcelファイルから特定の名前のファイルだけを抽出する
- フォルダ内のすべてのPDFファイルを一覧表示する
- フォルダ内全ての写真データを写真帳に貼り付ける
手間と時間のかかる処理をわずか数行のコードで実現できます。
実務で即座に活用できる実用性の高さが、Dir関数の大きな魅力といえるでしょう。
Dir関数の基本的な役割と機能
Dir関数の主な役割は、
ファイルシステム内での効率的な検索とファイル情報の取得
です。
この関数を使うことで、手動でファイルを一つずつ確認する煩わしい作業から解放されます。
具体的には、指定したパスに存在するファイルの名前を文字列として返したり、ファイルが存在しない場合は空文字列を返したりする機能があります。
Dir関数を使った基本的なサンプルコードがこちら
Sub BasicDirExample()
Dim fileName As String
fileName = Dir("C:\Users\Documents\sample.xlsx")
If fileName <> "" Then
MsgBox "ファイルが見つかりました: " & fileName
Else
MsgBox "ファイルが見つかりませんでした"
End If
End Sub
上記サンプルコードは、
ドキュメントフォルダ内に「Sample.xlsx」というファイルがあるかどうかを検索する
という内容です。
Dir関数は一度呼び出した後、再度引数なしで呼び出すことで、同じ条件に一致する次のファイルを順次取得できる連続検索機能も備えています。
これにより、フォルダ内の複数ファイルを効率的に処理することが可能になり、大量のファイル操作でも短時間で完了できるのです。
Dir関数の構文と引数の詳細解説
Dir関数の構文は「Dir(pathname, attributes)」という形式で、両方の引数は省略可能です。
第一引数のpathnameには、検索したいファイルのパスやファイル名パターンを指定し、ワイルドカードも使用できます。
第二引数のattributesでは、取得したいファイルの属性を数値で指定することができます。
Sub DirSyntaxExample()
Dim filePath As String
Dim fileName As String
' 基本的な使い方
filePath = "C:\Users\Documents\"
fileName = Dir(filePath & "*.xlsx")
Do While fileName <> ""
Debug.Print "発見したファイル: " & fileName
fileName = Dir() ' 次のファイルを検索
Loop
End Sub
attributes引数には、
vbNormal(通常ファイル)、vbDirectory(ディレクトリ)、vbHidden(隠しファイル)などの定数を使用
できます。
これらの属性を組み合わせることで、より細かい条件でのファイル検索が実現できます。
たとえば
Dir(“C:*.*", vbDirectory)」と記述すれば、フォルダのみを検索対象にする
ことが可能です。
細かい条件で検索を行うことでファイル管理における柔軟性が大幅に向上します。
Dir関数の基本的な使い方をマスター
Dir関数の基本的な使い方を理解することで、日常的なファイル操作が驚くほど簡単になります。
最も重要なポイントは、
Dir関数の呼び出し方法と戻り値の処理方法を正しく理解すること
です。
初回の呼び出しでは必ず引数を指定し、その後の連続検索では引数を省略する
という基本パターンを覚えておけば複雑なファイル操作も自在に行えるようになります。
また、
ファイルが見つからない場合は空文字列が返されるため、この特性を活用した条件分岐処理を組み込むことで、エラーを回避しながら安全なプログラムを作成できます。
単一ファイルの存在確認方法
単一ファイルの存在確認は、Dir関数の最もシンプルで実用的な使い方です。
この方法を使えば、
ファイル処理を行う前に対象ファイルが確実に存在するかを事前チェック
することができます。
ファイルが存在する場合はファイル名が返され、存在しない場合は空文字列が返されるという明確な動作により、判定処理が非常に簡潔に記述できます。
Sub CheckSingleFile()
Dim targetFile As String
Dim result As String
targetFile = "C:\Users\Documents\重要なデータ.xlsx"
result = Dir(targetFile)
If result <> "" Then
MsgBox "ファイル「" & result & "」が存在します。処理を続行します。"
' ここに実際のファイル処理コードを記述
Else
MsgBox "指定されたファイルが見つかりません。パスを確認してください。"
End If
End Sub
このテクニックは、
データ処理プログラムや自動レポート生成システムなど、
でよく活用されます。
プログラム実行中のエラー発生を防止しユーザーに適切なメッセージを提供できるため、
ファイル検索VBAコードには欠かせないテクニックです。
フォルダ内の全ファイル名を取得する手順
フォルダ内のすべてのファイル名を取得する処理は、Dir関数の連続呼び出し機能を活用した代表的な応用例です。
たとえば、以下のような処理が可能となります。
- フォルダ内にある数百個のファイル名を一覧表にする
- フォルダ内になる写真データを全て貼り付ける
- 特定の処理を全ファイルに適用する
Do While文とDir関数を組み合わせたサンプルコードがこちら
Sub GetAllFileNames()
Dim folderPath As String
Dim fileName As String
Dim fileCount As Integer
folderPath = "C:\Users\Documents\データフォルダ\"
fileName = Dir(folderPath & "*.*")
fileCount = 0
Do While fileName <> ""
fileCount = fileCount + 1
Debug.Print fileCount & ". " & fileName
' 次のファイルを検索(引数は省略)
fileName = Dir()
Loop
MsgBox "合計 " & fileCount & " 個のファイルが見つかりました。"
End Sub
重要なポイントは、
最初のDir関数呼び出しではパスとファイルパターンを指定し、ループ内での再呼び出し時は引数を省略すること
です。
15行目のコードで、fileNameが更新されます。
この基本パターンを理解すれば、ファイル一覧の作成、バックアップ処理、一括リネームなど、様々な自動化処理に応用できるため、業務効率化の強力な武器となるでしょう。
関連記事「VBAコードのデバック方法」では、
「F8」キーで1行ずつコードを実行する方法や「F5」キーでまとめてコードを実行する方法が解説
されています。
複雑なVBAコードの作成時に役立つテクニックなので是非チェックしてみてください。
ファイル属性を指定した検索テクニック
ファイル属性を指定した検索は、Dir関数の高度な活用方法の一つです。
通常ファイル、フォルダ、隠しファイルなど、異なる属性を持つファイルを区別して検索することで、より精密なファイル管理が可能になります。
この機能を使いこなすことで、システムファイルを除外した安全な処理や、特定タイプのファイルのみを対象とした効率的な操作が可能です。
Sub SearchByAttributes()
Dim folderPath As String
Dim fileName As String
folderPath = "C:\Users\Documents\"
' フォルダのみを検索
fileName = Dir(folderPath & "*.*", vbDirectory)
Debug.Print "=== フォルダ一覧 ==="
Do While fileName <> ""
' "."と".."は除外
If fileName <> "." And fileName <> ".." Then
Debug.Print "📁 " & fileName
End If
fileName = Dir()
Loop
' 通常ファイルのみを検索
fileName = Dir(folderPath & "*.*", vbNormal)
Debug.Print "=== ファイル一覧 ==="
Do While fileName <> ""
Debug.Print "📄 " & fileName
fileName = Dir()
Loop
End Sub
属性指定により、処理対象を明確に分類できるため、誤操作によるシステムファイルの破損リスクを軽減し、意図した処理のみを確実に実行できます。
特に、企業環境でのファイル管理システム構築や、大規模なデータ処理プログラムにおいて、この精密な制御機能は非常に重要な役割を果たすのです。
ワイルドカードを活用した高度な検索方法
ワイルドカードを駆使したファイル検索は、Dir関数の真の威力を発揮する領域です。
アスタリスク(*)とクエスチョン(?)という2つのワイルドカード文字を適切に使い分けることで、複雑な条件でのファイル検索が可能になり、手作業では困難な大規模ファイル管理を自動化できます。
この技術をマスターすれば、ファイル名の一部だけを覚えている場合や、特定のパターンに従って命名されたファイル群を効率的に処理することができるようになります。
実際の業務では、日付形式のファイル名や連番付きファイルの検索など、規則性のあるファイル管理において威力を発揮し、作業時間を大幅に短縮できるでしょう。
アスタリスク(*)とクエスチョン(?)の使い分け
ワイルドカード文字の使い分けは、効率的なファイル検索の基礎となる重要な技術です。
アスタリスク(*)は任意の長さの文字列を表し、クエスチョン(?)は任意の1文字を表す
という明確な違いがあります。
この使い分けにより、大量のファイルから目的のファイルを素早く特定したり、命名規則に従ったファイル群を一括処理したりすることが可能になります。
Sub WildcardComparison()
Dim folderPath As String
Dim fileName As String
folderPath = "C:\Users\Documents\売上データ\"
' アスタリスク(*)の使用例:任意の長さの文字列
Debug.Print "=== 売上で始まるすべてのファイル ==="
fileName = Dir(folderPath & "売上*.xlsx")
Do While fileName <> ""
Debug.Print fileName ' 売上2024.xlsx, 売上データ一覧.xlsx など
fileName = Dir()
Loop
' クエスチョン(?)の使用例:任意の1文字
Debug.Print "=== 売上●.xlsxの形式のファイル ==="
fileName = Dir(folderPath & "売上?.xlsx")
Do While fileName <> ""
Debug.Print fileName ' 売上1.xlsx, 売上A.xlsx など
fileName = Dir()
Loop
End Sub
上記コードの実行結果がこちら
アスタリスクは幅広い検索に適しており、
ファイル名の一部のみがわかっている場合に、データ数の多いフォルダ内から目的のデータを検索する
という場面で活用されます。
一方、クエスチョンは文字数が決まっているファイル名パターンの検索で活用されます。
業務内容に合わせて使い分けをすると良いでしょう。
拡張子別ファイル検索の実践例
拡張子を指定したファイル検索は、ファイルタイプごとの一括処理において極めて実用的な機能です。
この技術により、混在する様々なファイル形式の中から、処理対象となる特定のファイルタイプのみを効率的に抽出し、適切な処理を適用することができます。
オフィス文書、画像ファイル、データファイルなど、用途に応じた分類処理が自動化され、
手作業による分類ミスの防止に繋がります。
Sub SearchByExtension()
Dim folderPath As String
Dim fileName As String
Dim excelCount, pdfCount, imageCount As Integer
folderPath = "C:\Users\Documents\作業フォルダ\"
' Excelファイルの検索と集計
fileName = Dir(folderPath & "*.xls*") ' .xls と .xlsx の両方に対応
excelCount = 0
Debug.Print "=== Excelファイル ==="
Do While fileName <> ""
Debug.Print "📊 " & fileName
excelCount = excelCount + 1
fileName = Dir()
Loop
' PDFファイルの検索と集計
fileName = Dir(folderPath & "*.pdf")
pdfCount = 0
Debug.Print "=== PDFファイル ==="
Do While fileName <> ""
Debug.Print "📄 " & fileName
pdfCount = pdfCount + 1
fileName = Dir()
Loop
' 画像ファイルの検索(複数拡張子の組み合わせ例)
Dim extensions As Variant
extensions = Array("*.jpg", "*.png", "*.gif", "*.bmp")
imageCount = 0
Debug.Print "=== 画像ファイル ==="
Dim i As Integer
For i = 0 To UBound(extensions)
fileName = Dir(folderPath & extensions(i))
Do While fileName <> ""
Debug.Print "🖼️ " & fileName
imageCount = imageCount + 1
fileName = Dir()
Loop
Next i
Debug.Print "合計: Excel=" & excelCount & ", PDF=" & pdfCount & ", 画像=" & imageCount
End Sub
上記のコードは
指定するフォルダ内の「エクセル」「PDFデータ」「画像データ」を検索し数量を表示する
という内容です。
この拡張子別検索機能は、ドキュメント管理システムや自動バックアップシステムの構築において中核的な役割を果たします。
特定のファイルタイプのみをターゲットとした処理により、システムの安全性と効率性を両立させ、大量ファイルの管理作業を劇的に簡素化できるのです。
複雑な条件でのファイル絞り込みテクニック
複雑な条件を組み合わせたファイル絞り込みは、Dir関数の応用技術の集大成です。
複数のワイルドカードパターンや条件文を巧みに組み合わせることで、高度な検索条件を満たすファイルのみを抽出し、精密なファイル管理を実現できます。
この技術により、
煩雑に保存されているサーバー内から目的のファイルを確実に特定し効率的な処理を実行することが可能
になります。
Sub ComplexFileFiltering()
Dim folderPath As String
Dim fileName As String
Dim fileDate As Date
Dim today As Date
folderPath = "C:\Users\Documents\プロジェクト\"
today = Date
Debug.Print "=== 複雑な条件でのファイル検索 ==="
' 条件1: 今月作成されたExcelファイルで、"報告書"を含むもの
fileName = Dir(folderPath & "*報告書*.xlsx")
Do While fileName <> ""
fileDate = FileDateTime(folderPath & fileName)
If Year(fileDate) = Year(today) And Month(fileDate) = Month(today) Then
Debug.Print "📊 今月の報告書: " & fileName & " (作成日: " & Format(fileDate, "yyyy/mm/dd") & ")"
End If
fileName = Dir()
Loop
' 条件2: ファイル名が数字で始まり、PDFまたはWordファイル
Dim pattern As Variant
Dim j As Integer
pattern = Array("*.pdf", "*.doc*")
For j = 0 To UBound(pattern)
fileName = Dir(folderPath & pattern(j))
Do While fileName <> ""
' ファイル名の最初の文字が数字かチェック
If IsNumeric(Left(fileName, 1)) Then
Debug.Print "🔢 数字で始まるファイル: " & fileName
End If
fileName = Dir()
Loop
Next j
' 条件3: ファイルサイズが1MB以上のファイル
fileName = Dir(folderPath & "*.*")
Do While fileName <> ""
Dim fileSize As Long
fileSize = FileLen(folderPath & fileName)
If fileSize > 1048576 Then ' 1MB = 1048576 bytes
Debug.Print "💾 大容量ファイル: " & fileName & " (" & Format(fileSize / 1048576, "0.0") & "MB)"
End If
fileName = Dir()
Loop
End Sub
上記のコードは、
・今月作成され、「報告書」を含むエクセルファイルを検索する
・ファイル名が数字で始まり、PDFかWordを形式のファイルを検索
・ファイルサイズが1MB以上のファイルを検索
という内容です。
このような高度な絞り込み機能により、ファイル管理の自動化レベルが飛躍的に向上し、人的ミスの削減と作業効率の大幅な改善を同時に実現できます。
複雑な業務要件にも柔軟に対応できるため、企業の基幹システム開発や大規模データ処理プロジェクトにおいて、その価値を十分に発揮するでしょう。
実務で使える!Dir関数活用パターン3選
Dir関数の真の価値は、実際の業務における具体的な活用にあります。
理論的な理解だけでなく、現場で即戦力となる実践的なパターンを習得することで、日々の作業効率を劇的に改善できるのです。
特に、データ処理、ファイル整理、管理システムの3つの領域において、Dir関数は強力な自動化ツールとして機能します。
これらの活用パターンをマスターすれば、手作業で数時間かかっていた作業をわずか数分で完了させることができ、ミスのない確実な処理を実現できるでしょう。
さらに、一度作成したプログラムは繰り返し使用できるため、長期的な業務効率化に大きく貢献し、より創造的な業務に時間を割くことが可能になります。
CSVファイルの一括処理自動化
CSVファイルの一括処理は、Dir関数を活用した最も実用的な自動化事例です。
この手法により、複数のCSVファイルに対する統一的な処理を自動実行でき、データ分析や報告書作成の作業時間を大幅に短縮できます。
手動でファイルを一つずつ開いて処理する従来の方法と比較して、処理速度の向上とヒューマンエラーの排除を同時に実現できるため、データ管理業務の品質向上に直結します。
Sub ProcessAllCSVFiles()
Dim folderPath As String
Dim fileName As String
Dim wb As Workbook
Dim processedCount As Integer
folderPath = "C:\Users\Documents\月次データ\"
fileName = Dir(folderPath & "*.csv")
processedCount = 0
Do While fileName <> ""
' CSVファイルを開く
Set wb = Workbooks.Open(folderPath & fileName)
' データ処理(例:合計行の追加)
With wb.Sheets(1)
Dim lastRow As Long
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(lastRow + 1, 1).Value = "合計"
.Cells(lastRow + 1, 2).Formula = "=SUM(B2:B" & lastRow & ")"
End With
' 処理済みファイルとして保存
wb.SaveAs folderPath & "処理済み_" & fileName, xlOpenXMLWorkbook
wb.Close
processedCount = processedCount + 1
Debug.Print processedCount & ". 処理完了: " & fileName
fileName = Dir() ' 次のCSVファイルを検索
Loop
MsgBox "合計 " & processedCount & " 個のCSVファイルを処理しました。"
End Sub
このような一括処理システムにより、月次売上データの集計、顧客情報の統合、在庫データの更新など、定期的に発生するデータ処理業務を完全自動化できます。
自動化の流れは、
CSVファイルを検索 → 開く → 編集する → 保存する → 次のCSVファイルを検索
です。
処理結果の一貫性も保証されるため、データ品質の向上と作業時間の短縮を両立させた理想的なソリューションといえるでしょう。
画像ファイルの整理とリネーム処理
画像ファイルの整理とリネーム処理は、Dir関数とファイル操作関数を組み合わせた実用性の高い活用例です。
デジタルカメラで撮影した大量の画像ファイルやサーバー内に保存されている大量の画像素材の管理を統一できる
というメリットがあります。
手動で、1つずつ「名前を変更する」「保存フォルダを整理する」などの処理をしていたら時間がいくらあっても足りません。
Sub OrganizeAndRenameImages()
Dim sourcePath As String
Dim destinationPath As String
Dim fileName As String
Dim newFileName As String
Dim counter As Integer
Dim fileExt As String
sourcePath = "C:\Users\Pictures\未整理\"
destinationPath = "C:\Users\Pictures\整理済み\"
' 整理済みフォルダが存在しない場合は作成
If Dir(destinationPath, vbDirectory) = "" Then
MkDir destinationPath
End If
' 画像ファイルの検索と処理
Dim imageExts As Variant
imageExts = Array("*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp")
counter = 1
Dim i As Integer
For i = 0 To UBound(imageExts)
fileName = Dir(sourcePath & imageExts(i))
Do While fileName <> ""
' 拡張子を取得
fileExt = Right(fileName, Len(fileName) - InStrRev(fileName, ".") + 1)
' 新しいファイル名を生成(連番付き)
newFileName = "IMAGE_" & Format(Date, "YYYYMMDD") & "_" & Format(counter, "000") & fileExt
' ファイルをコピーして新しい名前で保存
FileCopy sourcePath & fileName, destinationPath & newFileName
Debug.Print counter & ". " & fileName & " → " & newFileName
counter = counter + 1
fileName = Dir()
Loop
Next i
MsgBox "合計 " & (counter - 1) & " 個の画像ファイルを整理しました。" & vbCrLf & _
"保存先: " & destinationPath
End Sub
上記のコードは
画像データを検索し、連番付の新しい名前に変更した画像データを生成し「整理済み」フォルダに保存する
という内容です。
この画像整理システムにより、撮影日時やプロジェクト名を含む統一的なファイル名での管理が可能になり、後の検索や分類作業が格段に容易になります。
また、
重複ファイルの確認や品質チェックなどの追加機能も容易に実装できるため、デジタル資産管理の基盤として活用できるでしょう。
日付条件によるファイル管理システム
Dir関数を活用すれば、日付条件を活用したファイル管理システムの構築が可能です。
この手法により、作成日時や更新日時に基づいた自動的なファイル分類、アーカイブ処理、期限切れファイルの削除などが実現でき、効率的なデータ管理が可能になります。
Sub DateBasedFileManagement()
Dim sourcePath As String
Dim archivePath As String
Dim fileName As String
Dim fileDate As Date
Dim cutoffDate As Date
Dim archivedCount, deletedCount As Integer
sourcePath = "C:\Users\Documents\作業ファイル\"
archivePath = "C:\Users\Documents\アーカイブ\"
cutoffDate = DateAdd("d", -30, Date) ' 30日前の基準日
' アーカイブフォルダの作成
If Dir(archivePath, vbDirectory) = "" Then
MkDir archivePath
End If
fileName = Dir(sourcePath & "*.*")
archivedCount = 0
deletedCount = 0
Do While fileName <> ""
' システムフォルダを除外
If fileName <> "." And fileName <> ".." Then
fileDate = FileDateTime(sourcePath & fileName)
If fileDate < cutoffDate Then
' 重要ファイルはアーカイブ、それ以外は削除判定
If InStr(LCase(fileName), "重要") > 0 Or InStr(LCase(fileName), "保存") > 0 Then
' アーカイブ処理
FileCopy sourcePath & fileName, archivePath & Format(fileDate, "YYYYMM") & "_" & fileName
Kill sourcePath & fileName
archivedCount = archivedCount + 1
Debug.Print "アーカイブ: " & fileName & " (作成日: " & Format(fileDate, "yyyy/mm/dd") & ")"
ElseIf InStr(LCase(fileName), "temp") > 0 Or InStr(LCase(fileName), "tmp") > 0 Then
' 一時ファイルは削除
Kill sourcePath & fileName
deletedCount = deletedCount + 1
Debug.Print "削除: " & fileName & " (作成日: " & Format(fileDate, "yyyy/mm/dd") & ")"
End If
End If
End If
fileName = Dir()
Loop
MsgBox "ファイル管理完了" & vbCrLf & _
"アーカイブ: " & archivedCount & " 個" & vbCrLf & _
"削除: " & deletedCount & " 個" & vbCrLf & _
"基準日: " & Format(cutoffDate, "yyyy年mm月dd日")
End Sub
この日付ベースのファイル管理システムにより、定期的なメンテナンス作業が自動化され、ストレージ容量の最適化とデータガバナンスの向上を同時に実現できます。
企業のドキュメント管理規程に合わせてカスタマイズすることで、長期的な情報資産管理の基盤として活用できるでしょう。
Dir関数と組み合わせると便利な関数・機能
Dir関数は他の機能と組み合わせることで、さらに強力なファイル操作ツールとして活用できます。
これからご紹介する組み合わせ技を使えば、複雑なファイル管理作業も簡単に自動化できるようになるでしょう。
どんなエクセル業務にも応用できるよう、実務でよく使われるサンプルコードをご紹介します。
FileSystem Objectとの使い分け
Dir関数とFileSystemObjectは、それぞれ異なる特徴を持つため、用途に応じて使い分けるのが効率的です。
Dir関数は軽量で高速処理が可能な一方、FileSystemObjectは詳細な情報取得が可能
という違いがあります。
ファイル名だけを素早く取得したい場合はDir関数を、ファイルサイズや更新日時などの詳細情報が必要な場合はFileSystemObjectを選択しましょう。
' Dir関数での高速検索
Sub QuickFileSearch()
Dim fileName As String
fileName = Dir("C:\temp\*.txt")
Do While fileName <> ""
Debug.Print fileName
fileName = Dir
Loop
End Sub
' FileSystemObjectでの詳細情報取得
Sub DetailedFileInfo()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim file As Object
Set file = fso.GetFile("C:\temp\sample.txt")
Debug.Print file.Name & " サイズ:" & file.Size & " 更新日:" & file.DateLastModified
End Sub
業務内容によって使い分けましょう。
Kill文との連携によるファイル削除処理
Dir関数とKill文を組み合わせることで、条件に合致するファイルを安全に削除できます。
この連携により、不要ファイルの一括削除や定期的なファイル整理が自動化できるため、メンテナンス作業の手間が大幅に削減されます。
ただし、
削除処理は元に戻せないため、実行前に必ずバックアップを取るか、テスト環境で動作確認を行うことが重要です。
Sub DeleteOldFiles()
Dim fileName As String
Dim filePath As String
Dim targetFolder As String
targetFolder = "C:\temp\"
fileName = Dir(targetFolder & "*.tmp")
Do While fileName <> ""
filePath = targetFolder & fileName
' ファイルが存在し、読み取り専用でない場合のみ削除
If Dir(filePath) <> "" Then
SetAttr filePath, vbNormal
Kill filePath
Debug.Print fileName & " を削除しました"
End If
fileName = Dir
Loop
End Sub
ぐちゃぐちゃのサーバー内のデータを効率よく整理整頓できます。
Loop文と組み合わせた効率的な処理方法
Dir関数とLoop文の組み合わせは、大量のファイル処理において最も効率的な手法です。
フォルダ内の全ファイルを順次処理できるため、バッチ処理やデータ変換作業が劇的にスピードアップします。
Do While文を使った繰り返し処理では、Dir関数が空文字を返すまでループを継続させることで、確実に全ファイルを処理できます。
Sub ProcessAllFiles()
Dim fileName As String
Dim fileCount As Integer
Dim processedCount As Integer
fileName = Dir("C:\data\*.xlsx")
fileCount = 0
processedCount = 0
' ファイル数をカウント
Do While fileName <> ""
fileCount = fileCount + 1
fileName = Dir
Loop
' 実際の処理
fileName = Dir("C:\data\*.xlsx")
Do While fileName <> ""
' ファイル処理(例:データ読み込み)
Call ProcessSingleFile("C:\data\" & fileName)
processedCount = processedCount + 1
' 進捗表示
Debug.Print processedCount & "/" & fileCount & " " & fileName & " 処理完了"
fileName = Dir
Loop
MsgBox "全" & fileCount & "件のファイル処理が完了しました"
End Sub
Sub ProcessSingleFile(filePath As String)
' 個別ファイルの処理内容をここに記述
' 例:Excelファイルを開いてデータを抽出など
End Sub
この組み合わせを応用すれば、
指定するフォルダ内の画像データをまとめて貼り付ける
というVBAも作成できるようになります。
関連記事「フォルダ内の写真を貼り付けるVBA」では、Dir関数とDo While文を使った写真貼り付けVBAが紹介されています。
VBA初心者が効率化マクロを導入する方法
VBAなんて扱ったことないけど、業務内容に合わせた効率化マクロを導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「フォルダ内のデータをまとめて操作したい」「フォルダ内の写真をまとめて貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA Dir関数】【VBA フォルダ内検索】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません