取り込んだ個々のデータの集計
Webクエリを使用して部下の日報を取り込んだら、次はその情報を統合し、分析を行なうための方法を見てみましょう。
まず、Webクエリによって取り込まれた個人ごとのデータをまとめる処理を行ないます。
「集計表」シートのセルA2、H2、O2にそれぞれのセルを起点とするWebクエリが設定されている時、最新の情報を「集計累計表」シートに転記するには、以下のようなコードで処理します。
Sub AddNippou()
With Sheets("集計表")
.Range("A2").QueryTable.Refresh _
BackgroundQuery:=False
.Range("H2").QueryTable.Refresh _
BackgroundQuery:=False
.Range("O2").QueryTable.Refresh _
BackgroundQuery:=False
End With
' 最新の外部データを取り込むために「更新」をかける
AddData "A3", 5
AddData "H3", 5
AddData "O3", 5
' コピー、転記をするための関数「AddData」を呼んで転記する
End Sub
Sub AddData(myRngAdr, myColCnt)
' 起点となるセルと、そこから何列分の範囲をコピーするかを指定
Set myStartCell = Sheets("集計表").Range(myRngAdr)
Set myLastCell = myStartCell.End(xlDown).Offset(,
myColCnt)
' コピー元のセル範囲の先頭と末尾を取得
Set CopyTgt = Sheets("集計表累計") _
.Range("B65536").End(xlUp).Offset(1)
' コピー先のセルを取得
Range(myStartCell, myLastCell).Copy
CopyTgt.PasteSpecial xlPasteValues
' コピー元の範囲からコピー先へと「値のみ」を転記する
End Sub
最初に、最新の外部データを取り込むためにWebクエリの本体であるQueryTableオブジェクトに対して「更新」をかけます。QueryTableオブジェクトを特定するためには、外部データの取り込み設定の起点となるセル、あるいはすでに外部データが表示されているセルを利用することで可能となります。また、最新データへの更新処理は「Refreshメソッド」を使用します。引数「BackgroundQuery」は、データベース接続が確立し、クエリが実行される (クエリがバックグランドで更新される) とただちに、制御をプロシージャに返す場合は「True」を設定し、すべてのデータをシートに取り出した後でのみ、制御をプロシージャに返す場合は「False」を設定します。大きな外部データを取り込んで転記するような処理を連続したコード内で行なう場合は、BackgroundQueryをFalseに設定し、完全にExcelのシート上に外部データを取り込むのを待ってから次の処理に進むことができるのです。上記のコードでも、このプロパティをFalseに設定し、すべてのデータの取り込みが完全に終了した後に、3つの外部データ取り込み範囲からデータを転記する処理を行なうように設定してあります。
注目していただきたいのは、コピーと転記を行なうための関数「AddData」を作成し、必要な回数分呼び出しているところです。このように、繰り返し同じような処理を行なう場合は、その部分を独立した関数として作成しておくと、コードの再利用が可能となり、アプリケーションの開発にかかる時間もぐっと短縮することができます。日ごろから少しずつ再利用のできる関数を作成するようにこころがけておくとよいでしょう。