Excel上の操作をマクロの記録で行うと、「標準モジュール」という、通常のExcel操作では見えないところに、色々とプログラムコードが書かれます。
よく言われるのは「マクロの記録では不要なコードもたくさん書かれる」という点です。確かにそうですが、ここではある意味で逆の点について説明します。
まず、下記の図を見てください。普通の表でここのセルC5に合計(SUM関数)をマクロの記録で入れたいと思います。
下記のようにマクロの記録を開始させます。
オートSUMのボタンを押すだけですが、ここでマクロを終了しました。
そこで今作成したマクロのプログラム部分の書かれている標準モジュールを見てみます。
上記の処理は2点です。
1.FormulaR1C1の部分にSUM関数が入れようとしているのが分かります。
2.そしてその後にセルC6を選択となっています。
実はこの時点で問題が発生する「可能性」を秘めていて、実際に問題が起きる方法で実行します。
とは言っても実際には先ほどの表のセルC5を消した後、このマクロを実行させるだけですが、それでも問題が起こるのです。
(この時点で意味が分かる方はかなりマクロに慣れ親しんだ方かと思います)
実際に実行した結果が下記ですが、、、
なぜか、「合計」の文字が消えて、「0」になっています。
なぜでしょうか?
よく見ると上記の2番目の処理である、セルC6の選択はできているようです。
しかしSUM関数がありません。そしてB5が「0」になっています。
これはバグでも、操作ミスでもありません。
答えは「セルの開始位置」にあります。
マクロの記録をする画像
そして、マクロの記録を実行する画像
この二つの画像での違いは「セルの位置」です。
マクロの記録で作られるコードは、記録開始時にセルが移動しなければ、その移動しないセルが対象とみなすのです。このため、いきなり選択されていたセルにSUM関数を入れるマクロの記録になっていたのです。
この部分はプログラムが間違えているわけでもないため、案外盲点になっています。従いこういったこと自体を意識しないように必ずセルを移動させる動作を含めたマクロの記録を取るようにしておくと回避できます。
以下はマクロの記録を開始する前にセルを「A1」にしてから、マクロの記録を行ったコードです。
このようにすれば、「セルC5が選択された後でSUMを入れる」という形にできます。