最後を飾るラストのテーマは、
「マクロは、”ローコード”で作りましょう!」
というお話しです。
おいおい、最後だと言うのに急に難しそーな話に
なってんじゃないのかよ?(笑)
他のVBA講座をまねて(!?)、それではもっと沢山
のカタカナ言葉を並べて説明してみますけれど、
「ノーコード/ローコード/プロコード」
この話です。
つまり、日本語に言い換えるならば、
「コード不要/低コード/高度なコード」
で、
これは、根本的なプログラミングのやり方を
大きく3つに分類した場合の言い方になりますが、
さらにこれ言い替えるならば、
コード(の難易度)が「無い/低い/高い」
となりますから、至って単純な分類ですけど、
VBAの世間では、この分類自体わかってる人が
殆どいないと思う話になりますから、
最後の最後に、どうしてもこれだけは皆さんに
お伝えしておきたいので、これから書きます。
ちなみに、
「コード」とはプログラムで書いた文書の事で、
コード≒プログラム
だと思ってくれたらよいです。
で私は長年、富士通などでプログラマー相手の
講師業をやってきましたし、
マクロ言語だけでもVBA以外に10個近くの言語で
開発を経験してきました人間ですから、
「ノーコード(コード不要)」
「ローコード(低度なコード)」
「プロコード(高度なコード)」
17年前からExcelのVBAを教えるにあたりましても、
この3つの区別だけは強く意識してここで教えて
きたわけです。
簡単に解説しますと、
「ノーコード」とは・・・
自分ではコードを書かないプログラミングの事ですが、
これは、一昨年から小学校でも義務化をされました
プログラミングの授業で教えている形態のそれが
この代表例です。(大人の場合だと、RPAってのが
その分類に属する言っていいかと思われます。)
小学校の授業でよく使われる「Scratch(スクラッチ)」
という学習用のソフトがありまして、
(小学5,6年生のお子さんをお持ちの方なら
耳にしたことはあるかと思います。)
「スクラッチ」は、コードを1行も(1文字も)
書くこと無しにプログラムが組める(ユーザー
インタフェースのみで)という子供向けの
ソフトになっています。
「プロコード」とは・・・
私のような職業でやっているプログラマーが主に
用いるプログラミングの事ですが、
COBOLやC言語やJavaや、最近で言うとPythonやら、
(誰でも名前ぐらいはどれか耳にしたことは
あるかと思います。)
で書く、非プログラマーには少々難しい、至って
プロ向きのプログラミングのやり方になります。
で、今回のテーマである上記2つの中間点(!?)
「ローコード」とは・・・
極力少ないコードしか書かないでプログラムを組む
手法です。
これは、小学生向きの「ノーコード」とは違って、
まったくコードを書かない、というものではない
ですし、
プロ向きの難しい「プロコード」とも明確に違う
方法であるわけです。
なるべく、自分ではコードを書かずに済ませる為の
プログラミングの手法(方法論)です。
小学生向けではないですので、必要な部分のコードは
自分で書く(追加したり、書き直したりする)必要は
あります。
端的に、皆さんにわかりやすく言ってしまうと、
これは、ExcelのVBAの場合の「マクロの記録」を
使ったプログラミングだと言うことになります。
つまり、
「マクロの記録」を使ったVBAのプログラミングが
「ローコード」で、
「マクロの記録」を使わずに書いたVBAのコードが
「プロコード」に分類される、
と言っていいかと思います。
(プロから言わせると、VBAはプロコードじゃない?!
確かに!それはお愛嬌です。笑)
この、どちらの方法を選ぶかは、それこそ個人の
自由であるわけなんですが、
少なくとも、前々から申し上げているように、
マクロの(ユーザーが特定のアプリケーション
の操作を自動化する為の)プログラミングに
おきましては、
歴史的にも、本来的にも、「ローコード」を
用いるべきは明らかです。
アプリケーションの一般ユーザーというのは、
決してプログラミングのプロではないからです。
(なお、ここで学んでいるExcelマクロの場合、
アプリケーションとはExcelの意味です。)
マクロの歴史というのは、いかにプログラミング
の経験と知識のない一般ユーザーでもそれなりに、
いつも使うアプリの操作が自分で自動化できるよう
するための進化を続けてきた、と言うものです。
だから、
VBA界隈ではよく見かける
「マクロの記録」は使うな!ってのは、
そもそもがマクロではない・・・。わけです。
で先日のこと、
昨年お亡くなりになりました作曲家の筒美京平さん
を偲ぶ記事を読んでいて思ったですが、
(筒美京平さんは、誰もが知る昭和歌謡の偉大な
作曲家です。)
今からもし自分が猛勉強を始めて、作曲家を目指そう
思ったとしても、それはとても無理だな~、と。。
(まぁ、当たり前な話ですけど・・・。笑)
音楽って、たったの3分で作り手の想いが伝わったり、
時には、聞いた人の多くをたったの3分で泣かせる事
だってできてしまう、、
音楽って偉大だなー、って。
私なんかは、どんなに長く、たとえ何万字の文章を
こうして一所懸命に書いたところで、
それ読んで泣いてくれる人なんか、ただの一人も
居ませんわけですから、、
(まぁ、当たり前ですけど・・・。×2回目笑)
そんなことが可能なものは世の中広しと言えども唯一、
音楽だけだろう思いますから、
「曲が作れるって、ほんと凄いなぁ~」そう思った
次第です。
で、これまでの長い人生の中で作曲なんてものには
まるっきり縁遠かった私と同様に、
これまでの人生で、プログラミングなんてものには
まるっきり縁の無かった人が、
にもかかわらず、、いきなり
プロと同じ「プロコード」を勉強して書こうとする、
(初心者にプロコードを強要する人が居る、)とは
思いますけど、そこに無理が生じているわけです。
だから、SNSなどへの最近の投稿を見ましても、
・マクロわからんすぎてー とか、
・勉強中だけど、マジで意味不明 とか、
・色々本読んでみたけどちんぷんかんぷんで諦めた
とか、
そう言ってる人が後を絶たない訳です。
それこそが要するに、「プロコード」です。
私のような本職のプログラマーいいます者は、
朝から晩まで、年がら年中、プログラムを考え、
プログラミングをやっています。
この職種は一般的に残業も多いですから、1日が
10時間労働と仮定して250日出勤したとすると、
年間の労働時間は2500時間の計算になりますが、
プロの職業プログラマーは、その大半の時間、
プログラムを書いています。
それが、「プロコード」です。
だから、本職でもない自分の仕事で日々忙しく、
これまでの人生でプログラミングなんてものには
縁遠かった人が、
いきなり、
そんなプロコードをマスターしよう、だなんて、
そんな無茶をやったらいけません!
無謀です!!
(まぁ、冷静に考えたら、しごく当たり前の話
だと思いますけど・・・。)
それ故の、
「ローコード」です。ローですよ、ロー。(笑)
一般のExcelユーザーは、可能な限りローコード
でのマクロ作りをやりましょう。
そもそもが、「マクロ」のコードとは、
そうしたプログラムには縁遠かった一般ユーザーが、
「ローコード」でプログラムを書く為に開発された
もの、
それが、本来の(本質の)意味になります。
マクロの言語をVBAしか知らない人に、
その辺を理解もせず、勘違いをしてプロコードを
教えちゃっている人が、非常に多いのです。
あと、世間でよく聞く、
引継ぎできなくて作った人が退職したら困るから、
「Excelでマクロ組むのは、禁止だ!」
って言ってる会社が結構あるかと思いますけど、
けどそれで、全部を禁止にしてマクロがもたらす
多大な利便性と、社員の真のIT力の向上とを
享受できなくなってしまういうのは、
実にもったいない話です。
たから、「マクロを禁止!」するのではなくて、
「VBAをプロコードで書くのは禁止!」
とすればいいだけ思います。
「ローコード」で書けば、皆で共有ができます。
職場の一人や二人しか理解することのできない
難しいプロ向きのコードでVBAを書くことを、
禁止してください。
業務を成功に導くのは、
「1人の天才」ではなく「10人の協力者」である
~~~~~~~~~~~~~~~~~~~~~~
それに間違いはない思いますから、結論的には、
職場の皆でVBAの「ローコード」勉強しましょう!
つまり、
それは、ここで長年私が教えてきた
「『マクロの記録』の賢い応用の仕方」
を学ぶ、
それです。
例えは非常に悪いのですが、
今の新型コロナの場合でも、母数を増やせば
(感染者数が増えれば増えるほど)、
それに比例して重症者の数も遅れてどんどん
増えていくわけですし、
今度のまたステルス?オミクロン株みたいな
新種の亜種や新たな変異株が出現するリスクも、
必然的に増していくわけなので、
とにかく、
「分母」を増やせば「分子」も増える。
「分母」が、まずは重要です。
すなわち、
マクロの入り口にたたずむ、未だ中に入ろうと
しない人に、一歩でも、半歩でもいいですから、
「ローコード」でそのハードルを下げて、
少しでもマクロに踏み込んでもらえたならば、
その中から、ある程度の割合でマクロは面白い!
ってなって、勉強始める人が出てくるものです。
100人が100人とも面白い!とは言いませんが、
私の試算ではその「分母」と「分子」の割合は
概ね、
「プロコード」← Excel職場の30人に1~2人
「ローコード」← Excel職場の30人に10~20人
です。よって、
「ローコード」が、グーンと成功者を増やす!
プロコードで書かれた本などで勉強する場合の、
少なくとも10倍以上その可能性高める思います。
では最後に、
この両者(プロとロー)の見分け方なんですが、
VBAの場合のこの見分け方は、非常に簡単です。
「オブジェクト」というワードが目次に書いて
あったら、そこに書いてあるのは「プロコード」
です。
(それは、プロ向きのオブジェクト指向型言語
と呼ぶコードの書き方の意味になります。)
そこには、「メソッド」というワードも
必ず書いてある思いますから、まさしく
それがプロ向きの「プロコード」です。
オブジェクト指向は、非プログラマーや初心者
には、非常に理解し難い概念です。
あともう一つ、最初の初期設定の説明の中で、
「変数の宣言を強制する。」
これにチェックをしろと言っているのも、
それは「プロコード」です。
これは、その筆者がこれからあなたに
「プロコードを教え込みますよ!」と、
そう宣言されたものと思って、間違いないです。
買った本の最初にする設定が書いてあるページ
を見て、上記の記載があった場合には、
その本でVBAの勉強はしない方が得策だと、
私は強くアドバイスしたい!です。
案の定、またしても最後の文章も長くなって
しまってきましたので、今日はこの辺で。。。
と言うことで、皆さん
マクロは、「ローコード」で始めましょう!!
本日のテーマは、
「動画vs活字」マクロを学ぶなら、どっち?
という話です。
これから「マクロの勉強始めてみようかな?」
と思っている方には、何で学ぶか非常に悩む
重要なテーマになる思いますし、
そもそもが、このメルマガのタイトルが
「マクロを始めよう!」ですから、
始めたい思っている皆さんに、
どうマクロの勉強を始めたら良いのか?
それ教えるために17年前に始めたのが、
このマクロの講座であるわけです。
ですから、
今回のこの話は最後に語っておかねばならない
私にとっても最重要なテーマでもあります。
ところで、
詰まる所、皆さんはどっち派ですか?
動画で勉強する派か?活字派(文字で)か?
ちなみにですが、
このマクロ講座はテキスト形式のメール配信
が主になりますので、
当然ながらこれは完全「文字のみ」で
(活字の文章だけで)マクロを教えています。
それで、
この講座を始めた17年前の2004年当時というのは、
当然まだYouTubeすら無かった時代ですし、
今のように「ネットで動画を観る」なんていう
今日の常識が考えられない時代でした。
SNSで言うと、ツイッターもフェースブックも
インスタグラムもラインですらも未だ無かった、
「まぐまく」等での無料メルマガ配信サービス
が大人気を博していたネット最古の時代です。
そんな前置きはさておき、
これまで何度もここで言ってきましたが、
マクロ作りを含めたプログラミングと言います
ものは、
「考える作業」です。
重要なので、もう一度言います。
「あなた自身の頭で考える作業」
です。
例えば、Excel等の何かのソフトのパソコン操作
を学ぶ場合、教わる先生の指示に従って操作して
さえいれば、何も考えなくても(記憶力だけの
問題で、)大概は身につくものですが、
プログラミング(マクロ)はそうではありません。
だから、マクロを習得する為には、自分の頭で
よく考えながら学ばないといけません。
その点が、
Excelを学ぶ場合とマクロを学ぶ場合
その一番大きな違いになるかと思います。
で、
肝心なのは、考えるスピードというのはほんと
”人それぞれ”であるわけですから、
まさしく「個人差」が大きいわけです。
だからこそ、
自分の考えるペースで学べる環境が必要
だと言いますか、マクロ勉強の場合には
特にそのスピード感が重要になってきます。
学ぶ為の環境が(スピード感が)重要です。
近年、スマホがいよいよ5Gの時代に突入した
とかで、ネットの通信速度というのが
どんどんと速くなっていますから、
世は、まさにYouTubeを代表する
「動画の時代」となってきたわけですけど、、
当講座でも、
こんな時代を反映して、YouTubeには100本
以上の動画は公開してきましたけれど、
けど、その百本いうのは、
いづれもマクロ作りの操作方法と、マクロ
を実行した様子を観せる為のデモ動画、
そのどちらかに限られます。
意外に思われるかもしれないですが、
このマクロ講座ではプログラミング自体を
教える動画というのは、1本もありません。
プログラミングを教えてきたのは、
メルマガの紙面におけるレッスンで、
だけです。
相手の(作り手の)ペースでしか勉強の
できない「動画」での学習というのは、
けっしてプログラミングの勉強には
適していない、と思うからです。
皆さんも多分経験あるかと思いますが、
なにぶん、動画を観ての勉強は、
止めたり、再生したり、又止めたり、
又再生したり、その繰り返し。。。
「あ、ここいい!重要!」って思って、
メモを取っている隙に、話どんどん先へ
進んじゃってて、慌てて巻き戻したり、
その逆に、「この説明、だらだら長くて
要らないんじゃないの?」って思って、
先送りで飛ばし過ぎてー「意味わからん」
になってしまったり。。
そんなことも度々ですよね。
動画は、そのすべてが相手の(作り手の)
ペースでのみ、進むものです。動画は、そのすべてが相手の(作り手の)
ペースでのみ、進むものです。
けっして、こちらの学習ペースに合わせては
くれません!
ただExcelの操作方法を学びたい場合
であればそれでもありなわけですが、
(作り手も皆、気持ちゆっくり目には
操作やってくれている思いますし、)
さほど大きな「個人差」は出ないですから、
YouTubeを探せばいくらだって出てくる中から
自分のペースに合った人の動画を探せばいい
だけです。
けど、
マクロの学習の場合にはそうはいきません!
マクロなどのプログラミングを学ぶ際には、
誰から教わろうとも動画の再生スピードが
(考える為の時間が)、
自分に合うということは、決してありません。
あり得ません!
あり得ませんし、よく考える作業においては、
どれだけ集中してできるかが勝負になります
から、
ちょくちょく再生止めるボタンを押すとか、
巻き戻すとか、その様な集中力を欠く行為を
自らでしてしまってはいけません。
考える事に集中している最中のビデオ操作は、
禁物です!厳禁です!
ちょっと前に、下記のコンテンツでも言い
ましたように、
「プログラミング = 集中力」だ!
と言い切って、間違いはないです。
ここに書いてある、変数名やマクロ名を
考える時間の中断すら極力無くして、
とにかく集中してやるもの、それが
プログラミング(マクロ作り)です。
これ要約しますと、
マクロの思考中に、変数名を考えたり、
マクロ名を考えたりしてしまう人は、
せっかくの肝心なプログラミング思考の
中断を度々余儀なくされてしまいますから
集中のできない人、
すなわち、プログラミングが苦手な人に
なってしまうのです。
それは、
動画の再生ボタンを押す場合や巻き戻しを
するビデオ操作にて中断を余儀なくされる
場合でも一緒です。
その小さな中断が度重なって、大きな
集中力の差(集中力の欠如に慣れてしまう)
となって、いづれ現れてきます。
動画でプログラミングの勉強に慣れてしまう
と、プログラマーで一番重要な"集中力"の
続かない、
中々プログラミング思考に集中のし難い
脳の構造になってしまうと思うわけです。
ちがいますか?
だから、とにかくマクロの勉強で肝心なのは、
集中力です。
とにかく、集中を中断させない、集中力を
継続させることを考えて勉強してください。
それだから、当講座のベテラン読者で中級レベル
に達した人達からは、
「仕事中にマクロ作りをしていたら、気が付くと、
あっという間に夕方の定時になっていた・・・」、
なんて経験談をよく耳にします。
ちょっとの集中環境の差(思考の中断があるか?
ないか?)が大きな差となって、プログラミング
作業自体の効率化を大きく左右します。
我々プロの開発現場でも、優秀なプログラマー
ほど仕事中の中断を嫌う、というのは確かです。
(要約すると、毎日午後の3時に出勤してくる
プログラマーの話、です。笑)
それでは、ここで本日テーマの結論です。
・思考のスピードは人それぞれ、個人差が
大きいです。
・だから、マクロ作り(プログラミング)は、
自分のペースで進められる「活字」で学ぶ
~~~~~~~~~~~~~~~~~~~
のが良いです。
動画と違って「活字」で学ぶ際には、
書いてある文章を読み進める自分のペースで
勉強が進みます。いやでも、自分のペースで
しか進まざるを得ませんね。
自分の思考のペースで読み進めて、勉強を
進めて行くわけです。動画学習のように
しょっちゅうの細かな中断は起きにくい、、
すなわち、「活字」は集中しやすい。
加えて、
「活字」の文章で理解をした内容は、全て
頭の中で何度も反復しての復唱ができる。
~~~~~~~~~~~~~~~~~~~
比べてみるとよくわかるように、
「動画」学習だとそれ容易には行きませんし、
ましてや、図解だと図を頭に浮かべての
イメージトレーニングにしかなりません。
おまけに、その活字が電子の文章だったり
すると、いちいちメモを取る必要もなく、
重要構文はPC内でただコピッペするだけ、
中断時間も極力少なく勉強し易いわけです。
今日のまとめです。
よって、当講座でのマクロのレッスン学習内容
(マクロの作り方を教えてきたコンテンツ)は、
すべてが活字の文章だけで、という次第です。
最初のレッスン1から最終回の231回に至るまで、
その全てを活字の文章だけで理解してもらえる
ようにとこだわって、書き続けてきました。
文章だけで17年間もずっと教え続けて来まして
随分と苦労もしましたけれど、これがマクロの
プログラミングを学んで頂く上での最良の方法
だと、そう信じるこだわりがありましたので、
近年、多様なSNS媒体(情報の発信手段)が
出てきた今でも、こうして活字の文章だけで
マクロ初心者の皆さんに理解して頂くことに
とことんこだわってきた、その結果です。
マクロの勉強いうのは、プログラミング思考
に自分が最大限集中のしやすい環境の下で、
やってもらいたいのです。
わたくし三太郎のこのような信念の一つ、
活字だけの私のつたない文章でうまくそれ、
皆さんに伝わりましたでしょうか?(笑)
本日は、以上です。
ペットの名前にしろ、会社名や新しくできる部署名や、
はたまた、産れてくる自分の子供の命名にしろ、、
何かの「ネーミングを考える」という行為は、案外と
結構な難しい作業であります。
なかなか、「しっくりいく良い名前」というのは
思い当たらないもので、考えつくまでには多くの時間も
掛かる場合も多いものですし、結局、いくら考えても
思い付かないまま時間オーバーで、まぁ「テキト─に」
で済ませてしまう場合というのが、殆どかと思います。
でそれ、マクロを作る際(プログラミングの場合)で
考えてみて欲しいのですけれども、
まずは、皆さんに質問です!
Q.
マクロ作成時に考えねばならない「名前」には
何がありますか?
Thinking time !
・
・
・
答え.
主には、「マクロ名」と「変数名」ですね。
分かりましたか?
で、ネットやらVBAの本やらを見てみると、よく
「マクロ名は、適当に付けろ!」と、
殆どのサイトや本にはそう書いてあるかと思いますが、
「その適当に付けろ言うのが難しいんだろうがっ!」
って、思いません?(笑)
古い話ですが私、人生で初めてプログラミングを
教わったのが大学での情報処理の授業だったですが、
その時に、同級生が自分で作ったプログラムの名称
に「自分の彼女の名前」を付けたヤツがおりまして、
それで、先生に酷く怒られてたのを記憶しています。
+++++++++++─
Sub Hanako()
処理
End Sub
+++++++++++─
とかですね。(笑)
大学生ならまだしもですが、社会人の我々がそんな
テキトーな名前をつけてしまったら、可也マズイ
わけです。(笑)
だから、適当に!とは言うものの、マクロ名一つ
付けるにしても、それなりに、それ相応に考える
時間は掛かるわけです。
で、プログラミングの場合、その一番の問題は
なかなか適当な良い名前が思い付かない・・・。
ということではありません!
それによって(名前を考える為の時間によって)、
せっかくの思考が(集中力が)そこで途切れて
しまう・・・、という点にあります。
ほんと、これはVBAやる人の中にはよくわかってる
人が殆ど見当たらない言うのが困りものでしてー、
VBAでは皆、せっかく高まってきた集中力を自らで
途切れさせてしまう様なプログラミングの仕方を
する人が(そう教える人が)非常に多いわけです。
これまでに何度も何度も私言ってきましたですが、
プログラミングとは思考力です。考える作業です。
だから、集中して考えるということが、特に大変
に重要になってきます。
とりわけ間違いの元は、変数名。
プログラミングの最中に、ここで変数使おう!
と思い付いたその瞬間が、プログラミング中に
おいては、一番に頭がよく働いていて、集中も
できている、まさにその時であるわけであります
のに、
そこで、また「変数名は適当に!もしくは適切に!」
なんて考えになってしまうと、(そもそもが、
「プログラミング」と「何かの名称を考える」という
思考は、全くの別物になりますから・・・。)
頭の中で、せっかく高まっていたプログラミングの
思考も集中力も、そこで一旦途切れてしまうことに
なるわけです。
そう、それは集中して仕事をはかどってやれている
最中に、いらぬ電話が掛かってきたり、アホな上司
から話しかけられたり(笑)するのと似た状況だと
言うとイメージしやすいかと思います。(ほんと
大迷惑な話ですよね。)
電話や上司からの他人事であれば仕方もないですが、
マクロ作りの最中に、自らそうした大迷惑な状況に
してしまう様なプログラミングの方法をしてる人が、
VBAの場合には非常に多いと感じます。
これ、私の様な職業で日夜プログラミングをやって
いるプロの職業プログラマーの場合においては、
システム開発のプロジェクト毎に予め「命名規約」
と呼ばれる変数名などの名前の付け方を定めた
ルールブックというのが用意されてありますから、
プログラミングの最中に変数名やらマクロ名やら、
を自分で新たに考える必要がない(すなわち、
プログラミング中にそれで思考力は中断されない)、
そうした段取りで作ることになっています。
読者の皆さんがVBAのプログラムを組む場合には、
そうしたプロの下準備というものは、たぶん無く、
何も準備はしてない思いますから、
変数名を考える度に、度々の思考の中断を
余儀なくされて、集中力も失ってしまう様な
プログラミングのスタイルでやっているかと
思います。
で、
この講座のレッスンではそれをどうやってるか?
集中力途切れさせない為にどう工夫しているか?
なんですが、
もう、ベテラン読者の皆さんならば重々これは
ご承知かとは思いますが、
「変数名」は、出てきた順に a、b、c、・・・、
「マクロ名」は、マクロの記録のデフォルト名の
そのままに。すなわち、いつもの
─────────────────────────+
[開発]タブの[コード]で [マクロの記録] をクリック
→「マクロの記録」画面が出るので、そのまま[OK]
をクリック。
─────────────────────────+
これですね!
ここで何か考えちゃうとせっかくの自分のリズムを
自らで壊してしまうことになりますので、
ここは何も考えずに(デフォルトのマクロ名のままで)
「OKボタンをただ押すだけで」先へ進むというのが、
当講座で(思考を止めずに)いつもやっているやり方
になっています。
ここで、すぐ「マクロ名は何にしよ?」って始まって
しまったら、もう最初から思考が停止してしまうわけ
ありますから、
これから「マクロ作ろう!」「作ってやるぞー!」
の自分自身の勢いが、それで一旦止まって(冷めて)
しまうのです。
けれど、
ネット検索して見つけたVBAサイトの殆どが、
「マクロの記録」を開始したここの画面の解説には、
OKボタンを押す前に、マクロ名には
「任意のわかりやすいマクロ名を入力してー」と、
必ずそう書いてあるかと思いますから、
それで必ず「わかりやすいマクロ名って・・・?」
と、脳がそちらの思考に入ってしまいますね。
いいですか!
皆さんが「マクロの記録」の画面を目にした瞬間
いいますのは、
これから「よーし、マクロ作るぞー!」って、
せっかく気持ちがそうなっている、まさにその瞬間
でありますから、そこでその勢いと思考を中断させ
てしまうようでは、実に勿体ないです。
それは、変数名に関しても同じです。
VBAの殆どのサイトでは、
「わかりやすい変数名を付けなさい!」って、
必ずそう書いてあるかと思います。中には
「可読性を考えてー」だなんて、そんな素人考え
のデタラメを平気で書いてあったりもします。
皆、それが正しい事だと信じてしまう・・・。
私から言わせると、これは実に勿体ない話です。
この講座で17年間に渡りまして読者の皆さんに
マクロの作り方を教えてきた当講座のレッスン
では、
変数名は、出てきた順に、
a、b、c、・・・
なのです。
これだと、考える必要性がありませんから、
思考の中断も起こりませんし、時間も一切
掛からないわけです。
おまけに、変数名のスペルは書き間違ってないか?
だなんて、余計な心配をする必要性もまったく
ありませんし、
なんなら、後で(マクロ完成してから)
変数名を変更するいうことも構いません思います。
けど、たとえばマクロ名だとデフォルトで付く、
Macro1、Macro2、Macro3、・・・
このままの方が作った順に並んでくれますから、
(私の頭の中ですと、よりわかり良いですから)
まぁ、5個や10個くらいのマクロ数の名称であれば、
そのまま(上記のデフォルト名のままでー、)に、
私ならそうします。
同様に、変数名の場合も出てきた順に並んでいると、
後で捜しやすいですし、作っている時の記憶も、
より鮮明に残りやすくなるものだと思いますので、
たとえば、机の上にうず高く積まれた書類の山でも、
その中から必要な資料をすぐ捜し出せる名人技の
要因とは、
「大体この辺の時期に作った資料だったよなー」と、
作った記憶の順番で積まれてるお陰じゃないですか?
パソコンでも、ファイルがいっぱいのフォルダで、
日付順にファイル並び替えてみると目的のものが
見つけやすくなるいうのと、これは一緒ですね。
だから、変数名も作った順番に上から、
a、b、c、d、e、・・・、
といった具合に、並べて置くのが良いですから、
当講座で17年間やってきたレッスンでは一貫して、
上記のような変数名の付け方をしてきた次第です。
但しですが、それらの名称には必ず、
+++++++++++─
Sub Macro1()
' 表の日曜日に色を付けるマクロ
'
・
・
+++++++++++─
といった具合の説明のコメント文を書いておくよう
してくださいね。(人間は、時間が経つと
必ず忘れてしまう生き物ですから・・・。笑)
しかも、このコメント文での説明なら、どんなに
長くて詳しい説明でも書けますから、後ですっかり
内容忘れてしまった頃に見た場合でも、
よりわかりやすく書けます。
例)
+++++++++++─
×
Sub 日曜に色付けるマクロ()
↓
〇
Sub Macro1()
' 勤務表の日曜日の日付欄(C列のセル)を赤で塗るマクロ
' ついでに土曜日も黄色で塗る。(祭日は?まだ未定)
+++++++++++─
変数名の例)
+++++++++++─
×
Dim Address
↓
〇
' 変数aは、顧客の自宅住所(都道府県名からマンション
' 名までが必ず全て入った「フルの住所」です。)
+++++++++++─
てな具合に、です。
このようなコメントの説明は、マクロが完成した直後の
未だ記憶に新しい内に、ゆっくりと詳しく書いておけば
いいだけの話ですから、
この変数名の例でも、マクロ作りの最中には思考の中断
が一切起こりませんわけですが、
変数名の宣言を強制してしまってる場合の、上の悪い例
での Dim Address の場合ですと、これ書かない事には
先へは進めませんから最低でも数秒間のタイムロスと、
思考の中断を必ず起こします。
おまけに、
Dim Address だと、
いったいこれは誰の何の、何処まで入った住所なのか?
それ一切不明ですから、このような中途半端な情報は、
かえって後で困る、バグの温床になる、そのリスクも
高くなります。
最後に、今日の話をまとめますと、
プログラミングは、
「思考を途切れさせる作り方をやってはいけません!」
マクロ作りの場合も、この一言に尽きます。
今回のプログラミングで最も重要な集中の仕方の話、
ご理解いただけましたでしょうか?
皆さんのより効率良いマクロ作りの為の
ご参考になりましたら、幸いです。
なお、今回のこの話は、当講座「GoGoマクロ」の
下記サイトにも詳しく書いていますので、
今日の話にもし「なるほど!」「感心した」
という方は、こちらも是非参考にご覧ください。
■マクロ作りの邪魔をする最大の敵とは?
GoGoマクロのWebサイト
本日、以上です。
今回の東京オリンピックでは、
驚きの13歳、最年少の金メダリストが現れたかと
思ったら、その後には、何と未だ12歳の
銀メダリストまで出てきましてーの、(驚!)
12歳のメダリストって、皆さんあの子の何倍の人生、
生きてきてます?(笑)
あのスケボー解説者じゃないですけど、まさにそれ、
「ゴン攻めが、鬼アツで、超やべー!」ですね。(笑)
ちなみに、私の場合、もうかれこれあの子の5倍
近くは人生を生きていますけど、
今だメダルの一つも貰ったこともない人間ですが、、
それが何か。(汗)
けど、観ましたか?
その一方で、58歳のルクセンブルグの卓球選手。
若い選手が卓球台の周り駆けまわっている中にあって、
あの人の動きは、正に「すり足」の、横移動だけです。
彼女、惜しくも1回戦で若い相手に負けてはしましたですが、
それでも、結構強かった!
まさに、”熟年の技”いいますか、”年の功”いいますか、
自分の年齢での戦い方をよく知っているわけですね。
で、ここからが今日の本題です。
そのコツ、「スポーツ」でも、「マクロ」でも、一緒だと、
わたし思うんです。
ここの読者の皆さん、特に中高年の(これ書いてる私と
同年代の・・・)高年齢の人が圧倒的に多いわけなんですけど、
だからと言う訳ではないですけれど、
少々頭の回転が鈍くなって来た(!?)中高年者でも
十分にできる方法で、いわば「すり足」で、
のマクロ作りを、このメルマガ講座ではかれこれ
17年間に渡り、教えてきたわけなんです。
よその講座でマクロの勉強経験のある方なら、
他のVBA講座と比べて頂ければよくわかるように
この講座は、至って省力です。
難しい横文字の専門用語を覚えることもしませんし、
やれオブジェクトだとか、メソットだとか、
そんなものも一切出てきません。
そんなものは無しでも、最大限のExcel自動化に
力発揮できる方法を、私の35年のSE経験から
(マクロ歴で言うと30年の経験から)、
あの58歳の卓球選手が、
若い選手のように激しく動き回らなくてもいい方法を、
極力小力で、体力、知力を抑えながら
マクロが組める方法論を駆使して、
長年のシステム開発の現場にて養った私の経験を
フル活用させて構築してきたマクロ作りの
その方法を、ここで教えて来ました次第です。
殆どのVBA先生の教え方は、卓球台の周りを激しく
動きまわって球打つスタイルの若い人向けであり
ますから、ネットを見ればみな何処も体力を必要
とするやり方ばかりですけれど、
中高年の卓球選手はそうは動けませんから、
動けないなりの戦い方いうのがあるわけです。
彼女は、それを 良ーーーく わきまえている!
サッカーでもそうです。
五輪代表のストライカーでもゴール前の絶好球を
思いっきり蹴ってしまって失敗する。。。
いわゆる、昔から言われる決定力不足ですね。
けど、今話題のあのメッシはゴール前で決める
シュートの殆どが、ただ相手ゴールキーパーの
居ない所に流し込むだけ、です。
超一流のメッシは、二流か三流のストライカーのように
豪快で奇麗でカッコいいゴールを決めようとは、
決してしないわけです。
ムダな動きと、確実性を欠いた動きはしない。
する必要もない。
それを良くわかっているか否か言うのが、一流と
そうはなれない二流、三流との大きな差である
と思います。
また、今大会で日本人第1号の金メダルを取った柔道の
高藤選手は、決勝戦では、相手の反則3回で勝利しました。
試合後のインタビューで、
「豪快に勝つことはできなかったけど、これが僕の柔道だ!」
と胸を張った。
奇麗な1本勝ちではなく、”泥臭く勝つ”のが自分の戦い方だ
と胸を張ればいいわけです。
マクロの場合でも、どうしても少々なれてくると、
「もっと奇麗に書きたい、スマートに書きたい、」
と、そう言い出す人が多いわけですけれども、、
「泥臭いマクロを書く」それの何が悪いのか?!
中・上級者になっても自分の泥臭く書くスタイルをつらぬいて
いける人の方が、どんどんマクロは作れますし、
成長もしていけますことは、私の長年の教えてきた験則からも、
それは確かな事実です。
見栄を張って背伸びをして、スマートに書こうする必要なんか
どこにも無いです。
超一流サッカー選手のメッシは、スマートなゴールなんか決して
狙っちゃいません。確実に点の取れる方法で、ゴールを狙う、
結果の残せるやり方を知っている。
それは、サッカーでも、マクロでも、全く同じです。
マクロも、メッシのゴールを見習って行きましょう!
それでは、本日のまとめです。
・中高年には中高年の勝ち方がある!
・泥臭く、自分のスタイルを貫く人こそ、
結果は残せる!
以上です。
なお、
下記はこれに関連した私のブログの関連記事になります。
特に初級者から中級者へ向かってる方は、こちらも是非
ご参考にしてください。
■必見!「マクロの上達を阻む原因」とは・・・(三太郎のブログ)
人間誰しも、40過ぎた歳になってきますとそう考えて、
マクロを勉強したくなる人も多くなる(!?)と耳にします。
私、以前から書いていますように、
毎朝マクロでネット情報の自動収集をやっていますので、
収集している各種の情報の中でも、ExcelやマクロやVBAに
ついて、ブログやらツイッターやらFBやらで世間の人が
何かつぶやいてる様というのが、毎日、手に取るように
わかるわけです。
それで、最近のその傾向として、
「やっぱ、次勉強するならエクセルのマクロだよなぁ~」
の人が、大変多くなってきている気がしています。
例えば、最近の流行りだとRPAってあるじゃないですか。
RPAって、ロボットでパソコン操作を自動化する為の
ソフトウェアというものですが、大企業にお勤めの人だと、
自分の会社でもそれ導入し始めた言う人も多いかも
知れません。
要は、その目的はマクロと一緒で、PC業務の効率化、
自動化でありますから、ある意味、マクロとRPAってのは
「ライバル関係」にある思われがちなわけですけれども、、
けれど、私思いますに、
真っ当な情報システム部門のある会社であれば、
間違ってもRPAなんてものを導入する事はしないだろうー
って思うんです。
(まぁ、経営側からの圧力はあるにせよ・・・です。)
つまり、それだと社員がどんどんバカになっていく・・・
(失礼!)、そうとしか思えないからです。
そもそも、コンピュータっていうのは、
「使う側」と「使われる側」があるわけです。
他人の作ったソフトの使用方法をせっせと覚えて、
「私、このソフト使いこなしてる!」って、
そう思ってる人は、スマホやExcelユーザーにも
多いかとは思いますが、、(笑)
でもそれは、
ただそのソフトにあなたが逆に使われてるだけなので、
誰か他人が作ったソフトの操作方法をひたすら覚えて、
その通りに使ってる(ソフトに操られてる!)という
だけなのです。
コンピュータを使う、つまり、自分の思い通りに
パソコンに仕事をさせる、その為の手段と言うのは、
唯一、プログラミングしかありません。
だから、
Excelでマクロにしろ、プログラミングが何もできない
でただ他人の作ったソフトに頼っている限り、
あなたは使われてる使用人に過ぎない・・・、という
コンピュータとの関係にあるのです。
プログラミングが多少なりとできるようになると、
あれやれ!これやれ!とあなたが上司となって、
自分の思い通りにパソコンに指示が出せるわけです。
すなわち、
その指示書いうのがプログラミングのコードになる
わけで、このメルマガで勉強しているExcelの場合、
それがすなわち、VBAで書いたコードになります。
要するに、RPAなどのソフトの使い方を覚えるのは、
ただの記憶力の問題ですがプログラミング(マクロ)
は「思考力」ですから、
それで、
世界一の大富豪になったあのビル・ゲイツも、
iPhone生みの親のスティーブ・ジョブズも、
Facebook創設者のザッカーバーグも、
Amazon創設者のジェフ・ベゾスも、
元々は皆、プログラマーだったわけです。
プログラミングで思考力を身に付けて、我が物顔に
ITを動かすことが出来るようなったお陰ですね。
(たぶん!)
それゆえに、
ただそうしたソフトの使い方を一生懸命に覚えて、
パソコンにただ使われてる人だらけの会社は、、
そうゆう会社は、だから先ほど社員はどんどんバカ
になっていく・・・だなんて、ちょっと失礼なこと
を言ってしまいましたですが、、
事実、益々思考力が身に付かない、社員をIT弱者に
導く方向に経営している、と言うことにもなってる
思うわけです。
少なくとも、そういうことまでちゃんと分かってる
経営者なり、システム部門のある会社であれば、、
間違ってもマクロとRPAを比較して、RPAの方を選ぶ
だなんて馬鹿げたことはしないだろちうと私、個人
的にはそう思っています。
あまけに、RPAソフトというのは使用料がバカ高い
と聞きますけど、Excelで、マクロの利用料は全部
タダです。Excelの購入費用以外には一円も掛かり
ません。
加えて、導入・構築にも多大な時間と手間が掛かる
とのことで、マクロを習得するより遥かに多くの
労力掛けてるようで、可也大変そうです。
マクロも、大変なやり方で勉強すると確かに大変で、
理解するには時間も掛かるわけではありますが、
けど、賢いやり方を勉強すれば賢く、短時間でも
やれるものです。
先日、三太郎アカデミーのある生徒さんがその辺を
うまく言葉にしてくれましたので、読者の皆さん
にもこれをシェアしたい思います。
以下は、「マクロの記録」を使うすべき理由に
ついてです。
1、記録から一般化する方法を知っていれば難しいことはない。マクロの記録を一般化の糸口を教えていただいているので、以前よりかなり作業が楽しく思えます。
2、ネット検索で出てくるマクロのサンプルは、簡単なことを難しく説明しているのか、要点がよく分からないので、(ムダな時間食うだけでー)見ないほうがいい。
3、余分な言語知識を学ばなくても、要所を押さえればマクロが組めるから、わくわく面白い。
これが、これこそが、本講座の目的と言うか、教え方
言うか、真髄と言うか・・・、なのですが、
これ私、結構長年中々うまい表現の文章が書けなくて
中々ちょっとよく伝わらない、うまく説明できてない、
その感がずっと長らくしていまして、そのジレンマで
原稿何度も丸めて捨てる作家の思いがありました。
アカデミー塾生にこう表現してもらえましたお陰で、
長年喉に痞えた小骨が取れて、やっとスッキリする
ことができました!(笑顔!!)
と言うことなので、
ネットでよく見かける間違った勉強法さえしなければ、
マクロは大丈夫です。
RPAの操作覚えて、見るからにややこしそうな構築過程
を踏んでー、、、よりも確実に簡単で、遥かに時間も
手間も掛かりませんし、思考力も身に付いて賢くも
なれます。それは、私が責任を持って断言します!
但し、それはあくまで間違った方法さえしなければ・・
の話ですから、上記の3項目さえちゃんとわかっていた
ならば、マクロ作りは何も怖いことはないわけです。
逆に、楽しく面白く、なってきます。
このご時世ですし、
40才になった人も、50代で定年まであと何年かの人も、
「このままでいいのか?」と思ったら、
始めるべきは、まずはプログラミングです。
Excelの場合なら、それはマクロです。
60代で老後に何か、の人もぜひ、脳の若さを保つ為
にも、身の回りのデータ整理の実益も兼ねてマクロ
のプログラミングで、思考力を磨きましょう!
それで、コンピュータを自分の思い通りに動かす!
パソコンに仕事させられるのではなく自分が仕事を
させる!その術を、ぜひマクロで身に付けていって
ください。
今日おすすめのコンテンツ
これは古(いにしえ)の昔から、プログラマーが一番
恐れるべきは、いわゆる
”無限ループ”に陥ることだ、と決まっています。
その昔に、スーパーコンピュータという高価な
コンピュータを私が使っていた頃には、
たった1秒、そのコンピュータで何か計算をする
(自分が組んだプログラムを実行させる)という
だけで、3百円程の計算費を課金されたわけです。
当時のスーパーコンピュータのUPUの使用料が、
1秒当たり300円もした、と言うことです。
つまりは、
ほんの10分、自分が組んだプログラムが何らかの
ミスで計算か終わらないで、無限ループに陥って
コンピュータを暴走させてしまうようなことを
させてしまうと、
あっという間に 300円×60秒×10分=18万円もの
お金が一瞬で吹っ飛んでしまうことになるわけです。。
私自身は至って慎重派(!?)な人間でありますから、
そのような失敗経験というのは幸い無かったです
けど、
それで一瞬で、
30万や50万の計算費をすっ飛ばしてしまった・・・
言う失敗話は、先輩方からよく聞かされてました。
最近では、
すっかり安価なパソコンの時代になりましたので、
どんなに長時間のマクロ実行をしてPC暴走させた
としても電気代以外はタダですから、
若いプログラマーのそうしたコスト意識も随分と
薄れてきている中にありまして、
まだ不慣れなプログラミングの初心者に対して、
危険なDo文でループを回すよう教える人も増えて
きましたけれど、、
上記のページに書いてある通りこれは間違いなく、
初心者が使うべきループの回し方いいますのもは、
危険性の高い”Do文”ではなく、
より安全な”For文”であります。
そうゆうことで、
初級者の方が繰り返しのループ処理のプログラム
を組む際には、必ず安全な”For文”を使った
正しい組み方をするよう、ぜひ心してください。
それで、
このメルマガでも私よく言ってきましたけど、
そもそも、「マクロ」本来の使命でもあり、
当メルマガのサブタイトルにもなっている、
「面倒くさ~いルーチンワークを撃退させる」
ということは、言い換えるならばそれは、
「繰り返しの操作を自動化する」
ということに他なりませんですから、
ループ処理というものは、エクセルのマクロを
勉強する上で、最も重要な事柄のひとつです。
それは確かですね。
よって、
”ループ処理を制す者がエクセルマクロを制す”
そう言っても過言ではないですから、古の昔から
この不変で正しいやり方いうのをぜひ身に付ける
ようしてください。
あと、これに関連してのループの話でですが、
下記のブログには、少々専門的なVBAの歴史の話も
書いています。
特に、中級者以上の方で、VBAマクロの歴史もよく
分かってる”通(ツウ)”だなぁ~と思われる
プログラムを書きたい人は、こちらもぜひ読んで
みてくださいネ。
これ知っておくと本当、ツウーですよっ!(笑)
本日のコンテンツは、以上です。
-------------------------
今日おすすめのコンテンツ
-------------------------
エクセルをよく使い慣れた皆さんであれば、
エクセルでセル選択の重要性はよくわかってる
思いますから、
上記のページに書いてあるマクロでのセル選択方法
のあれやこれや、よくこれ押さえおいてくださいね。
ちなみに、
私は、普段の仕事でVBAの開発をする際には、
上記にも出てくる Resize というやつを多用する
ことが多いのですが、
それに更に、その先に出てくる
ActiveCell.Resize
これを使うと、ユーザーの自由度が上がります。
なので、特に他人が使うマクロを作る場合には、
ユーザーの(マクロ使う人の)使い勝手を考えて、
いろいろ選択の仕方を検討してみてください。
世の中のソフトの使い勝手の良し悪し言うのは、
作り手の良し悪し(どれだけ使う人の目線に立って
考えてつくったのかー)、それで決まります!
それと、一つ「裏ワザ」的な話にはなりますが、、
マクロが少々できるようなってきた皆さんは、
上記のページに出てくる Range や Cells という
やつをよく使う思いますけど、
言ってみれば、
Range は縦方向に処理する場合に便利なもので、
Cells は横方向の処理に便利です。
縦方向に処理する場合、
データの数が(行数が)分からない(毎回変わる)
と言った場合に、この講座で何度も何度も繰り返し
勉強してきた「固定を可変に変える」のやり方の、
Range("A2").Select → Range("A" & i).Select
これで、ループの中が単純な変更で済むわけです。
が、これが横方向にデータ数が(列数が)毎回変わる
という場合になりますと、上記のような Range では
可変にはできませんですから、Cells の方を使うこと
になります。
けど、元来、エクセルいうソフトは縦方向の処理に
優れたソフトです。(例えば、オートフィルターは
横方向には処理出来ない、とか。)
それは、Excelがと言うよりもデータベースの宿命事
なので、例えば、DBソフトのAccessで横方向が(項目
数が)その都度可変というデータ構成はないわけです。
Excelの場合は、稀に結構よくある横長の表で、
しかも、列数がその都度変わる表を処理する場合です。
その場合、
作業用のシートを1つ設けて、
そこに元データを縦横入れ替えて貼り付けて、
作業シート上で縦長でーたとして処理をして、
そして元のシートに戻す、
というやり方です。この方法ですと、
横方向には出来ないオートフィルターもできますし、
並べ替えの機能もわざわざオプション設定の必要もなく、
何でも普段通りに(縦長で)処理することが出来る
ようなるわけです。
第一、マクロの記録で書いた Range の部分を
わざわざ Cells に書き直すといった手間も掛かり
ませんから、直し間違えのリスクが減らせます。
手順としては、下記の貼り付け操作にオプションを
指定したコピッペをマクロの記録するだけです。
(×往復2回)
「貼り付け」→ 「形式を選択して貼り付け」→
[行/列の入れ替え]にチェックを入れる。
そうすると、具体的に作ったコードの例で見ると、
(以下は、3行の可変横長データでの例です。)
Sub Macro1()
Sheets("Sheet1").Select
Rows("1:3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
Sub Macro2()
Sheets("Sheet2").Select
普段の縦長データの処理と同じ
End Sub
Sub Macro3()
Sheets("Sheet2").Select
n = Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:C" & n).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
Sub 実行マクロ()
Call Macro1 '横を縦にコピッペする
Call Macro2 '縦方向に普段の処理をする
Call Macro3 '縦を横に戻すコピッペをする
End Sub
こんな具合となりまして、上記の Macro2 の
「縦長データの処理」の中身は、普段と全く同じに、
オートフィルターなど何でも使えるようなるわけです。
ベテランの皆さんで、横長データ、且つ列数が不特定の表を
マクロで処理しなければならない場面がもしありましたら、
この方法、是非お試しあれ!
それは、要するに 時間の掛けどころ というのがわかっていない為です。
・必要のない知識(専門用語や難しい概念など)に多くの"勉強時間"と"脳みそ"を費やしてしまうから・・・
・肝心なマクロ作りの為の勉強やその練習をちっともやっていないから・・・
・堅実に一から自分で組もうとはせず、ネットで捜したサンプルコードを解読して、直して使おうとするから・・・
・VBAの構文が読めるようになれば他人の組んだコードが解読できるとの大きな勘違いをしてしまっているから・・・
いいですか、難しいカタカナ専門用語を理解したからマクロが組めるとか、理解しないから組めない とか、そんな事があるわけがないですから、当講座で奨励しているVBAのBasic調(ベーシック調) での正しいマクロの組み方さえできていれば、ベーシック言語にはオブジェクトだのメソッドだのと言った 類の用語は一切出て来ませんですから、出てこないものは 勉強の必要がありません!
また、プログラムというのは、他人の作ったものを理解して解読するよりも一から 自分で作った方がよっぽど早いというのが、経験あるプロのプログラマーであれば 当たり前の常識事 であるわけです。
要するに、プログラムを読むとは、「プログラムの流れを読む」 ということであって、構文が 読めるということでは全くありません。 プログラミングとは、ロジック(思考の道筋)が8割、言語は2割の世界です。 組んだ本人がどういうロジックを描いて作ったのか? それ知らない限り、余程のプロであっても他人の書いたコードの解読なんて(余程の短いコードでない限り・・)、 他人のコード直しがそうた易く出来るわけがないのです。 他人が組んだ得体の知れない訳のわからんコードに翻弄して、多大な時間を無駄にして終わるだけだからに他なりません!
以上が、多くの人がマクロを組めるようならない、その理由です。世間に出回ってるVBAの常識というのが、どうにもプロの常識とは違うのです。
コードの利用方法で特に重要な点は、一定した書き方のコードを利用する、
ということです。
ネットで捜したサンプルコードは、その書き方も、レベルも、人それぞれ
なので、実にまちまちです。サンプルコード好きの人が陥るのは、その都度
そのまちまちな書き方の構文をいちいち新たに学ぶ必要が生じるからです。
また、同じ人であっても気分によってまちまちに書く事も多いです。ネット
で探したものの殆どは、書き方も、レベルも、皆まちまちで、且つ、初心者
向きのコードでは決してありません!
しかも、これまで何度も言ってきたようにプログラマというのは総じて言うと
みなプライドが高く見栄っ張りな性分がありますので、
素人に簡単に理解されてしまうようなコードを書いて公開したりはしません。
わざわざ難しい表現を使って、自分の実力を(自分がいかに難しい書き方を
知っているのかということを)誇示するために公開するものです。
その点、「マクロの記録」で記録されるコードというのはいつでも一定です。
同じ操作をすれば必ず同じコードを書いてくれますし、初心者レベルで一番
やさしい書き方でいつも書いてくれます。それが機械のよいところです。
人間のような変なプライドや見栄や策略めいたものは一切ありませんので、
安心です。
「よく使う文字列操作の標準関数一覧」のいの一番に挙げてるのが、
「Trim関数」・・・文字データの目に見えない前後のゴミを取り除く
というものです。
私は言ってみればプロの本社区のプログラマーですので、特にこの関数をよく頻繁に使います。
数あるVBA標準関数の中でも、一番によくこれを使ってる言っていいかと思います。
つまり、これは具体的には
a = ActiveCell.Value
If a = "三太郎" Then
MsgBox "私です!"
End If
といったコードを書いたとします。
けど、もしここの変数の a に入る ActiveCell.Value(選択セルの値)が、
ActiveCell.Value = " 三太郎"
だったり、
ActiveCell.Value = "三太郎 "
だったりした場合には、このメッセージボックスの
MsgBox "私です!"
は、表示されないことになります。特にこの下方の
ActiveCell.Value = "三太郎 "
の方は、セルのデータとして見た場合、見た目には全くこれはわかりませんから、気づきません。
加えて、何万行もある大量データのシートの中にこれあったら、絶対にこれは(お尻に空白文字が詰まってる)気づけませんよね!?
なので、上記の様なコードを組む際に、
a = Trim(ActiveCell.Value)
If a = "三太郎" Then
MsgBox "私です!"
End If
とします。
私はプロの職業プログラマーですから、お客様の(ソフト開発依頼主の会社の)データを扱うプログラムを日夜組むのを本業の仕事としていますから、
このコードの様に、仕事で組むマクロ作りでのデータ取得時には、必ずこのTrim関数を噛ませるようしているわけです。
依頼主の会社のデータ、すなわち他人のデータ、(すなわち自分では保障できない不確かなデータ)を扱うことが多いからです。
自分や自分の会社のデータだけを主に扱う皆さんの場合は、言ってみればそれは確かなデータ(たぶん!)ですから、これは特に噛まさなくても全然大丈夫とは思いますが、
他人のデータは自分には何の保障も確証もないわけですから、言ってみればその全てが不確実なデータと言えます。
私の30有余年に渡るシステム屋の経験則から言いますとですが、「このデータには絶対まちがえはない!」そう言い切る顧客のデータほど、いい加減なものが多いです。(笑)
なので皆さんも、
例えば、普段からちょっと信用できなそうな取引先から毎月来る怪しいデータや、仲の悪い隣の部署の担当者からもらったデータやー、など扱うマクロを作る際には、
ちょっとこのひと手間を加えて、
a = ActiveCell.Value
↓
a = Trim(ActiveCell.Value)
こう書く習慣を付けておくのがよいかと思います。
基本、他人は信用できません!ですから(笑) 人を見たらドロボーと思え、じゃないですけれど、
他人のデータを見たら、何かしらの不備や欠陥はあるものと思え!ですね。
特に、厳密さが売り物のプログラマー職の心得としてはそのようになりますので、自分や自分の会社の確かなデータだけ扱ってる人以外の人は、文字データの取得時になるべくこのTrim()というのを意識して入れておく、そうしてください。
Excelの場合、それはセルからのデータ取得時だけの話ですから、それさえやっておけば、あとはその変数を使い回す度に、前回も言いましたいちいち
If a Like "*経理部*" Then
って、このようなちょっと書き間違いをし易い書き方はしなくても、
If a = "三太郎" Then
だけで、毎回すっきり済むようなるわけです。
言うなれば、
これはプログラミングでの「リスク管理」にもなりますので、このコロナ時代もそうですが、会社でも個人でも、この様なリスクヘッジの考え方いうのは今後ますます重要になってくるかと思います。