マクロの記録を使ってもできない「作業の記録」について

マクロの記録を使ってもできない「作業記録」がある

すでにマクロの記録を利用されている方はその恩恵を理解されていると思いますが、これは非常に優れた機能ですね。
Excelで実際に行った手順を(Excelファイル)に「マクロ作業」として覚えさせておけば、次回以降はその覚えさせた「マクロ作業」を呼び出すだけで良い・・非常に便利ですよね。
しかし、この便利な機能ですが残念ながら「できない記録」もあります
今回は、「プログラム視点」からこの点について説明します。

マクロの記録の開始画面

プログラム必須のアレができない・・アレとは

マクロ(VBAとも言いますが)を使う方の多くが、「マクロの記録」を使い、そこで出来上がったプログラムコードを改修する、という方法でやられているのを目にします。
そういう方はご存知かもしれませんが、マクロの記録だけではプログラム中心の作業では絶対できないことがあります。

そもそもこれから説明する「できないこと」が記録されるようにするためには、Excelの「マクロの記録」という機能自体を大きく変えなければ実現できないのではないかと思います。
(つまり、Excel自体を作ったマイクロソフト社が「対応できるような仕組みにしなければならない」という意味です)

そのできないことを以下に3つ紹介します(が紹介の順番順位は関係ないです)。

マクロの記録は、Excelの裏側ではVBAというプログラム言語が動いています。いわばあなたの代わりに「Excel自身が(人目に触れない場所で、そしてあなたの行っている作業の内容について)プログラムを書いてくれている」ということになります。

繰り返し(ループ)作業

恐らくどんなプログラムにも必ずあるだろうループ処理ですが、マクロの記録ではこれが記録できません。
ループとは、作業の一部または全体で「繰り返し行う処理」です。

イメージはこんな感じの矢印部分です。これは作業の一部を繰り返すケースです。
全体処理の中で一部だけループを抜けて処理が終わる

「同じ作業」を繰り返しますが、例えば「毎回同じセルに同じ値を入れる」という意味ではないのでご注意です。

ループ処理としては、以下のイメージです。
繰り返し処理とは表の上から下、シートごとの処理などを表す
このような画像のような「流れ」は、マクロ記録中にExcelの作業を一件一件「ベタ」で作業すれば記録できます。
ただし、その場合は件数が増えた場合(上の図)、シートが増えた場合(下の図)に対して対応できませんね。

ループ処理というのは、特定の条件に達するまで繰り返す、あるいは終了するということができます。
このループ処理がマクロでは記録できません。
つまり、ループ処理が必要な場合は、「自分でマクロの記録(で作ったマクロ)を改修」しなければなりません。

表のセルで、上から下まで「繰り返し」値を入れる・・これはマクロの記録中にショートカットで対応できるケースもありますが、この場合はループ処理とは意味が異なります。

条件分岐

ある条件によって処理を分けるためには、「条件分岐」が必要です。
この条件分岐もマクロでは記録できません。

「えっ?IF関数があるじゃん!これでもできないの?」

はい、できないのです。そもそも処理を分けるという意味では、その分岐の単位自体が違うのですね。
IF関数は、「セルの値の条件を決め、それに合わせたセル表示の切り替え」のために使いますが、プログラムの条件分岐は意味が違います。

少々雑な言い方ですが、例えばIF関数では次のようなことができません。

  • セルA1の値が「終了」ならば → Excelを保存して閉じる
  • シート名「請求書」がなければ → 「請求書」シートを新規作成する

矢印の左側が、「条件」になり、右側が「分岐処理」となりますが、こういったことがIF関数ではできないのですね。

※ちなみに「プログラム」の条件分岐では、IF関数と同様の使い方ができます。

変数を使う

ちょっとしたプログラムを作るには変数が必須です。ですが、マクロの記録ではやはりできません。
プログラムの書籍では、「変数とは値を入れる箱(入れ物)」という説明があり、実際にそのとおりなのですが馴染みない方には非常に分かりづらいですよね、、
変数とは値の格納場所
イメージとしては、
「この値はすぐには使わない・・ただし後で使う」

例えば、身近には以下の状況で「変数を使っている」と言えるかもしれません。
計算結果を一時的に保存しなければならない
この値(「1」の結果)を「後で使う」ためには、一時的に「どこかに保管」しておかなければなりません。

上記の例だと、「1」の結果を

  • 式の下に書き込む → 式の下が「変数の箱」
  • 頭に記憶しておく → 頭が「変数の箱」

です(笑)。
(うーん分かりにくいですかね、、)

あるいは、変数は「クリップボード」の役割に似ています。
PC(Excel)の操作ならば保管先はクリップボード、そしてプログラムならば保管先は変数になります。

この変数はプログラムでできる幅(処理)を広げるためには必ず必要なものですが、マクロの記録ではやはりできないのです・・。

マクロの記録で「できないこと」は、マクロを直せばできる

これまでプログラムの側面からマクロで出来ないことを紹介しました。
他には(Excel2013から?)、オートシェイプ・図形の操作がマクロで記録されなくなりました。

このように「マクロの記録では記録できないこと」についておわかり頂けましたでしょうか?
曖昧な表現ですが「ある程度の処理以上」を求めると、マクロの記録だけでは限界があります

「一つ上」の作業効率を求めたい

そうなると、自ずとマクロの記録だけでは足りない部分がある、ということになります。
できないことは、「自動記録されたマクロを修正」すればできることに変えることができます。

プログラムという側面から見ると「マクロの記録」というのは、入り口ですね。
ここから文字通り「手直し」することで、より貢献度の高い「ツール、システム」が出来上がります。

プログラムは「はい(TRUE) または いいえ(FALSE)」の世界です。曖昧さが許容されません(曖昧とは何か・・それすら定義しなければならないのですね)。
そのため、「ロジカルシンキング(論理思考)に役立つ」ということで、プログラミングを研修として取り入れている企業もあります。
興味ある方はトライしてみてはいかがでしょうか。

初めての方にとって敷居は大きいです・・ですが見返りもデカイと・・(笑)。

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