【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

 

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

本記事では しらかば堂の Access VBA 関数ライブラリ ExportInputBookToOutbookBook を利用して グラフ描画用のデータを入力用 指定 Excel ブックの指定シートの指定セル領域から出力用指定 Excel ブックの指定シートの指定セル領域へコピーする方法を紹介します。 

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
しらかば堂

いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?

Access VBA で Excel のブック間で データをコピーする

記事 #23 ではCSV ダウンロードから Access でのデータ整形を経て最終的に Excel による「 東京都コロナ 入院数と退院数比率推移」という2軸グラフを自動描画するまでのバッチ処理について紹介しました。

ですが、一点まだ紹介していない機能がありますよね。

つまり 18_02.accdb が出力した  T1040_日付_退院者数_入院者数_退院率.xlsx の 400 日分のデータを T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx にエクスポートする機能です。

今回の記事ではこの目的を達成するためにしらかば堂のライブラリの中に準備されている関数

【Access VBA】Excel の指定シートを別ブックのシートにエクスポートする

を Access ファイル に組み込んだ 23_01.accdb を作成することでこれを行う方法について紹介します。

このしらかば堂のライブラリ関数 ExportInputBookToOutbookBook は入力用として指定された Excel ブックの指定シート、指定セル領域のデータをコピーして出力用として指定された Excel ブックの指定シート、指定セル領域へ丸ごとペーストできるので

この機能を利用し

T1040_日付_退院者数_入院者数_退院率.xlsx

の 400 日分のデータを

T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

のグラフ描画用のデータ領域へコピーするという訳です。

 

入出力データの確認

入力側 Excel ブック

ではまず、入力側の Excel ブックについて以下におさらいしておきましょう。

この Excel ブック は

【連載】#22 Accessの選択クエリでテーブルの フィールド間計算をしよう

のエクスポート結果として出力されたものでした。


データの全体がわかるように開始領域と、終了領域を連続して掲載しておきますね。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

 

この図からデータのコピー元領域が

ブック名:  T1040_日付_退院者数_入院者数_退院率.xlsx
シート名:  T1040_日付_退院者数_入院者数_退院率
セル領域名: $A$1:$D$401

となっていることを確認しておきましょう。

 

出力側 Excel ブック

次に 出力側の Excel ブックについてもおさらいしておきましょう。

この Excel ブック も先ほどの T1040_日付_退院者数_入院者数_退院率.xlsx 同様に

【連載】#22 Accessの選択クエリでテーブルの フィールド間計算をしよう

のエクスポート結果として出力されたものなのですが、これに対して以下の動画で示した手順により

「東京都コロナ 入院数と退院数比率推移」という2軸グラフを描画した「グラフ」シートを追加し、これを T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx というテンプレートファイルとして名称変更したものです。

こちらも全体がわかるようにデータの開始領域と、終了領域、そしてこれらをもとに追加された「グラフ」シートも掲載しておきます。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

こちらも図をみてわかるようにデータのコピー先領域は

ブック名:  T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
シート名:  T1040_日付_退院者数_入院者数_退院率
セル領域名: $A$1:$D$401

となっていますよね。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
しらかば堂

もともとこの2つのブックファイルは同じものなので
シート名とセル領域は同じなんですね。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

続いて テーブル1 を データーシートビューのタブの右にある × をクリックして削除したあと

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

リボンメニューの

データベースツール > Visual Basic

を順にクリックして VBE(Visual Basic Editor) を起動し

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

VBE のメニューから
挿入(I) > 標準モジュール(M)

を順にクリックして標準モジュールを挿入し

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

現れたコードウインドウに

【Access VBA】Excel の指定シートを別ブックのシートにエクスポートする

記事の中の VBA コードをコピーしVBEのコードウインドウにペーストし、さらに以下の EnjoyTech ライブラリへの参照設定を有効にしてVBEを閉じます。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

マクロ 実装部分

そしてこの  ExportInputBookToOutputBook を呼び出すための autoexec マクロをマクロビルダ画面を使って

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

つまり次のように記述します。


If ExportInputBookToOutputBook("Documents\Desktop\T1040_日付_退院者数_入院者数_退院率.xlsx","T1040_日付_退院者数_入院者数_退院率","$A$1:$D$401","Documents\Desktop\T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx","T1040_日付_退院者数_入院者数_退院率","$A$1:$D$401")>0

If文の最後
 メッセージボックス (データをデスクトップの「T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx」にコピーしました,はい,なし,)

Accessの終了

 

このマクロの内容をよく見ると  ExportInputBookToOutputBook を呼び出すためのパラメータは以下のようになっていますね。

パラメータ番号 記述されたパラメータ値 説明
1 “Documents\Desktop\T1040_日付_退院者数_入院者数_退院率.xlsx”

入力側 Excel ブックの %USERPROFILE% からの相対パス名
つまりデスクトップ上にある
T1040_日付_退院者数_入院者数_退院率.xlsx
を指定しています。

2 “T1040_日付_退院者数_入院者数_退院率” 入力側 Excel ブックの対象シート名
を指定しています。
3 “$A$1:$D$401” 入力側 Excel ブックの対象シート名の中のコピー元 セル範囲
を指定しています。
4 “Documents\Desktop\T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx” 出力側 Excel ブックの %USERPROFILE% からの相対パス名
つまりデスクトップ上にある
1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
を指定しています。
5 “T1040_日付_退院者数_入院者数_退院率” 出力側 Excel ブックの対象シート名
を指定しています。
6 “$A$1:$D$401” 出力側  Excel ブックの対象シート名の中のコピー元 セル範囲
を指定しています。

 

また %USERPROFILE% は Windows であらかじめ定義されている環境変数で Windows 10 搭載 PCを使っている利用者のデフォルトのフォルダパスを表しています。この環境変数については必要に応じて以下の記事を参照下さい。

【Windows業務効率化】バッチファイルの基本テクニックを知ろう
【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
しらかば堂

どうですか?
If アクションと共に記述された
ExportInputBookToOutputBook の入力パラメータは
入出力データ仕様でみたExcel の仕様とあってましたか?

そして autoexec マクロの編集が終わったらマクロビルダ画面 を閉じ、この Access ファイルを 23_01.accdb という名前で保存します。

まとめ

いかがでしたか?

本記事では しらかば堂の Access VBA 関数ライブラリ ExportInputBookToOutbookBook を利用して グラフ描画用のデータを入力用 指定 Excel ブックの指定シートの指定セル領域から出力用指定 Excel ブックの指定シートの指定セル領域へコピーする方法を紹介しました。

この連載記事では自動化ツールの作成に向け Access のマクロや各種クエリについてずっと紹介してきましたが、ようやく本格的な Access VBA のコードが登場しましたね。

でも ExportInputBookToOutbookBook  の内容を見ていただくと

【連載】#04 Access のテーブル クエリ フォーム マクロ とよく使う画面をおぼえよう

で上司の悪口をいっていた頃の VBA コードとは違い、何やら複雑なコードが沢山出てきたことと思います。

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
みなみ

本当よ~も~ぅ
いきなりこんなの見せられてわかるわけないじゃないのっ!
みなみ、わかんないっ!!
もっと丁寧に教えてくれないと、みなみ怒るっ!!

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
しらかば堂

本当にごめんなさい。
話の流れでつい…
こういった VBA コードの文法的な詳しい説明は
以下のシリーズで順次やっていくので許して~ごめんなさい~

【目次】Office 365 VBA 完全マスター

恐らく初学者の方にとってこの VBA コードの内容はちんぷんかんぷんだと思いますが、一つだけ心のどこかに留めて下さいね。

内容がちんぷんかんぷんでも、この連載を活用して参照記事から VBA コードをコピペすればそれなりのツールが皆さんにも作れます。

ソフトウエアを生業にしている人たちの中で使われているセリフに「車輪の再発明はするな」というのがあるんですが、これは既に先人が作ったものがあったらそれを再度作るようなことはせずに、それを使ったうえで新しい何かを作りましょうという意味です。

別の言い方をすると、ソフトウエアの部品化とか、再利用という言い方もされます。

要は、あなたが必要なコードがそこにあったら、それは積極的に使いましょうということですね。

で、ちょっと自分でカスタマイズしたいと思ったら、そのあたりの学習を深めていけば良いんです。

      さてこの記事全体の目標は

      •  今の状況から抜け出してもっと前向きな仕事に取り組みたい
      • さっさと仕事を切り上げて充実したアフターファイブを過ごしたい

      でしたよね。

      あなたの解決したい問題は何ですか?
      次回はまた

      【連載】#25 バッチファイル や Access ツールをリファクタリングしよう

      Access VBA の新しい窓を開きましょう。


      Microsoft Access 関連教材は次のリンクからどうぞ。

      Access VBA 関連教材の紹介