VBA って、そろそろ MS-Office 製品から廃止されるらしいよ。
…と、そんな話も知っているのだが、今更 Excel で VBA を勉強し始めた。
どうしても、というわけではないが、使う必要があったのだ。
町内会で、毎年敬老の日に、ある程度の高齢者にお祝いの品を出す。
また、地域の団体からも、特定年齢の方にお祝い金が出る。
そして、町内のお年寄りの数は結構いるので、お祝いの品は、各地域の組長さんに配ってもらう。
ただし、お祝い金が出る場合は、責任問題もあるので町内会の評議員が直接渡しに行く。
ここで、評議員は担当組をいくつか持っており、お祝い金を渡しに行くのは、担当の組の方になる。
さて、ここで、町内のお年寄りをリスト化し、このリストを元に、各組ごとにお祝い品を渡す該当者リストを作り、それとは別に、評議員ごとのお祝い金を渡す該当者リストを作らないとならない。
また、評議員ごとには、その担当する各組に何人づつお祝いの品を渡す該当者がいるかのリストも必要になる。
各組長さんに依頼するのは、評議員だからだ。
簡単にまとめると、
・高齢者のリスト
・各評議員が、担当する組に、各何人のお祝い品該当者がいるかのリスト。
また、各評議員が直接お祝い金を渡す人のリスト。
・各組の組長さんがお祝いの品を渡す該当者のリスト。
の3つのリストを作る必要がある。
ここで、高齢者のリストは手作業で作るよりほかないのだが、それ以外のリストは、このリストから転記して作れる内容だ。
ただ、転記の規則が非常にややこしく、今までは手作業で転記作業が行われていた。
僕は昨年からこの作業の担当になり、昨年は作業フローがわかってなかったこともあり手作業で転記した。
しかし、非常に面倒くさい。転記だけで3日くらいの作業になるのだ。
(毎日夜2時間程度しか作業できない前提だけど)
転記だけならコンピューターにやらすのがよかろう。
そもそも、普通の Excel の式で書けるんじゃないか?
…と思ってやってみたが、とても無理だった。
書けないわけではないのだが、気が遠くなるほど処理が遅いのだ。
250名ほどのリストの中から、60ほどの組に対して、年齢も考慮しながら適切に抜き出してリスト化する、というのを、通常のエクセル式だけで作成すると、関係性が非常に複雑になる。
作れるのだが、そのすべてを解決するのが無茶苦茶遅い。
2組分のリストを生成する式を作ってみたところで、処理があまりに遅いので断念した。
というわけで、VBA なのだ。
将来的に Python に置き換わっていくことは知っている。でも、将来の話ではなく、今すぐ使える必要があるのだ。
あと、自分のマシンの Excel なら最新版にするのも簡単だが、町内会のご老人が使っているマシンでも開けるファイルである必要がある。
そのためには、古い VBA が有用なのだ。
最初はコツがわからず、エラーが出てもそのエラーの解消方法がわからない。
そもそも、VBA のエラーメッセージ、数ある言語のエラーの中でも不親切な部類に入ると思う。
エラーメッセージなんて、みんな不親切なもので大差ないのだけど、「どこで」エラーになったのかがわかりにくいのだ。
エラーが出た行しか教えてくれないが、Excel VBA はオブジェクトチェインが結構重要になる構造なので、1行が長くなる。
長い行のどこかでエラー、と分かっても、どこでエラーになっているかわからず、その箇所の特定から始めないといけない。
しかし、3日も使っていると(これも、1日2時間程度の夜の作業)、さすがに慣れた。
VBA は Microsoft BASIC の流れを汲むものなので、昔取った杵柄である程度勘が利く。
そんなわけで、渡したい組長さん、評議員さんに対する書面のテンプレートを用意すると、それを必要なだけコピーして、その中に集計された高齢者のリストを適切に挿入しつつ、家族・世帯を考慮する形に枠線で囲むところまでやってくれるスクリプトが完成しつつある。
…まだ「完成しつつ」だ。完成してはいない。
組ごとのリストはできていて、評議員さん別のリストを作る部分が半分できている。
まぁ、あと2日くらいの作業で完成かな。
先に書いたが、手作業でやると3日くらい。
しかし、プログラムを組むのに、2週間くらいかかっている。
ただ、これができれば来年からは簡単になる。
ボタンを押せば、3分程度で集計を終わらせてくれるから。
まぁ、実用の為に作ったというより、自動化する過程がパズルのようで面白い、という趣味プログラムの領域ですね…
ちなみに、普段仕事で Excel シートを生成するようなこともやっているが、これは Excel VBA ではなくて、サーバ上の Javascipt (node.js) で書いているので慣れたもんです。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |