テーブルから別テーブルへの転記 ③ 配列と連想配列の組合せ ~その2.全部転記~
前回はテーブル間の転記について、配列と連想配列の組合せによる転記を紹介した。
infoment.hatenablog.com
前回までは指定列をキーに、もう一つの指定列を転記対象として処理していた。
つまり、転記対象が一列のみであった。
ということで今回は、テーブルをガバッと全部転記することに挑戦する。
といっても今回は、前回作成した短列コピーのモジュールをループで回すだけ
だったりする。
↓ これだけ。
' テーブル間のデータ受け渡し。 ' 各テーブルの指定列をkeyに、転記先テーブルにある全項目について転記する。 ' ※転記先テーブルにあって転記元テーブルに無いレコードは保持される。 Function Transcription_Tb2Tb_All(src_tb As ListObject, _ dst_tb As ListObject, _ src_key As Variant) As Excel.ListObject Dim ItemLabel As Variant Dim SrcItem As Variant For Each ItemLabel In src_tb.HeaderRowRange SrcItem = ItemLabel.Value If SrcItem <> src_key Then Transcription_Tb2Tb src_tb, dst_tb, src_key, SrcItem End If Next Set Transcription_Tb2Tb_All = dst_tb End Function
この方式の利点は、
- レコードの並び順不問(各レコードを一旦、連想配列に格納しているので)
- ラベル列の並び順不問(ラベル名称で列を特定しているので)
であること。転記元と転記先のテーブルでフォーマットが違っていても、
これなら気にせず転記できる。
※ただし転記元のキー情報が、転記元で複数回登場しないことが条件。
例えば今回はテーブルCをテーブルAに、コード情報をキーに転記してみる。
※御覧のとおり行も列も、テーブルAとテーブルCで並び順を変えてある。
それでは、動作を確認してみよう。
Sub test4() Transcription_Tb2Tb_All src_tb:=ActiveSheet.ListObjects(3), _ dst_tb:=ActiveSheet.ListObjects(1), _ src_key:="コード" End Sub
結果がこちら。
行や列の並びが転記元と転記先で違っていても、正しく転記できたようだ。
これはこれで、それなりに使えそうだ。でも転記元に新たなキーを含む
レコードが追加された場合に、今回までのマクロは対応できていない。
ということで次回は、今回の結果をさらに機能拡張して紹介します。
参考まで。