今回は、ExcelのVBAを活用して「ファイル数のチェック作業」を自動化していきます。
業務の中で毎日Excelのファイルを利用するのですが、締め時にファイル数のチェックと計測の作業が必要となります。
同じ作業を日々行うのですが、フォルダが複数あるため計測に時間がかかり、ミスも発生していました。
その手間を減らすために作成したものが今回のツールになります。
同じように作るための、コードの備忘録も兼ねています。。。
必要な工程
まずは必要な作業を要素ごとに分けて考えます。
そして、それぞれの工程を自動化できるか調べていきます。
ファイルの数を計測
まずは、利用しているフォルダの中に入っているExcelファイルの数を計測する必要があります。
個別に作業で使っているフォルダが7つ。
作業完了したファイルをコピーしておくフォルダが1つ。
不測の事態があり、別の場所に割り当てておくフォルダが1つ。
合計で9つのフォルダ内のファイル数を計測しています。
締め作業時には
「個別フォルダ7つに入っているファイルの総数」=「作業完了フォルダ内のファイル数」+「割り当て済みフォルダ内のファイル数」
となっていれば問題なし。という確認作業を行います。
万が一、数があっていなければ作業完了していないファイルがあるか、トラブルが起きている可能性が考えられます。
計測したファイル数をセルに入力
合計する作業は「SUM関数」で行います。
そのため、セルの中に「計測したファイル数」を自動入力する必要があります。
今回は「個別のフォルダに入っているファイル数」を7つ。さらにその合計。
「作業完了フォルダ内のファイル数」を1つ。「割り当て済みフォルダ内のファイル数」を1つ。この2つの合計。
これだけのセルを準備していきます。
ファイルの総数があっているか確認
VBA作成者以外が使うことも考慮して、計測結果に問題があるかどうか一目でわかるようなつくりを目指します。
「条件付き書式」を活用してセルの色を変えることで、視覚的にわかりやすいようにしています。
完成品
完成したものがこちらです。

「ファイル数取得」のボタンをクリックすると、「A~Gまでの件数」「投入済み・割り当て済みの件数」が自動で計測/入力されます。
このボタンにはマクロが登録されています。詳しい中身/コードは後述します。
合計のセルには「IF関数」を使っています。数値が「0」だった場合は空白のままにしています。
具体的な関数はこちらです。「=IF(SUM(B9:C15)<>0,SUM(B9:C15),"")」
「判定」のセルにも「IF関数」を利用しています。
「投入済み + 割り当て済み」の合計と「A~G」までの合計が同じだった場合は「OK」違った場合は「要確認」と表示させます。
具体的な関数はこちらです。「=IF(F3=D15,"OK","要確認")」
VBAのコード
ここからはこのツールで使っているマクロ。記述したコードについて説明していきます。
指定したフォルダ内のファイル数を取得して、指定したセルにその数値を入力する、コードになります。
Sub ファイル数取得投入済み()
Dim FolderPath As String
Dim FileName As String
Dim FileInt As Byte
Dim SetPath As String
FolderPath = "C:\Users\masa\Desktop\【テスト】チェック用\保存用\投入済み"
FileName = "*"
FileInt = 0
SetPath = Dir(FolderPath & "\" & FileName)
Do While SetPath <> ""
FileInt = FileInt + 1
SetPath = Dir()
Loop
Cells(3, 4).Value = FileInt
End Sub
要素ごとに説明していきます。
Sub ファイル数取得投入済み()
プロシージャ名 いわゆるマクロの名前、の部分になります。
最後の「End Sub」とセットで入力することがルールになっています。
Dim FileName As String
Dim FileInt As Byte
Dim SetPath As String
変数の指定
この後のコードで指定するものを変数として定義します。
FolderPath = "C:\Users\masa\Desktop\【テスト】チェック用\保存用\投入済み"
FileName = "*"
FileInt = 0
SetPath = Dir(FolderPath & "\" & FileName)
Do While SetPath <> ""
FileInt = FileInt + 1
SetPath = Dir()
Loop
Cells(3, 4).Value = FileInt
「FolderPath」には計測するファイルが入っているフォルダのパスを指定します。
「FileName」にはワイルドカードを使用して、すべてのファイルを計測します。
作成にあたり、こちらのサイト様のコードを参照させていただきました。
この場を借りて御礼申し上げます。
やさしいExcelVBA
最後の箇所だけ「Cells(3, 4).Value = FileInt」として、取得したファイル数を指定したセルに入力させています。
作成したマクロをボタンに登録
ボタンをワンクリックですべて自動化させるために、複数作成したマクロを1つにまとめています。
Sub ファイル取得全部()
Call ファイル数取得割り当て済み
Call ファイル数取得投入済み
Call ファイル数取得A
Call ファイル数取得B
Call ファイル数取得C
Call ファイル数取得D
Call ファイル数取得E
Call ファイル数取得F
Call ファイル数取得G
End Sub
「Callステートメント」を使うことで複数のマクロを一度に実行させています。