只今エクセルマクロに挑戦中
4年ほど前に、マクロの記録機能を活用して、日頃よく使うエクセルの操作をマクロ化することを、このブログに書きました。今度は記録機能にほとんど頼らず、自らがマクロの命令文をキーボード入力して、ある処理内容をマクロ化することに挑戦中です。
月初に必ず発生するあるおシゴトでマクロを使ってみようと、連休中にいろいろ本を図書館から借りてきて、マクロを記述してみました。これで多分いけるだろうと思い、連休明けに試してみました。
ところが結果は、あら残念!!途中までは正しく動作するのに、あるところで対象物の指定の仕方が適切ではないとかで、実行できないというエラーが発生。結局まだ完成できておりません。ではあるのですが、小さいけれども一つの確実な成果のようなものが得られたと思っております。
得られた小さな成果とは
マクロを完全に実行させるところにはまだ至っておりません。ですから、排除させたかったエクセルに対する手作業は今も残っております。なのですが、気のせいなのかもしれませんが、手作業の時間が多少なりとも減ったように感じられます。スイスイと手が進むようになったのです。
最終結果を出せていなくても、これだけでもマクロを考える意味があったと思います。
マクロ化したかった工程
解決したい手作業の内容は、要するにコピー&ペーストです。複数の表(元表)にあるデータから、必要なデータの必要な要素だけを取り出して、それらを別にある単一の表に集約する作業です。ただ、複数個ある元表のレイアウトは同じではありません。それぞれに異なります。
例えば集約する表の列Aと列Bに配置したいデータは、
- 元表1だと列B・列Aにあり、並ぶ順番が反対であるとか、
- 元表2だと列C・列Hにあり、二つの要素が離れ離れにあるとか、
あるいはまた、同一のものであるにもかかわらず、その呼び名が、
- 元表1ではAAAAだったり、
- 元表2ではAAAA(aa)だったりと、
微妙に違う方法で表現されていたりします。つまり、複数ある元表ごとに、データの表現方法が異なるのです。
このような変換作業とコピー&ペースト作業をマクロ化しようとしたのです。
マクロを考える意味
マクロを記述するには、どんなことをどんな順番に実行させるかが、具体的で明確になっていなければなりません。「何気なくしているあの範囲の作業」というだけではマクロを記述することができません。
そんなことはわざわざ言わなくても、それは当たり前のことです。でも、ここに結構意味があるのだと思います。
何をどんな順番で自分が手作業をしていて、どの範囲をマクロに実行させるのか。これを考えることで、マクロ記述以前に既に改善できることやすべきことにも気がつくものです。
- そもそも今している手順がはたして本当に合理的なのかどうか、とか
- 仮に合理的だとして、それを全部マクロ化することが適当なのかどうか、とか
- マクロ化しようとしていた事のうち、エクセル単独で十分にできることがあるのに気がついたり、とか。
結構いろんな気づきが出てくるものです。
で、今回の事例で言えば、わたしが「何気なく」同時に手作業でしていた変換作業とコピー&ペースト作業をきっちりと分割しました。変換作業にはエクセルの数式を使い、コピー&ペースト作業はマクロ化することで対処することにしたのです。
結果的にはそのマクロは未完成であり、コピー&ペースト作業は今もなお人手に頼っている状態です。ですが、変換作業の工程は確実に短縮できております。さらに言えばコピー&ペースト作業に専念できる分、コピー&ペースト作業にかけている時間も、もしかすると短縮できているかもしれません。
わたしは、プログラムを書いて給料をもらっているわけではありません。ですが、マクロを自分で記述してみようという、言わばお遊びのようなことがきっかけで、担当するおシゴトの工程を見直す結果になったことこそが、意味あることだったと思います。
でも、マクロはマクロで、絶対完成させたいものです。