Excelで作られたフォーマットへ差し込み出力する話は
Qiitaでも他のサイトでも既出だとは思いますが、
(なぜか)ADOを使ったものは見かけなかったのと、
まあまあ汎用的な感じのシステムにうまいことなったので、投稿します。
ADOを使うメリット
- コードがすっきり書けます。
- 動作も速めです。
- リストを色々なファイルやデータベースから引っ張れます。
ADOを使うデメリット
- リストはデータベースのテーブルとして(型などが)整理されている必要があります。
作ったシステム
こんな感じで、リストとひな型をそれぞれ読み込んで、
また別のExcelファイルに件数分のシートをダダダダダと出力していく仕組みです。
セルの名付け方さえわかれば誰でも、ひな型を作ってシステムを利用できます。
PowerPointで作ったひな型への出力にも不完全ながら対応しています。
動かしているところを動画にもしていますのでよければご覧になってください。
コードは分量が多くてここに書ききれませんので、
私のホームページからダウンロードできる実物を見ていただけたらと思います。
https://unmebakka.web.fc2.com/
コードだけ読みたい方はマクロ無効にしたままどうぞ。
技術的なポイント
Excel VBAでの開発は、手軽で初心者向きである反面、
コードの読みやすさや保守性が失われがちです。
なるべく抽象的に書くことを考えると良いと思います。
まずは、ユーザーインターフェースで入力させるセルに名前をつけることから始めましょう。
これにより、インターフェースのデザインが多少変わっても
コードをいじるためにエディタを立ち上げる必要がなくなります。
表は素のままにしないでテーブル(ListObject)としておくと、
VLOOKUP関数やドロップダウンリスト、VBAで利用したいときに
テーブル名と列名を使って抽象的に表現できます。
また今回は、入力させた情報を一旦自作オブジェクトに持たせることで
取り回しが楽になり、コードもすっきり書けました。
エラーの報告のさせ方を丁寧に考えることは、開発をスムーズにしてくれます。
参考:https://qiita.com/oedkty/items/d6d2e86d689c9a267f11
ADOの部分については基本的な使い方しかしていませんので
既にたくさん出ている情報にあたっていただきつつ
コードを読んでいただくと良いかと思います。
作った動機
以前勤めていた職場がExcelをよく使うところで、
皆が膨大な時間をコピペに費やしていました。
自分はそれが面倒だったのでVBAを覚え、一斉出力するコードを
あちこちのExcelファイルに書き込んだりしていました。
その職場はもう退職してしまったのですが、
ひな型のセルの名前とリストのフィールド名が一致するかどうか見る
というアイデアが、ふと(なぜか今さら)思い浮かんだので
VBAの復習がてら作ってみた次第です。
何かの参考になれば幸いです。