本日は、来月の検定に向けまして、正しいマクロ作りの基本を いま一度、しっかりとおさらいしてみたいと思います。 今回の「初級マクロ検定」受験予定者の皆さんは元より、 受験申し込みのない方も是非、これは参考に、以下は読んで みてください。 それで、もうベテラン読者の皆さんであれば重々ご承知の事 とは思いますが、 当講座での「マクロ作りの勉強」の仕方といいますのは 詰まるところ、 1.基本のワンパターンを知ること 2.そのパターンを繰り返し練習すること 3.作る手順をアレンジして応用すること この3つです。 この3つを、当講座では誰でも出来るレッスン形式にて これら学んでいくことで、 他人の作ったサンプルコードに頼ることなく、 一から自分でマクロが組めて、応用までできるように なっていきます。 この辺は、皆さんもうよろしいですよね。 初級の「マクロ検定」では、毎回、解答提出の制限時間を 60分に設けていますから、これに合格するには短時間で 与えられた課題のマクロを完成させる必要があります。 ネットで似た様なサンプルコードを探す暇も、 それを読み解くという暇な事やる時間というのも、 まったくありません!(笑) また、上記3つをしっかりマスターすれば、 そのような、いかにも他力本願な「サンプルコード拾い」 なんかをやらなくて済む実力が、必然的に身に付きます。 それが、素早く、且つ、確実に、 自分でマクロが作れるようになるコツと言いますか、 作る前からどれくらいの時間が掛かるのか予め読めるようにも なりますから、間違いのないこれが"王道"と言えます。 そうすると、 下記のような、一見、しごく難しそうに見えてとても60分 の制限時間内では完成できそうもない問題でも、過去の初級 受験者の皆さんの平均で解答提出時間は30分台で、正答率も 6割前後あります。 これまでの最速記録では(問題読んで、マクロ組んで、実行 テストをして、解答メールを送信するまでを全部含めて、) その間、わずか16分です! ■過去の出題とサンプルデータ このように、上記3つを身につけた人は至って短時間で的確に、 この程度の初級レベルのマクロであれば、至って素早く組める ようになります。 マクロというのは詰まるところ、「時短」を実現する為の 道具に過ぎませんですから、 そもそもが、その「時短」の為の道具作りに、しこたまの 時間が掛かってしまうようでは、それはまさしく本末転倒 としか言いようがありません。 その意味で、「初級マクロ検定」の制限時間は60分です。 真に実力を試す検定にこのような時間制限を設ける意義、 皆さんもうよろしいですね。 それで、 この3つの中で一番重要なポイントとなりますのは、 それはやはり間違いなく、「応用」です。 これは正確に言えば、「応用ができるようになる。」 ということに尽きる思います。 当然ながら、 組みたいマクロは十人十色、百人百色、千人千色、人それぞれ、 扱うExcelのデータも人それぞれで 多種多様であるわけですから、 応用ができなければ(自分用のマクロが組めなければ・・・) マクロを勉強する意味は、まったくありません! 当講座のメルマガ読者の皆さんは女性の方が多いですから、 よく私、マクロ作りを料理に例えて話をしますが、、 何か料理を作りたいという時に、 ネットで『食べログ』見ながら料理作るって人、いますか? 居ませんよね。(笑) そうです、自分で何か料理が作りたいのであれば 『食べログ』ではなくて『クックパッド』を見るわけです。 『クックパッド』のサイトには、色々な料理の作り方の 詳しい手順(レシピ)というのが載っているわけです。 一方の『食べログ』では、 お店のシェフが作った美味しそうな料理の写真と、それを 食べた人達の感想や星印を見て、自分でその料理が作れる わけがありません。 同じ料理関係のサイトでも、この両者は全く目的の異なる ものですね。(作りたい人と食べたい人の違い。。) けれど、 マクロの場合、残念ながらそんな基本的な違いに気付かずに 大間違いをしてしまってる人が、いかにも大勢居るわけです。 マクロの場合、我々は作り手の方を目指さないとなりません! 多くの間違った人が、ネットで拾ってきたサンプルコードを、 それ理解して、直して使おうとします。 そこに、作り方の手順(レシピ)というのは載っていますか? どこにもありませんよね。『食べログ』にそれはありません。 だから当然、作れるわけがありません! 完成後の写真(サンプルコード)とその食べた感想(事後の コード解説)だけのWebサイトや、不親切な筆者の書いた VBA本を参考にしたところで、 料理も、マクロも、作れはしないです。(当たり前ですよね。) 一方で、『クックパッド』を見れば、 人気料理のページの下の方には、沢山のそこに載っている レシピをマネて自分で作ってみましたという、 『みんなのつくりましたフォトレポート「つくれぽ」』 という読者投稿写真が、ずらーっと載っている思いますが、 (料理好きな方ならよくご存じかと思います。) その写真の多くが、色も形も元のとはどうも見た目違う
あたかも別の料理(!?)の様にも見えるものになっていたりする 投稿写真も多々見受けられるかと思います。(笑) 要するに、 詳細なレシピ(作る手順)がわかると、皆がそれぞれに、 それを真似て作った”我が家の味”にアレンジすることが 容易にできるから・・・、と思います。 マクロの場合でも、これはまったく同じです。 大切なことは、自分用にアレンジのできる元のレシピ (詳しい作り方の手順)があるかどうか、です。
その元レシピというのは、誰でも、料理初心者でも誰でもが、
それを見ただけでその料理が作れるほど詳しく、詳細に
作り方の手順が記載されている、という必要があるわけです。
その作る過程の手順のいくつかを自分用にアレンジする ことで我が家の味が色々作れるように応用できるという わけです。「詳しいレシピがあればこそ!」です。 「完成後のサンプルコード+その事後解説」だけで、 応用はできません! それは、『食べログ』でシェフが作った料理の写真と 食べた人の感想を見ながらその料理を作ろうとする行為 に他ならないからです。(そんな難しい事が出来る人は そうそう滅多には居ませんよね?) それで、 『クックパッド』で下方の「つくれぽ」によく投稿する 人達って、多分その内に、自分でもオリジナルの元レシピ の方も投稿するようになっていくものじゃないですか? アレンジ繰り返していくと、新たな自分発想の料理レシピ のアイデアも思いつくようになっていくわけですね。 まさしく、マクロの目指すところも、それと一緒です! 当講座のレッスンは、そうしたマクロ作りの詳しいレシピ というものをこれまで14年間の間に、たくさん沢山、 提供し続けて来たわけです。(その数、クックパッドには 到底遠く及びはしませんが、14年分のレシピがあります!) だからこそ、 誰でも皆が「応用」できるようになっていく 「つくれぽ」&「元レシピの投稿」まで、 皆が出来る人となっていくわけであります。 この辺が一番の味噌ですね! 繰り返しになりますが、 当講座で長年教えて来ました「簡単にマクロを組む」為の 極意とは、 1.基本のワンパターンを知って、 2.そのパターンを繰り返し繰り返し練習して、 3.作る手順のレシピをアレンジして応用する。 これに尽きるわけです。皆さん、よろしいですね。 間違っても、 オブジェクトがどうだとか、メソッドの意味はこうだとか、 そうした無意味な方向に走ってしまわぬよう、くれぐれも ご注意くださいね。(ネットやVBA本は間違いだらけ!!!) これまで大勢の方々の協力を得まして、かれこれ14年間もの 歳月を掛けて、この勉強法の検証を繰り返してきましたので、 この素早く確実に作るやり方の正しさ言うのは、このわたくし 三太郎が保証しますよ!! なお、次回にもう少しこれらの3つの中身については 掘り下げて詳しく解説してみたいと思いますので、 この「より素早く!確実に!マクロが組める方法」というもの を、来月の検定を受験される方もしない方も、この理解をより 深めて行ってもらいたく思っています。
これです。
といっても、
これは熊本城再建の為の寄付を1万円以上した人なら誰でも城主になれる
というものでありますので、
先日、熊本から自宅に送られてきたその証明書になります。
返す返すも、熊本城再建は私にとっても悲願です。
でないと、ご先祖様に申し訳が立ちません!
もし、お金があったら私、これに5百億円寄付します!
(もしあったら・・・、の話です。(笑))
冗談はさて置き、皆さまの善意とご協力も是非賜りたく、
よろしくお願いします。
→ 【公式】熊本城復興城主(外部リンク)
私、今月で満56歳を迎えまして、もう既に「アラ還(!?)」です。体も、あっちこっちにきしみが出てきて、痛いです。。(笑)
それで、誕生日を迎えるにあたりまして、当講座の【三太郎のプロフィール】を更新することにしました!
++++++++++ 更新内容は、以下です。
私は、IT業界歴がもうかれこれ30年、コンピュータ業界にどっぷり漬かってうらのウラの裏まで知り尽くす、超ベテランの現役SE(システムエンジニア)です。1部上場の大手情報処理会社でプロジェクトマネージャーを4年間経験し、
最近の話題で言うと、台風でタンカー衝突事故があったあの関西空港の給油
システムの基本設計を担当し7社のコンペにて(総開発費が3億円規模の案件を)
見事に受注。また、先日ノーベル医学賞を受賞された本庶先生も所属する京大大学院医学研究科の医療情報分野(研究室)との間で、3か年の産学共同研究を実施するなど、
経験と技術力の高さだけは、、確か!です。(自称です。笑)
その傍らで、若手プログラマーの育成にも携わり、富士通ラーニングメディアでメイン講師を約8年間、現場や新人研修でこれまでに育てて来たプロのプログラマーは500人以上、実施したプログラムレビューは実に1万回以上にも及びます。
そもそも、私がExcelのマクロというものを教えるようになったきっかけいうのが、システム開発で出かけていく客先の現場で、そこでPC事務をやっている人達が見るからに面倒くさそーなExcelの作業を皆、黙々と何時間も掛けて、延々とやり続けている姿を頻繁に目にしていたからです。
元来、人一倍面倒くさがり屋だった私は、そうした人を見る度に、「これって、マクロ組んでやったら一発ですよー!!」って言うと、「えっ!マクロ?そんなのムリ!!」って、100人中100人からそうした返事が返ってくるといった状況でした。
が、そんなある日、ある取引先のベンチャー企業の社長さんから、「私にもその簡単なマクロの組み方いうのを教えてくれ!」と言われまして、主にメールで でしたがお教えしたわけです。
すると、3カ月も経たない内にその会社の殆どのデータ集計が自動化してしまって教えた方の私も驚くような成果となりまして、その社長さんからも「おかげで、我が社の経営スピードが飛躍的に上がったよ。本当ありがとう!」と、大そう感謝をされました。
それで、そうした初心者向けにメルマガ配信するマクロ講座のというのを2004年に開始して、今では、まぐまぐの読者登録数は1万人超、YouTubeで公開した動画も再生回数30万回を超えるまでになりました。
++++++++++ 更新したプロフィールのコピーは、ここまで。
それで、このプロフィールで一つ問題点(!?)なのが、、
これは以前にもメルマガでも白状しましたですが、これまでのプロフィールでは、少々年齢的なサバを読んで業界歴は”25年”だと言い続けてきましたわけなんですが(笑)、
普通、自分のプロフィールいうの未熟な人ほど盛って、過大に見せようする人が多い思うわけですが、もう私のようなベテランになりますと、逆に経験はなるべく少なく、控え目に見せたくなるというものですから、、
でも、そろそろ私も(後もう数年でー)経歴35年を迎えてしまいます為、サバの読みすぎにも程がある?(笑)、ということで、改めてしばらくは”この道30年”を名乗っていこうか・・・、と思っています。
いずれにしましても、余ほどの何か手先の器用な職人さんであれば(人間国宝の木工職人とか・・)この道50年言うのも有り(拍が付く)というものでありますが、、
ただ、コンピュータの世界で”経歴30年”とか”35年”と書いてしまうと、やはり可なり重たく感じやしないか・・・と。やっぱ、経歴は25年のままにしてサバ読み続けようかどうしようか?と今迷っている、今日この頃であります 。(笑)
まあ、他人のプロフなんてものは誰も真剣に読みはしませんから(笑)、これはどうでもいい話なのは、確か!ですね。
それにしても、最近わたしが実に衝撃的だった話題いうのが、
あの「ジュリ~ ♪」のドタキャン騒動ですね。
くしくも、ドラマでそう叫んでいた樹木希林さんが先日お亡くなりに
なった矢先に、あのスーパースターの代名詞だった沢田研二さんですら、
70歳になった今となってはアリーナに9千人すら集客する実力は自分に
無いと言い切る、ジュリーのあの会見の姿を目の当たりにしまして、
思わず「ジュリ~ ♪」と叫びたくなってしまうぐらいに、
我々世代には実に衝撃的な出来事でした。
でも、何かのイベントを主宰したことのある経験者なら誰でもわかる
思いますが、色んな意味で集客(人を集める事)ってのは、ほんと
大変な話ですから、約束守れなかったイベンターの苦悩もわかる気が
しますし、ジュリーのプライドもわかるし、みたいな何とも複雑で
心が痛む感じがします。
それで、エクセル関係のセミナーなんかでもそうですが、
ネット上でいつも満席(あたかも人気のあるセミナーだと・・・)装って
集客しようする業者って見かけるかと思いますが、実際行けばいつでも
「スカスカ」ガラガラ ですね。(笑)
第一、本当にいつも行列満席のセミナーであるならばネットに広告なんか、
誰も出すわけありませんから!(又笑)
中には、再受講無料を謳って参加人数をかさ上げしてる所もある
ようですが、無料だからと言ってそうした偽装系のセミナーに
何度行ったところで、(客を騙す気持ちのある人から何回同じこと
教わっても・・)所詮、ダメなものはダメなんですから、、
無料の再受講へ行ったら、自分の前も後ろも右も左も、みんな同じ
無料の再受講者だらけだった・・・、ってな笑い話を(笑えない話を・・)
聞いたこともありますので、、
それは、まったくの時間とお金のムダなだけ、ですよね。
そうしたExcel系で横行している見え透いた嘘ついて集客繰り返す
高額なセミナー業者いうものには、くれぐれも騙されぬよう、
みなさん気を付けましょうね。
世の中は何事にも、単純に、常識的に考えたら分かることでも、
いざ、VBAのプログラミングになると、なぜだか常識外れのおかしな
考え方に陥ってしまう人が多くありますので、要注意です!
それで、IT業界歴25年、システム開発の裏の裏まで知り尽くした
ベテランSE(システムエンジニア)の私から言わせますと、
VBA界隈でよく言われている誤った常識の多さには前々から、
どうにも違和感を感じています。
2020年から全国の小学校では英語と共にプログラミングが必修科目
となるという日が、もうすぐそこまで迫って来ているわけですが、、
正直、このまま行くといづれはVBAで蔓延する可笑しな常識いうのが
小学生にさえも笑い者になってしまいかねない事態だと、
そんな危機感を持っています。
と言うか、今でも既にもう情報処理試験に合格するような優秀な
中学生プログラマーの間では、VBAが失笑されているとか・・・。
そう聞いていますので、これは早急に正していかないといけないな
と思っている次第です。
中でも、そんなVBA界隈の間違った常識で一番多い思いますのが
「変数名宣言の強制オプション」というものです。これの勘違いが
非常に多い。。
いいですかっ!
世の中のマクロ言語で(VBAも含めて)、変数名の宣言が強制
される言語というものは、ただの一つもありません!
VBAの場合にも、それはただの「オプション」に過ぎません。
Excelの歴代のバージョンでも、出荷時のデフォルト設定では必ず
OFFです。VBAはマクロの言語ですから、これは当然です。
ついでに言うと、以前にも言いましたVBAのお父さんに当たる
BASIC言語でも、そのまたお父さん(祖父)のFortran言語でも、
変数名の宣言いうのはまったく強制されるものではありません。
ついでに言うと、今、プロのプログラマーから一番人気の高い
言語であるPython(パイソン)という言語においても、そのよう
な強制はありません。それが、世の中の当然の流れであります。
ハードウェアの性能が著しく向上してきた今、昔ながらのDIM宣言
(即ち、dimensionでの領域確保)というものは、特に、マクロ
の言語(即ち、for Applications)においては、もはや、無用の
長物だと言っても過言ではない思います。(それ故に、VBAでの
Dim宣言いうのは「日付型」だけで十分だと、私は常々からそう
言っています。)
にも関わらずです、
本来、そのような強制をされるはずのないマクロ言語の一つである
VBA界隈だけで、そのようなマクロの歴史も知らないし時代錯誤
だし、な誤った認識が蔓延してしまったのか?
これは、全く持って由々しき事態だと思っています。
ちなみにですが、未だマクロ始めてないで知らない方も居るかと
思いますので念のため説明しておきますと、
「変数」とは、プログラム上のデータを入れておく為の箱で、
「変数名」とは、その箱につける名前のことで、
「変数宣言の強制」とは、こちらの「エラー対処方法」の
Webページ をご覧ください。
で ここで、皆さんに問いたい思います。
変数名の強制オプションは使ってはいけません!
その理由がわかりますか?
これ、知らずにネットや参考書やセミナー等で誰かが振りまいてる
間違った入れ知恵を信じてしまって、
間違ったオプション使う設定をしてしまっている人が非常にこれは
多く居る、困った事態となっています。
なぜそれやってはいけないのか、今回はその理由の一つを詳しく
解説してみます。(理由沢山ある中の、まずはその一つ目です。)
それで、話はちょっとそれますが、
先日私、ちょっと歯が痛みまして実に10数年ぶりで歯医者さんへ
行ったんですが、
診察待つ間に暇だったので、待合室に置いてあった普段は決して
見る事のないビジネス雑誌を手に取って、何気なしにペラペラと
めくっていましたら、その中に
「できるビジネスマン10の習慣」
というタイトルだったかの特集記事というのが載っていまして、
1位は何かな?思って、その記事ちょっと読んでみましたところ、
その習慣の第1位に書いてあったのが、
「メールの相手の名前は必ずコピッペする。」
だったんです。
私としてはそれ、何も「できるビジネスマン」じゃなくても
それはごく常識的な、至って当たり前の話と思っていましたから、
有名雑誌の特集にわざわざこれ載せる程の話なのかな・・・?
とちょっと思った次第です。ですよね!?
要するに、それしない人だと(できないビジネスマンだと・・)
たとえば、相手の名前の「中田様」を「田中様」と打ち間違えて
メール送ってしまったりするわけですから、これは・・・大変に
危険行為ですね。ビジネスの世界では決してあってはならない、
実に恐ろしいミスです。。
そう言えば、以前に私にも、
「三四郎さん、いつもメルマガ読んでます!」ってなメールを
頂戴したことがありましたですが、、
うむ、「三四郎?」
このブログでもメルマガでも、これだけ毎回、三太郎、三太郎、と
わたし何度も何度も連呼して書いているにもかかわらずですよ、
それでもなお、私を「三四郎」って呼ぶ人があるわけです。(笑)
そうです、
人間いうのは、打ち間違えなどのタイプミスに加えて
「中田さんを田中さん」だったり、「三太郎を三四郎」だったり、
そのようなちょっとした勘違いが実に多い、間違うのが性分の
生き物であるわけですね。
それ故に、Excelデータの整理は間違えや勘違いは絶対にしない
機械で(マクロのプログラムを組んで)処理するというのが良いと
言い続けて来ましたわけです。
私の場合は実に温厚な人間(!?)ですから、名前を間違われた
くらいでは決して怒ったり気分を害したりはしませんですが、
その時の返事は、普段よりは気持ち短めの(そっけのない?)
メールをお返ししたかと記憶しています。(笑)
そういうことですから、
メルマガ筆者宛への感想メールであるなら間違っても大した
問題はないわけですが、これが、大切なお客様へとか、微妙
な関係の相手へとかだと、いきなりのメール冒頭での名前間違え
というのは致命傷(本文の内容の如何に関わらず・・・)、
著しく心証悪くしますので、間違いなく"アウト"ですよね。
だから、
必ず、メールの相手の名前いうのは、相手が自分でサインを
して書いてきた名前の部分からコピッペをする。
それは何も「できるビジネスマン」に限らずの、ごく常識的
な誰もの習慣なんだろうと、私はそう思っている次第です。
ですよね?
で、
それは何もメールを書く時に限った話ではありませんから、
プログラミングの場合でも、これは全く同様です。
要するに、
絶対間違ってはならない「変数名は必ずコピッペする。」
というのが、間違いなく「できるプログラマー」の常識中
の常識だと思います。
困ったことに、VBA界隈ではそのような変数名のタイプ
ミスを防ぐ為に「変数名宣言の強制オプションを付けろ!」
言ってる勘違いが非常に多く見られるワケなんですが、
それは間違いなく「できないプログラマー」の象徴ですね。
できる人は必ず、間違っちゃいけない名前の部分は
(メールの相手の名前でも、プログラムの変数の名前でも)
「コピッペする」ものです。できる人なら、その習慣は
誰でも皆しっかり身に付いてる思います。
そんな、VBA界隈には多い「できないプログラマー」の
勘違いをうのみにして、変数名宣言の強制オプションを
ONに設定してしまってる人は居ませんか?
もし、心当たりのある人は直ちにExcel開いて、デフォルト
のOFFの状態に戻してください。OFFですよ、OFF!
出荷時にデフォルトで設定されている通りの「OFF」です。
ちなみに、このオプションの正しいデフォルト設定への
戻し方も先ほどの こちらのページ にあります。
それで、そのような「できないプログラマー」のマネをして、
自分のタイプミスを機械に頼ったやり方をしている人だと、
メールのソフトで相手の名前のチェックなんかいちいち誰も
注意はしてくれませんわけですから、他のソフトの使用時に
必ず痛い失敗をする事になるわけです。だから絶対、名前の
チェックを「機械任せ」なんかにしたらいけません!
なので、名前は(メールの相手名も、プログラムの変数名も、)
必ずコピッペする癖というのを付けておくようにしてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ある一部のソフトだけに特有の機械的なチェックに頼っていると
よそでもっと大きな痛い目に遭いますよ!!
これも以前にも書きましたが、
人間、キーボードで手打ちをすれば必ず打ち間違えはするもの
です。タイピングがプロのデータ入力代行業者であっても、
保証される正打率(正しくタイピングする確率)は精々95%に
過ぎません。入力のプロでも100文字打てば5文字は間違う。。
なので、タイピングのプロでもない我々一般人は、仮にその
正打率が80%とすれば、5文字に1文字はミスをすることになる
わけなんですから、
これは、前回のスッキリ書きたいという話と同じで、自分の能力
を過信して(自分は絶対タイプミスはしない)思う方が間違いで
あるわけですね。何か実行結果がおかしいなと思ったら、まずは
自分のタイプミスを疑って、それ確認をすればいいというだけの
話です。
5文字以上の長い変数名を付けたのならば、必ずミスあると
思わないといけませんから、変数名はコピッペして使い回す
いうのが、間違いなく「できるプログラマー」の当たり前の
常識事であります。何でもかんでも強制する理由など、毛頭
ありません。
他のマクロ言語には、そのようなチェック機能いうのはありま
せん。自分自身でちゃんとそれチェックのできる当たり前の人
になってください。それ、他人(機械)任せに慣れてしまうよ
うだと、「できないビジネスマン」や「欠陥プログラマー」と
なってしまうだけですね。
繰り返しになりますが、変数名をタイプミスしたか、ミスして
ないか、それは自分自身でチェックできるようにならなければ
なりません!
それが、プログラマーのごくごくごく、常識事である言うのは
確かです。皆さん、よろしいですね。
あなたが使っているあらゆるソフトにも、そんな名前のタイプ
ミス、チェックをしてくれる機能が必ず付いているいうので
あればまだしもですが、メモ帳でも、メールソフトでも、他の
マクロ言語でも、殆ど全てのソフトにそんなチェック機能など
付いてはいません。
ワードには(Excelのオプションにも)スペルチェック機能は
ありますが、そもそもがあんな機能(スペル間違ってると機械
が判断すると赤い波線みたいのが勝手に表示されてしまう機能)
あれって必要ですか?余計なお世話じゃないですか!?(笑)
前回の話の「文章はスッキリと」と同様に、
まず自分を過信しない事、常識的に考えたタイプミスの防衛策
いうのは「名前はコピッペする。」できるビジネスマンでも
できるプログラマーでも、それしかない思います。
はっきり言いますが、残念ながらVBAの場合、
「タイプミスやスペルチェックの為に変数強制オプションを
付けろ!」と言っている、そのようなできるプログラマーに
あるまじき勘違いが非常に蔓延してしまっていますから、、
只でさえ下に見られがちな簡易言語のVBAが、プロからは
増々見下される、その原因の一つとなっているというのは、
それは紛れもない事実かと思います。残念です。。
ちょっとした数行や数十行のマクロを組むために(初・中級者
のマクロは全てこの範囲内です。)、変数名定義の強制なんて
Dim i As Long
Dim j As Long
とかですね、必要であるわけがないです。
また、「明示的に Dim は必ず書け!」って言ってる人も居る
思いますけど、、
これも、例えば私のようなプロの場合だと詳細設計書(変数一覧
や領域図など)のドキュメントに書く(明示する)わけなんです
が、素人の皆さんはそこまでやる必要はないですから、
これは、私が指導する場合にはプログラム中にコメント文で
'変数 i は、シート縦方向(行方向)のループカウンター
'変数 j は、シート横方向(列方向)のループカウンター
と書いておく方がずっと明示的で、後々までわかりやすいでしょ。
そう言っています。まぁこれは、
Dim i 'シート縦方向(行方向)のループカウンター
Dim j 'シート横方向(列方向)のループカウンター
これでもよろしいですけど、
少なくとも、要らん「 Option Explicit 」を付けての
Dim i
Dim j
これじゃあ、人間は元より、コンピュータにも何の意味も成しま
せんからね。(コンピュータに変数名の概念は存在しません。)
意味がないどころか、(これはせっかく調子出てきて仕事が波に
乗ってきた矢先に、要らん電話が掛かって来たり、要らん上司に
話しかけられたりのごときに、)この為にせっかくの「プログラ
ミング思考が中断されてしまう」大きなマイナス行為になります。
↑これはほんと重要ですよ!
というわけで、本日は、
「当たり前の正しい習慣を身につけましょう!」
間違ってはならない名前は(メールの相手名もVBAの変数名も)
「必ずコピッペせよ!!」
と言うお話しでした。
本日の「変数名の強制オプションは使ってはいけない理由」、
まずのその一つ目ご理解いただけましたでしょうか?
なお、この理由には他にもまだまだいっぱい、沢山ありますが、
どれもまた話が長ーくなりそうですので(笑)、またいずれ機会
ありましたら書いてみたい(なるべく早めに)と思っています。
ほんと困ったことに、VBA界隈には修行と称して他人にめんど
くさい事をやらせよう、やらせよう、する人が多い思いますが、
私は、マクロでのそれは実にナンセンスだと思います。
なぜならば、
そもそも「面倒くさ~い」を撃退する為にやるのがマクロである
からです。(このメルマガ冒頭のサブタイトルにもあるように)
だから、そのような面倒を好む人はそもそもが「本末転倒で、
マクロの本質が解かってない」としか言いようがない思います。
世の中に数々あるマクロ言語に(VBAはその中の一つ)、
「変数名の宣言を強制される言語」というのは(VBAも含めて)
ただの一つも在りません。当然、在り得ません!
マクロ本来の目的である面倒なコンピュータ操作の自動化が
やりたくてマクロを学んでいる人は、今日お話ししたVBAの
正しい使い方いうのを心してやっていってくださいね。
決して、(VBA界隈の誰かに騙されてー)要らんオプションの
設定をしてしまったりはしないよう、くれぐれもご注意ください。
とにかく、マクロは手軽でなければ意味がありませんから、
そんな仰仰しい設定の強制なんてやってしまったら、絶対に
ダメ!ですよ。
■マクロ作りの基本は動画で学ぼう!
YouTubeの公式チャンネルはこちらです。→ マクロを10分で理解する動画
「Excelの素の機能、何だかんだで強力なので大抵のことはVBAなくてもできる。」
この様な勘違いをしている人はよくある思いますが、、
確かに、Excelの素の機能は色々便利なものがありますけど、それは1回1回処理をするのなら便利なだけで、どれも繰り返せないわけです。
データ数でとか、シート数でとか、ブック数でだとか、
同じ処理を繰り返す&場合分けして分岐処理する
ってなことが、Excelの素の機能では自動では出来ないのが面倒で、時間も掛かるわけですね。
マクロとは詰まるところ、同じ様な処理の繰り返しを自動化するためのものであります。その辺はくれぐれもお間違えなく!
今回は、少々勉強がすすんで来て、ある程度マクロが書けるようになってきた皆さんへ(初~中級者レベルの人へ)「上達を阻む原因」と題しまして、特にそうした皆さんが陥りやすい注意点を一つアドバイスしてみたい思います。
※なお、以下の内容はまだ始めたばかりの初心者・入門者の人でありましても、今後の(近い将来の)大変参考になると思いますので、ぜひ一読しておいてください。
で、前回に初心者が中々始められない原因の多くが、よくばって「いっぺんに勉強しようとすることだ」と言いましたが、
今回お話しする「上達を阻む原因」というのも、実はこれもほぼ原因は決まっています。
それは何かと言うと、
ある程度慣れてマクロが書けるようになってきた人の多くが、決まって「よく見せようと背伸びしようとする。」という所にあります。それが、初~中級者の上達を阻む、殆どの原因となっています。
「もっと上手くプログラムを書きたいです。」
「もっとシンプルにすっきり書けるように上達したいです。」
「よりすっきりしたプログラムにする方法を指導ください。」
私宛へのメールでも、これらはよく聞くフレーズなんですが、ある程度マクロが出来るようになってくると、多くの人がそう考える(悩みを持つ)ようになってくるわけです。
これは、ごもっともです。その考え方自体は実に真っ当だとは言えます。
けれど、よく考えてみてください!!
日本語は言語ですが、マクロの言語であるVBAのプログラムもまた言語です。
日本人なら誰でも、もう何十年となく長年書き続けてきたであろう日本語の文章を、あなたはそんなに
”うまく!シンプルに!すっきりと!”なんて書けているんですか?
私なんかは、もうかれこれ14年間もここで文章書き続けてきているわけですけれど、、
今だに、自分の満足いくような、うまくてシンプルですっきりしたメルマガの文章なんか、書けた試しは一度もありませんよ!(笑)
いくら書いても(何十年と書いていても、)書けば書くほど、すっきりとは逆に”くどくど”した文章になってしまう・・・。後で必ず、いつも後悔しきりです。。
小学校の作文からはじまって、日本人なら誰しももう何十年となく沢山の文章を書き続けてきているわけと思いますが、そんなに上手く簡潔な文章書けてる人なんか、滅多に居るわけではありませんから、
それをさて置きにして、プログラムのコードに限ってはそうしたい、すっきりさせなければならない・・・と、そんな無茶な考えをしてしまう人が非常に多いわけです。
我々ビジネスパーソンいうのは、何かの提案書やら報告書やら、日々何十通も書いているメールにしろ、常に簡潔でスッキリした、うまい日本語の文章を書くということに迫られているわけでありますが、
実際、そんなにうまい文章なんていつも書けてるわけではないわけですし、私の場合も、それはたまにたっぷり時間を掛けて書いた渾身の提案書や渾身のメルマガ内容ならばさて置きですが、
たっぷりの時間と、自分の書いた文章を上司やそれなりの人にチェックや校正をお願いできる時であればいざ知らずですけれど、日々仕事で忙しい中で、なるべく時間掛けずにちゃちゃっとメールを書くとか、上手い文章というよりも、素早く書くという速さの方が
よほど重要であるのには間違ない思います。
それだけ、上手い日本語の文章書くことというのは、難しく、時間も掛かるものであるわけなので、それは、プログラミングのコードの場合でも、しかりです。
私は、システム開発の現場やら何やらで、かれこれもう1万回以上ものプログラムのレビュー(他人の書いたプログラムをチェックする事)というのをやってきましたが、正直、プロのプログラマーでも早々にうまくシンプルですっきりと、なんてコードが書けてる人間いうのは極めて少ないです。
なので、余ほど文章上手で文才があって、普段から短時間でも上手い日本語の文章が書けるという人であればプログラムの場合でも、それ目指すいうのは全然構わないとは思うんですが、、
自分の書く日本語文章を鑑みて、とにかく、”簡潔で上手い文章書くいうのは、難しく時間も掛かるものだ!”その認識を、まず持つということが重要かと思います。
そうではない人まで、それを目指して「うまく書こう」と背伸びしようとすればすればするほど、どんどん文章書けなくなっていくものですね。”うまく”と考えると途端にペンが進まなくなるわけです。
それで、そんなことを気にしなければ、ある程度の初心者レベルのマクロであれば、せっかくもうどんどんスラスラ作れるようになってきたとういうレベルであっても、この背伸び心が芽生えることによって、マクロ作りのスピードが大きく鈍化してしまうことになるわけです。
”もっと上手く、もっとシンプルに、もっとスッキリと、”
そう考えれば考えるほど、日本語の文章と同じで途端に書けなくなってきます。それこそが、初~中級を迎えた皆さんにとっての最大の鬼門であるに他なりません。
うまいコードが書ける人間だという自慢や、自分をよく見せたいという邪念は、何事に於いても同じ思いますが、自分自身の為には早く捨てたほうが良い思う次第です。
そもそも、そうした皆さんが目指すべきマクロの上級者とは、どんどん自動化の出来る人であって、きれいにすっきり書けることなんかでは決してないわけですから、(違いますか?)
見てくれは気にせずに、どんどん書く、どんどん便利なマクロを、あなたやあなたの会社の業務効率化に役立つマクロを数多く作っていく、ぜひそれに徹してください。
マクロの上達とは、プログラムのうまいコードを書けるようになることでは、断じてありません!PC仕事に役立つマクロを、もっと沢山完成させて、もっともっと大きな(高度な)業務効率化を図っていく・・・。ということに他ならないわけです。
それこそが、真に高度な「マクロの上級者」なのであって、初~中級者の皆さんが今後、目指すべき正しい姿だと思います。コードをうまくスッキリ書けるより、数多くの役立つコードがより短時間で書ける、作れる、その方がどんなに仕事上のメリットが大きいことであるか知れませんのは、確かですね。
このメルマガを読んでくださっている読者の初~中級者の皆さんには、”上手く書くよりどんどん書く”これに徹していただいて、(コードの見てくれなんて小学生の作文程度で全然構わないわけですから、、)
どんどん便利なマクロを書いて、業務効率化になるマクロを数多く生み出していく、それに徹して行ってくださいね。
巷のVBA先生みたいな人達は、自分の書いた数行の短いVBAのコードを示して、「これスッキリ書けてるでしょ!これ見習いなさい!」なんて、自慢げに言ってる人って居るかと思いますけど、、
そんな人でも、少々長いコードになったら間違いなく、その中身はもう”ぐちゃぐちゃ”です。断言します!それが証拠に、そう言ってる人いうのはネット上に長い(数百行~数千行といった)VBAのコードは、決して載せません。(笑)
参考書のライターでも、本に載せてる少々長文のサンプルコードになると、途端に間違えだらけの動かないコードだったりする思います。(しかも、本に載せてるコードいうのは、たっぷりの時間を掛けて、出版社の校正もなされたものなんですから、皆その程度です。(笑))
ぶちゃけ、毎日朝から晩までプログラム書いているプロの職業プログラマーだって、そんなにスッキリうまいプログラムが書けているプログラマーなんて早々には多くは居ませんですから、
そんな、書くのがプロの本のライターや、本職のプロのプログラマーでさえも難しいことを、素人がやろうとするから必ず失敗しますし、書けなくなります。背伸びしようとする気持ちが上達を阻むわけです。
ちょっと長くなってくると、大抵がぐちゃぐちゃしてくるいうのが、コンピュータ言語の文章(すなわち、プログラムのコード)です。短いもの、または、しこたま時間を掛けて書いたらものであれば別なんですが、そんなネットの見せかけコードに騙されてマネをしようとはしないよう、くれぐれも気を付けてくださいね。
それで、ちょっと話は前後しますが、
そもそも、根本的に上手くスッキリした読みやすいプログラムっていったいどういう書き方なのか?
という話です。
例えばですが、ネット上でそのように「スッキリ書け!」と言ってるタイプの人の書いたコードの例文を見ますと、
【例文1】
++++++++++++++++++─
Worksheets("Sheet1").Range("A1").Copy Worksheets ("Sheet2").Range("C2")
++++++++++++++++++─
これを、1行でスッキリ書けていて見やすいと言ってるような人が多く居る思いますが、ベテラン読者の皆さんならもうよくご承知と思いますが、これは当講座では、
【例文2】
++++++++++++++++++─
Worksheets("Sheet1").Select
Range("A1").Select
Selection.Copy
Worksheets("Sheet2").Select
Range("C2").Select
ActiveSheet.Paste
++++++++++++++++++─
必ずこう書きます。
上記の2つの例、どちらも実行結果は同じですが、当講座では必ず後者【例文2】の方の書き方を奨励しています。必ず、です。
この両者の違い、わかりますか?
わかり易く、上記の2つの例文のおのおのを日本語の文章に書き表してみますと、
【例文1】が、
ワークシートのSheet1のセルのA1をコピーしてワークシート
のSheet2のセルのC2へそれを貼り付ける。
で、
【例文2】は、
ワークシートのSheet1を開く
セルのA1をクリックする
コピーする
ワークシートのSheet2を開く
セルのC1をクリックする
貼り付けする
となるかと思います。
前者は、色んな命令を詰め込んだ だらだら長い文章で、後者は、コンピュータへの命令が1つ1つ短文に分かれて改行された私好みの、いわゆる箇条書きの文章です。
このどちらが好みかは人それぞれですから、決してこの書き方を強制するというものではないですが、プロの私としては、これは当然、後者の方が好みです。
第一、これであれば「マクロの記録」で自動で書けるコードを大きく書き直す必要もなく、そのままで(必要に応じた微修正だけで)色々活用できます。
ネット上やVBAの参考書では、何故だか前者の方の書き方を奨励している人が非常に多いですので、最初わたし
「何でなんだろう?」と、そう不思議に思ったわけですが、
私のようなプロの職業プログラマーで、プログラマーからExcelのVBAに入った人であれば、必ず私と同じに後者の書き方を好みますので、それは間違いない思うんですが、、これはどうも、いわゆるExcelのワークシート関数が影響しているものと思われます。
Excel好きが高じてプログラムにまで手を伸ばし、それでVBA教えるまでなっていった人達いうのは皆、関数が得意で大好き思いますから(少々長くて複雑な数式でも関数1行に何でも詰め込もうとしますから、(笑))、
要するに、数式の処理はづらづらと横1行に長く書いていく・・・というスタイルに慣れ親しんでしまっているわけなんですね。どんなに長くて複雑な処理をする場合でも、改行も段落分けも出来ないセルに書き込む関数いうのは、とにかく何でも横長の1行に詰め込む必要がありますから、それが正しいのだと。。。
これが、プログラマーとの大きな違いです。
VBAも含めてプログラムのコードというものは、改行や段落分け等が自由に出来ますから、1行に何でもかんでも詰め込むような書き方は好みません!
なので、Excelからではなくて、私のようにプログラミングから入った人間は皆、そうしたプログラミングの利点を生かした書き方いうのをVBAの場合でもしますから、前者【例文1】の横長1行の書き方ではなく、後者【例文2】の縦長改行のコードを好むというわけなんです。
これは、前々からここで何度も言ってきていますように、日本語の文章と同じで、箇条書きです。改行や段落のない長々とした文章で書くよりも、箇条書きで短文に分けて、しかも、できれば1行には1つの目的のみで(1つ1つの命令に分けて)書くいうのが、どんな文章でも文章としては断然見やすくて理解しやすくなると、私は思う次第なんです。(違いますか?)
だから、日夜複雑な処理を求められている我々プロの職業プログラマーいうのは、改行や段落分けの出来ない、何でもかんでも1行に処理詰め込むしかない関数いうのは、決して好まないものです。
関数から(Excelから)VBAのプログラミングに入った人は、どうしてもそう(横長の1行詰込み型の関数スタイルが見やすい・・・)思ってしまっているように思えます。
常識的に、ビジネス文書の書き方でも、わかりやすい、理解しやすいと考えてみるならばこれは明白と思いますですから、、私はそのようなVBA界隈で起きている誤った解釈や風潮には、大変憂いてなりません。なので、改めてそう言っている皆さんに問いたい思います。
改行なしで1行に多くの命令を詰め込んだ方がプログラムはすっきり(行が少なくて)わかり易いって、本当ですか?
少なくとも、私なんかはプログラマー歴が長いですから(これは日本語の文章と同じで)、短く箇条書きが好みです。その書き方の方が断然、文章でもプログラムのコードでも、見やすくて理解しやすい思って、過去も今後も、このメルマガではそのように書いていきます。
で、前回のプログラム例でも当講座では
n = Cells(Rows.Count, "B").End(xlUp).Row
For i = 1 To n
こう書いているんですが、これを
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
こう書いて教えてる人も多いです。
後者は、「ループを回す」と「データのある最後の行を取得する」という2つのことを1行で同時にやっているわけです。言うなれば、これはテレビを観ながらスマホやるとか、ご飯を食べながらスマホのゲームをやるとか、最近の若者にはよく見かける光景ですよね。(笑)
先に述べてきましたプログラムコードの本来の「シンプルの意味」をよく理解した上で、できるだけ1行は短文の1命令に分ける。そこだけ注意して書けるよう心がけることを、お薦めします。
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
と書くのではなくて、
n = Cells(Rows.Count, "B").End(xlUp).Row
For i = 1 To n
ですよ。よろしいですねっ!
あとは、綺麗なコードという意味では、いつも口をすっぱくして言っている For文 や IF文 の中の字下げですね。段落分けをしたら同じ階層の行の頭はきちんと揃えておくと間違いなく、美的なコードになりますし、ループや分岐の処理が区別し易く解り易くなります。
あとまた、「構文のすっきり」と「ロジックのすっきり」は、分けて考える必要があります。今回の話は、全部が前者の関連の話です。後者の「ロジックのすっきり」の話しに関しましては、また話しが大変長くなる恐れがありますので、もし機会がありましたらまたお話してみたいと思います。
最後に、今日の話のまとめになりますが、
とにかく、世間では「マクロが少々できる」というだけで凄い人なんですから、それで背伸びをしたり、他人の目を気にして見てくれに走って書けなくなるなんて、実に勿体ない話です。そんなことは気にせずに、どんどん書く、どんどんExcelの自動化を達成していく、それだけを考えてやっていくようしてください。
しかも、プログラムのコードいうのは、自分の苦労の歴史が垣間見えるヘタな書き方や、コメントアウトの足跡を残した(汚めの)ほうが、かえって将来の自分の為にはなる思いますよ。
大変話長くなりまして恐縮ですが、
本日は以上です。
Q.
マクロが必要なのはわかっているんですが、用語がさっぱり分からないので・・・
そんな私でもVBAはできるようになるのでしょうか?
A.
マクロ初心者の方に共通する問題点は、
・用語がさっぱりわからない
・勉強する時間がない
この2つかと思います。
まず、当講座では、わけのわからないカタカナ専門用語というのは、一切使っていません。
それは何故かと言いますと、 皆さん毎日使っているエクセルでも、Windowsでも、インターネットでも、スマホやその他のIT機器の場合でも、それらには余計な機能が沢山備わっていますよね。 それ、入ってる機能全部を覚えよう思ったら、一生掛かる思います(笑)。
けど、自分が本当に必要とする機能以外は無視をしてそれら使うという分には、さほど難しいと いう事はありませんね。多機能で高機能なスマホだって、それでみんな普通に誰でも使いこなして いる思います。
カタカナ専門用語にしても例えば、インターネットの基本は「プロトコル」というものですが、 そのようなインターネットの基本用語すら知らずに(意味も分からずに)皆、毎日 インターネットは使いこなしているわけです。そこから勉強し始めたら、本当 一生掛かってもインターネットなんて使えるようにはなりませんね。
これは、マクロのVBAでも同じです。VBAというのはマイクロソフト社が作ったプログラミング言語 でありますが、ExcelやWindowsと同様に、これにも余計な機能が沢山 沢山備わって付いています。マイクロソフトという会社は、そのような要らない機能を実に沢山 チャラチャラ付けたがる企業ですから・・・。(笑)
ただ、マクロの言語というのは本来、至ってシンプルなものです。難しい用語なんてものも さほど多くはありません。ただ、例外的にVBA言語というものが、そんなチャラチャラ好きな マイクロソフト社が作った言語になりますから、これには色々と(初心者には到底必要ない) 高度な機能というのが沢山付いています。
そうしたチャラチャラ機能は無視をして、Windowsやスマホのように自分の本当に必要な部分だけを勉強して利用する という事に徹しさえすれば、マクロの言語(VBA)はそう難しいものではありません。
考えてみてください、あなたも必ず毎日使っているであろうWindowsやスマホですが、 その毎日使ってるWindowsやスマホの全ての機能を覚えなければ、それら使えない、使っちゃダメ! と、もしそう言われたらどうでしょう?
そうです、我々はそれらの全機能の、ほんの1割も知らないままで使っている (一応、使いこなせている)というわけです。
なのに、マクロのVBAだけは初心者にもその5割を、覚えない人はマクロ作っちゃダメ! (基本知らなきゃマクロなんか作れるわけがないよ!)って言ってる間違った先生が、VBAの世界には 実に多く居るわけです。
マクロで用いるVBA言語の場合でも、覚えるのは全体の1割で十分なのです。 あとは、全部マイクロソフトにありがちなちゃらちゃら機能(初心者には到底必要のない高度な機能) というものに過ぎません。であれば、難しい用語は、特に難しいカタカナ用語というのは、殆ど 全く必要がありませんですから、それらは覚える必要も理解する必要も まったくありません!
要は、それを(あなたが必要な部分と不必要な部分とを)正しく分けて、 その必要な部分だけを集めて端的に教えてくれる人から教わる、ということが 非常に重要になってくる思うわけです。
でないと、VBA参考書によく見られるただ言語に詳しいだけのライターや VBAセミナーのインストラクターレベルの人から、沢山の不要な部分を詰め込まれる (それは、Windowsで全ての機能の半分くらいを覚えさせられるに等しい・・)ような、 そんな羽目に遭ってしまうわけですし、実際、「オブジェクト」だの「メソッド」だの に翻弄されて、ただそのような不必要な勉強に時間を浪費するだけとなって すぐに挫折してしまう悲惨な初心者が、VBAでは実に多いわけです。
なお、
この辺の話は、こちらにも具体的に詳しく書いていますので 参考にこちらもぜひ読んでみてください。→ VBA3つの分類