エクセルVBA 集計ファイルの作り方④
どうもhiroakiです。
先日、下記の記事を書きました。
コードの中身が分からない人のために、解説していきたいと思います。
For Each…Nextステートメント
次は、繰り返し処理を行っていきます。
- For Each オブジェクト変数 In コレクション
- 処理
- Next
では実際にみていきます。
- For Each name In Worksheets("作業").Range("A2").CurrentRegion
それをname変数にひとつずつ取り出して、処理していきます。
実際に取り出されるオブジェクトは、以下の通りです。
name=A社
name=B社
name=c社
name=d社
name=f社
For Each…NextステートメントはNextまでが処理なので、コード内のNextを探してみてください。そこまで繰り返して処理を行います。
ブックのパスを取得する ThisWorkbook.Path
これから他ブックをひとつずつ開いていきます。上で示したように、A社ブックから開いていくイメージです。
ブックを開くには、どこに保存されているのか分かりやすく示してあげる必要があります。そのためには、ブックのファイルパスを示す必要があります。
まず、ThisWorkbook.Pathで、ブックが保存されているフォルダパスを取得します。ThisWorkbookがオブジェクトで、Pathがメソッドです。
フォルダの位置が分かったら、そのフォルダ内のどのファイルか指定します。
- fn = ThisWorkbook.Path & "¥" & name.Value & ".xlsx"
name.Valueでname変数に入っているA社を取り出し、&で連結してあげます。そうすると、例えば"C:¥Users¥Desktop¥出席報告¥A社.xlsx"のようにファイルパスが取得できます。
そのファイルパスを変数fnに代入します。
ブックを開く
ブックを開きます。ブックを開くにはOpenメソッドを使います。
オブジェクト.Open(ファイル名)の形を覚えておきましょう。
今回は、上記で取得したfnのファイルを開きます。
- Set wb = Workbooks.Open(fn)
そして、開いたブックをWorkbook変数wbに代入します。
その際、注意点として、Setをつけてあげなければいけません。
例えば、下のように宣言する場合の変数をオブジェクト変数とよび、この変数にオブジェクトを代入する場合は、Setをつける必要があります。
- Dim wb As Workbook
- Dim st As String
アラートを消す
フォルダ内ファイルを探す場合、その名前のファイルが見つからない場合があります。この場合、処理が中断してしまいます。
それでは困りますので、
- On Error Resume Next
と記述する必要があります。このコードは、処理がおかしい場合にコンピュータが処理を止めてくれる機能でもありますので、むやみに書かないようにしましょう。
また、いちいち確認画面を出されると処理が止まって面倒ですので、ディスプレイアラート(メッセージ画面)を消します。
- Application.DisplayAlerts = False
今回はここまで~
今回はここまでとします。
さっと進めましたが、もっと詳しく知りたい場合は、コメントなどくだされば解説したいと思います。
次回からも続きを解説していきます。
では。