😎

「バカを殴るVBA」 part2 テーブル引き合わせツールコード詳細解説

に公開

本記事は「VBA-Tool part2 テーブル引き合わせツール」の記事で紹介している学習用VBA-Toolの詳細解説になります。

「バカを殴るVBA」関連記事の地図
https://zenn.dev/mambo_ykhm/articles/f3dca31da309d0

Toolの内部のコードの解説ですが、なるべく「読みモノ」として完結させたいため図解を用いて「なんとなくの雰囲気が分かる」だけにとどめます。

また、ざっくりとつかみやすくするために情報を色で分けてみます
ー「画面」(オレンジ)
ーー「関数」(青)
ーーー「説明」(緑)
ーーーー「学習ポイント」(紫)

「データ引き合わせ」ボタン (メイン処理)  -> 【1】
「出力結果削除」ボタン -> 【2】

重点ポイント

本記事で一番言いたいことは「連想配列を理解すると便利だよ」という事です。ですので④make_objDicと⑤Connect_Data()の項で何をしているかを確認してみてください。

「データ引き合わせ」ボタン (メイン処理)  -> 【1】

このボタンを押すとメイン処理であるデータ引き合わせ処理が始まります。
ボタンは「cb_DataConnect」という名前で、それを押下(clickする)と
cb_DataConnect_Click()というコードが呼ばれ、そのなかの命令が上から下にむかって流れるイメージです。

①~⑥までの処理が順番に流れます。

① datachk()
事前チェック機能となります。
本ツールではテーブルA(オレンジ枠)とテーブルB(緑枠)を引き合わせますが、引き合わせの基準となるKey列をテーブルA、テーブルBそれぞれに指定します。
指定が正しいか?のチェックを行います。(●記号が一個だけ指定されているか?)チェック後、正しければその列を返します。

②get_Table_A_Data()
テーブルA(オレンジ枠)のデータを2次元配列として取得します。
シート上の指定範囲を2次元配列に取得するという方法はpart1で解説していますのでそちらを参考にして下さい。

③get_Table_B_Data()
テーブルB(緑枠)のデータを2次元配列として取得します。
処理的には②と同じです。

④make_objDic()
テーブルB(緑枠)のデータを使って連想配列を作成します。

⑤Connect_Data()
結果出力用の2次元配列を作成し、まずテーブルAの2次元配列をそのまま転記します。続いて連想配列を使ってテーブルB側のデータを転記してゆきます。ここで結果出力用の2次元配列は完成します。

⑥DataWrite()
⑤で作成した結果出力用の2次元配列を出力します
↓Test006とTest016でデータが引き合わされている事が分かると思います

#【1】-① datachk()
本ツールではテーブルAとテーブルBに引き合わせのデータとなる列をユーザーに指定してもらいます。以降この引き合わせデータの事をKeyと呼びます。Keyの指定は3行目に入力された「●」記号で判定します。
●が入力されてない/複数入力されれている等の不正入力が考えられるので
そこを見越してチェックします。
正しく入力されていてチェックを通るたあとはKey列の番号を返すように作っています。

【1】-② get_Table_A_Data()

シート上の必要な範囲を2二次元配列に 取得します。
2次元配列取得→次元交換した配列を返します

【1】-②ー1では「指定範囲を直接2次元範囲に取得する」をやってます【1】-②ー2では2次元範囲の1次元目と2次元目を交換してます。
シートで縦と横を交換するイメージです。交換後は一次元が列になるのでデータ見ながらコード組みやすいのです。個人的な好み。


取得しただけの2次元配列(左)と次元交換後(右)

【1】-③ get_Table_B_Data()

②と同じなので省略

【1】-④ make_objDic()

データ引き合わせ用の連想配列をつくります。
本ツールでは「テーブルA」のデータをもとにして「テーブルB」のデータを引き合わせてゆく設計をしています。「テーブルB」をバラバラに切って
「テーブルA」の脇に貼り付けてゆくイメージです。
そのため「テーブルB」の連想配列を作ります。
また連想配列の性格上、重複するデータをキーに登録できないので、一意性のチェックも入れています。そのあたりも確認しながらコードを眺めてみてください。

【1】-⑤ Connect_Data()

出力用配列作成し、そこにテーブルAのデータをそのまま転記、④で作成した連想配列を使用してテーブルBのデータを引き合わせるイメージです。

【1】-⑤ 図解イメージ
【1】ー⑤の動きを図解すると上のようなイメージです
出力用配列を作り、テーブルAのデータをそのまま貼り付け、連想配列をつってテーブルBのデータを引き合わせて貼り付けするという感じです。

【1】-⑥ DataWrite()

出力用配列を書き出す処理
2次元配列なので2重ループ+Cellsで書き出します。

「出力結果削除」ボタン -> 【2】
対象シートの規定範囲を指定してClearContentsでデータを消去します。

以上

Discussion