気ままに趣味旅行

面白いコト「拡がる/拡げる」

エクセルVBA 集計ファイルの作り方④

どうもhiroakiです。

先日、下記の記事を書きました。

コードの中身が分からない人のために、解説していきたいと思います。

hiroakies.hatenablog.com

hiroakies.hatenablog.com

hiroakies.hatenablog.com

 

For Each…Nextステートメント

次は、繰り返し処理を行っていきます。

  1. For Each オブジェクト変数 In コレクション
  2.   処理
  3. Next

では実際にみていきます。

  1. For Each name In Worksheets("作業").Range("A2").CurrentRegion
まず、Worksheets("作業").Range("A2").CurrentRegionの部分をみていきます。ここでは、作業シート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がメソッドです。

フォルダの位置が分かったら、そのフォルダ内のどのファイルか指定します。

  1. fn = ThisWorkbook.Path & "¥" & name.Value & ".xlsx"

name.Valueでname変数に入っているA社を取り出し、&で連結してあげます。そうすると、例えば"C:¥Users¥Desktop¥出席報告¥A社.xlsx"のようにファイルパスが取得できます。

そのファイルパスを変数fnに代入します。

 

ブックを開く

ブックを開きます。ブックを開くにはOpenメソッドを使います。

オブジェクト.Open(ファイル名)の形を覚えておきましょう。

今回は、上記で取得したfnのファイルを開きます。

  1. Set wb = Workbooks.Open(fn)

そして、開いたブックをWorkbook変数wbに代入します。

その際、注意点として、Setをつけてあげなければいけません。

例えば、下のように宣言する場合の変数をオブジェクト変数とよび、この変数にオブジェクトを代入する場合は、Setをつける必要があります。

  1. Dim wb As Workbook
  2. Dim st As String

 

アラートを消す

フォルダ内ファイルを探す場合、その名前のファイルが見つからない場合があります。この場合、処理が中断してしまいます。

それでは困りますので、 

  1. On Error Resume Next

と記述する必要があります。このコードは、処理がおかしい場合にコンピュータが処理を止めてくれる機能でもありますので、むやみに書かないようにしましょう。

また、いちいち確認画面を出されると処理が止まって面倒ですので、ディスプレイアラート(メッセージ画面)を消します。

  1. Application.DisplayAlerts = False
 

今回はここまで~

今回はここまでとします。

さっと進めましたが、もっと詳しく知りたい場合は、コメントなどくだされば解説したいと思います。

次回からも続きを解説していきます。

 

では。

エクセルVBA 集計ファイルの作り方③

どうもhiroakiです。

先日、下記の記事を書きました。

コードの中身が分からない人のために、解説していきたいと思います。

hiroakies.hatenablog.com

hiroakies.hatenablog.com

 

オブジェクトについて

オブジェクトとは、セルやワークシートなどのVBAで操作したい対象のことです。

例えば、セルならRange(セル番地)やCells(行,列)で表します。

セルC4(オブジェクト)を表す場合は、Range("C4")、Cells(4,3)となります。

また、Range(セル番地)は、Range("A1:B4")のように範囲を表すことも可能です。

 

親オブジェクト.子オブジェクトについて

親オブジェクト.子オブジェクトについて説明します。

先ほど、セルC4オブジェクトを示すために、Range("C4")の形を示しましたが、このコードだけを書くと、どのシートのC4か分からない場合があります。

その場合、「シート3のC4セル」のように階層構造で表らわさなければいけません。

 

コレクションについて

コレクションとは、オブジェクトが複数集まったものをいいます。

実は、先ほど説明したRange()はCells()のコレクションともいえます。

またCellsのみのでもコレクションとなります。

他にも、ワークシート1、2、3…となったものの集合体がWorksheetsです。

参考:https://excel-ubara.com/excelvba1/EXCELVBA358.html

 

プロパティ、メソッドについて

プロパティは状態のこと。例えばフォントや文字サイズ、色、罫線などです。

たとえばセルの値のプロパティはValueです。

  1. Range("C4").Value

このコードで、セルC4の値を取得できます。

  1. Range("C4").Value = "文字を代入します"

このように、オブジェクトのプロパティにイコールを書いて、文字を入れることもできます。これを代入と呼びます。代入は左側にいれると覚えておきましょう。

 

メソッドはオブジェクトの動作を表します。コピーや貼り付けといった作業を行います。

  1. Range("C4").Copy

以上、オブジェクト.プロパティ、オブジェクト.メソッドの基本的な形を覚えておいてください。

 

内容へ

では、中身に入っていきます。

  1. Worksheets("出力").Cells.Clear
  2. Worksheets("出力").Range("A1") = "ファイル名"
  3. Worksheets("出力").Range("B1") = "貼付け内容"
  4. Worksheets("作業").Activate
  5. name_worksheet = Worksheets("作業").Range("C1")
  6. hanni = Worksheets("作業").Range("D1")

1行目はワークシートコレクションのうち、出力シートのセルコレクションを消す(Clearメソッド)ということをやっています。Clearメソッドでは書式を含めて全て消すことができます。

2行目は出力シートのA1セルにファイル名という文字を入れています。3行目も同様です。

4行目は作業シートをアクティブにする(Activateメソッド)ということをやっています。いま作業シートを開いた状態になっています。

5行目では、name_worksheet変数に作業シートのC1セルに入っている内容を代入します。いまは「2班」と入っています。

6行目では、hanniに作業シートのD1セルに入っている内容を代入します。いまは「C16:H25」と入っています。

 

今回はここまで~

今回はここまでとします。

 

基礎的なことなので、さっと進めましたが、もっと詳しく知りたい場合は、コメントなどくだされば解説したいと思います。

次回からも続きを解説していきます。

 

では。