こんにちは、じゅんぱ店長(@junpa33)です。
今回から、データ収集のためのエクセルVBAの解説をしていきます。
データ資料となるそれぞれのエクセルファイルから、必要な情報を取り出してくるエクセルVBAソフトの組み立ての中で、
まずは、「取り出し条件の設定」の方法について組み立てを行っていきます。
データを取り出したいエクセルブックの中の代表的なエクセルブックを選びます。
そのエクセルブックにあるシート名をリストアップします。
そのシートリストの中で、どのシートを対象にするか、
そのシートの中のデータを最大5つ抽出できるようにします。
先回の記事を読み返すにはこちら↓です。
複数ファイルからデータ収集を行うエクセルVBAソフトの作り方
コンテンツ
取り出し条件のVBA設定方法
手作業で大量のエクセルファイルを一つづつ開いて、必要データをコピーして別の集計ファイルにペーストする作業のことを考えると
どこからどういうデータを収集してくるかを、設定する事ぐらいなら手作業でするのは大丈夫です。
と、思ってしまいますが、どうせ自動化なら、この部分も出来るだけ自動化してしまいましょう。
収集するデータの「項目名」とそのデータが入っている「セル番号」は手打ちするしかありません。
問題は、こういった場合によく起こるのが、どの「シート」を参照するかとというときにその「シート」名を
間違って条件指定しまう事があります。
大文字・小文字・半角スペースの違いでも条件を認識できなくなってしまいます。そして案外ここで手間取ってしまう事が多々あります。
ここでのテーマでは、この条件入力ミスを防ぐ工夫も紹介したいと思います。
条件設定のVBAコード
今回はこのボタン「抽出条件作成」で操作するプロシージャーを作成します。
最初にエクセルBOOKのセットアップします
新しくエクセルBOOKを開きます。
Sheet1を「設定」
Sheet2を「抽出リスト」とします。
一旦、BOOK名を「データ収集.xlsm」として保存してください。
条件設定のVBAコード
取り出すデータのあるシート名を指定します
シート名はそれぞれ入力して指定していくことになります。
複数のシート名からデータをピックアップする時、少数のシート数であればまだいいですが、
多量のシート数がある場合は、手打ち入力指定は大変です。
そこで、
指定方法として、でーたの取り出し対象のエクセルファイルの何れかの「代表的なファイル」を選択し、
その「代表的なファイルに含まれる全シート名」をリスト化します。
そのリストの中で、条件指定として必要なシートをチェックすることにします。
VBAコードとしては、次のようになります。
このコードは、標準モジュールを新規挿入後、そちらに記入してください。(Module1などに)
モジュールの挿入方法が不明な方は、こちら↓でご確認ください。
こちらの記事でも参考になります。
プロシージャー名を「シート名取出し()」としています。
Sub シート名取出し()
Dim St As Worksheet
Dim R As Long
Dim flg As Boolean ‘修正追加コード 20年11月23日
On Error Resume Next ‘修正追加コード 20年11月23日
flg = Application.FindFile ‘修正追加コード 20年11月23日
On Error GoTo 0 ‘修正追加コード 20年11月23日
If flg = False Then Exit Sub ‘修正追加コード 20年11月23日
An = ActiveWorkbook.Name
R = 4
For Each St In Worksheets
Workbooks(“データ収集.xlsm”).Activate
Worksheets(“設定”).Cells(R, 1).Value = St.Name
With Range(Cells(R, 1), Cells(R, 2))
.Interior.ColorIndex = 6
.Borders.LineStyle = xlContinuous
End With
R = R + 1
Workbooks(An).Activate
Next
Workbooks(An).Close False
End Sub
コード修正
ファイル選択のダイアグラム表示時に「キャンセルボタン」を押したときのプログラム動作修正コードを追加しました。(20年11月23日)
「Activeworkbook」名の変数化については、こちらの記事を参考にしてください。
「For Each ~ Next」の使い方については、こちらの記事が参考になります。
VBA 回数不定のループ処理はDo LoopとFor Each
「With~ End With」の使い方については、こちらの記事が参考になります。
With~End Withの使い方。VBAコードを簡潔に記述する
セルの罫線設定についてはこちらを参考にしてください。
この「シート名取出し()」でリスト化したシート名と、取り出すデータのセル番号を指定する入力表を作成します。
プロシージャー名を「変数設定()」としています。その中で「シート名取出し()」プロシージャーを呼び出します。
VBAコードとしては、次のようになります。
Sub 変数設定()
シート名取出し
Workbooks(“データ収集.xlsm”).Activate
Worksheets(“設定”).Select
Range(“A3”) = “シート名”
Range(“B2”) = “シートチェック”
Range(“B3”) = “抽出に〇”
Range(“C2”) = “項目名”
Range(“C3”) = “セル番号”
Range(“D1”) = “抽出データ1”
Range(“E1”) = “抽出データ2”
Range(“F1”) = “抽出データ3”
Range(“G1”) = “抽出データ4”
Range(“H1”) = “抽出データ5”
Range(“D2”, “H3”).Interior.ColorIndex = 6
With Range(“A1”, “H1”)
.Font.Size = 15
.Font.ColorIndex = 5
.Font.Bold = True
End With
With Range(“A2”, “C3”)
.Font.Size = 15
.Font.ColorIndex = 5
.Font.Bold = True
End With
Range(“D1”, “H3”).Borders.LineStyle = xlContinuous
Range(“A2”, “C3”).Borders.LineStyle = xlContinuous
Columns.AutoFit
End Sub
「変数設定()」プロシージャー名を実行すると、
ファイル選択画面が表示されます。代表的なファイルを選択します。
ファイルを選択して「開く」ボタンをクリックすると、「設定」シートは、このように表示されます。
入力表は少し見やすくするために、入力指示項目のタイトルの文字スタイルを変更しています。
入力部分は、セルに色を付けています。
この部分は、お好みでカスタマイズしていただければよろしいかと思います。
プロシージャー実行のボタンを設置する
あとは、「設定」シートに実行ボタンを設置します。
設置位置はJ・K列に設置しています。(ボタン位置は適宜でOKです。)
設置方法は、「開発タブ」→「挿入ボタン(プルダウン)」→「フォームコントロール」→「ボタン」
位置決め後、「ボタン」右クリック→「マクロの登録」→「変数設定プロシージャー」を指定です。
ボタン名称の変更は「テキストの編集」から行います。
これでボタン設置完了です。
ここまでのまとめ
サンプルの画像を参考にすると、
抽出するデータ数はこの場合、5個/シート ✖ 72シート で合計360個のデータを取り出すことが出来ます。
もちろん、ファイルにあるシート数が多ければもっと取り出せるデータ量は多くなります。
が、その分パソコンに負担が多くかかりますので、一度の作業でなく多ければ何回かに分けて行うことをお勧めします。
次回は、入力した条件に従ってデータを取り出すためのVBAコードを解説していきたいと思います。
次の記事をご覧になるには、こちら↓になります。
指定条件で複数のファイルからデータを取得するエクセルVBAコード
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です
複数ファイルデータ収集VBAの関連記事はこちらです。
エクセルVBAを使い始めて、始めのうちに知っておきたいおすすめの内容を纏めてみました。