マクロの記録をする時に気を付けること

マクロの利用は業務効率を飛躍的にアップさせるけど・・

マクロを使うと作業の一部や全部を(半)自動的に行うことができるため、非常に「高速」な業務効率化が図れます(VBAを使うと更に「超高速」にもなり得ます)。

マクロの記録は、作成者の操作をほぼ「一挙手一投足をExcelへ記録」していき、「マクロの記録で作ったマクロ」は、まさしく文字通りに命令通り動きます。
しかしこの「命令通り」というのが、時としてエラーになったり、おかしな結果になったりしたことはないでしょうか?

本ページでは、そういった点について説明します。
マクロの記録でエラーが出たとき

なお、マクロの技術的な点(VBA)については、別途サイトで説明していますので下記にある関連ページを確認してください。

マクロの記録とは

マクロの記録とは、言い換えると「Excel操作の記録」ですね。
「開始から終了」までのExcelの操作をExcel自身に覚えさせる機能です。

「ムムッ、Excelでいっつも同じ作業を繰り返しているゾ!」

一般的に、こんな場面でマクロの記録が登場します。
なお、実際に活用するのはマクロの記録で作った「マクロ」の方です。
言い換えると、「マクロの記録でマクロを作る」とも言えます。

このため、「マクロの記録」作業自体は通常は1回きりで、以降は、その「作ったマクロ」を実行して使い(回し)ます

マクロを(マクロの記録で)作れば、以下のように「作業の一部分」、あるいは「全体の作業」で精度を保持したまま時間を短縮できます。
マクロで作業短縮化

マクロの記録をする前に意識しておく点

マクロを記録を開始する前に押さえておいた方が良いこともありますが、それらは厳密にはマクロの記録をしたい操作や業務内容などにより変わってきます

ここでは一般的な点について説明しているので、皆さんの作業に当てはまる点があれば参考にしてください。

マクロの記録時のポイントと特徴

上記でも説明していますが、そもそも、マクロの記録は、

  • マクロの記録でマクロを作成する
  • 作成したマクロを実行

という2つの流れのうちの「前者」になります。
ただし、大事な点としては、

作成したマクロを実行した時に問題(エラー)が無い

のように「後者」です。

ここの最大のポイントとしては、
「マクロ記録時」と「マクロ実行時」のファイル、シート、セル等の状態を同じにしておく
必要があります。

これが異なる状態であると、「マクロの記録時はうまくいった、でも実際に使う場面でうまくいかない」と言ったことが起こり得るからです。

マクロの記録は「ベタ」で記録される

そして、その上で特徴とは、基本的にマクロの記録で作成される操作内容は、「ベタ打ちとして記録される」ということです。

決め打ちというか、「シート名が○○」とか「A1のセル」と言う形で固定された状態(コードで記録される)になります。
マクロの記録で規則される内容は固定文字

そのため、「マクロ実行時」に、この決め打ちから外れる場合、「このシート名が違っているよ」などと(Excelなどが)教えてくれるわけではないので注意が必要です。

マクロの記録対象になっているExcelファイルやシートの「名前」を意識する

上記で説明したように、マクロの記録では、操作(マクロの記録)対象になっているExcelファイルやシートあるいは、セルに対して固定の情報が記録されます。
簡単に言うと、とある「シート」を対象とした操作では、マクロの記録時のシート名とマクロ実行時のシート名が同じになってないといけません。
下記の様に異なる場合には、(シート名が異なる、「住所一覧が無い」)エラーとなります。
マクロの記録時とシート名が異なる場合

(マクロの記録で)作成したマクロを実行すると、「インデックスが有効範囲にありません」という実行時エラーが表示されます。
シート名が異なる際に表示されるエラー
(このエラーは、シート名が「住所一覧」であるべきところが、「住所リスト」だったために発生しています)

外部にあるExcelファイルの読み込み

マクロの記録で外部のExcelファイルを開くときも同じです。
マクロでファイルを開く

上記の「指定したファイルを開く」という操作は、マクロの記録では、このように記録されます。
ファイルを指定して開いたときのマクロコード

さらに、この状態で「該当ファイルを削除」した後にマクロを実行するとこんな実行時エラーが発生します。
ファイルを指定して開いたときのマクロコード
このような場合、残念ながらマクロの記録では対処の方法がありません(VBAのコードを触る必要があります)。

マクロの記録は「ベタ打ち」を考慮する

ここで説明した内容のように、「マクロの記録」で記録される操作はベタ打ちの値になります。

よくある質問で、
「常時追加(削除)される行がある表で、末尾行の下に合計値を入れたい」というのがあります。
これもやはり「ベタ打ち(セルの位置が固定)」状態で記録されるため、解決ができません。
(ただし、ショートカットを使う方法で解決できることもあります)

ちなみに、行や列位置等が確定できないことをプログラム的には「動的データ」などと言います。

固定されたベタの内容に対しては、ベタ打ちとして記録されないような(ショートカットで)操作を行ったり、データ管理をする前に知っておくと便利なことについてページでも紹介しているように、そもそもとして、集計用シートを別に用意するなどで対策も考える必要があります。

データ管理をする前に知っておくと便利なことについて
「手持ちのExcelデータを加工して必要なときに、必要な情報を引き出せますか?」この問いに「簡単です」と答えられない方は一度ご覧下さい。データの管理方法は様々ですが、ある種の法則もあります。こちらのページではその点について説明しています。

そして最終的に解決できない場合は、マクロの記録で作ったマクロのコードを修正する必要なども出てきます。
(ただ、この辺りになると専門的領域に入ってくるため簡単に直すというレベルではなさそうです・・)

マクロの記録は、便利です。このような点にも気をつけることでその勝手は増してくると思います。
ぜひぜひ、有効にお使いくださいませ。。

タイトルとURLをコピーしました