雪の浅間山です。(今日の)
前回の初冠雪から一度溶けて、
この所の寒さでまた冠雪したみたいです。
こちらは、夕焼けの蓼科山と三日月です。
昼間の蓼科山はこんな感じの山で(望遠撮影)、
紅葉終わりの小山の向こうで、うっすらの冠雪が見えます。
この山の向こう側は、あの有名なリゾート地の白樺湖があって、
これは、その反対側から見た蓼科山の写真です。
本日は、「完全初心者向け」の動画を1本、
ご紹介します。
この動画の主な内容は、
・関数とVBAの違いと、その使い分けについて
などで、
他にはちょっとない「三太郎独自の視点からの解説」
となっています。
さっと見ておくにはふさわしい、至って短い
手ごろな動画です。
これ、たった4分程度の短い動画でありますが、
これでマクロ(と関数とVBA)の位置づけが
よく理解できる思います。
「マクロってなに?」だったり、
「まだこれからやってみようかな?」だったり、
という段階の人には、
これ、さっそく見ていただくことをぜひ
お勧めしたい内容です。
今日のテーマは、「プログラムを読む?」についてです。
これも、VBA教えてる人に多い勘違い思いますが、
「コードを読めるようになりなさい。」
とか、よく耳にする事あるかと思いますが、
それって、どういう意味ですか?(笑)
そもそも、
「プログラムを読む」っていうのが意味するところは、
「プログラムの流れを読む」ということでありますので、
VBAの構文(英単語?)の意味を理解して読めたところで、
その流れ(フローチャート的な・・)が分からなければ到底、
他人の書いたコードなんてものを理解することは、
できません!
これも、至ってプログラマーの常識中の常識であります。
ロジック(処理の流れ)を勉強しないで、
「コードが読めるようになる」なんてことは、
あり得ません!!!
ソフトウェア工学や情報処理の常識を逸脱する
教え方するいうのは、先生自身の勉強不足も甚だしい
思います。
もっと、真面目に勉強してから(情報処理の基本的
常識事ぐらいはわきまえて)から、人に教えるように
してください。お願いします。m(__)m
余りにも、プロから見ると常識を逸脱した
甚だ 素人騙し な教え方するVBA先生というのが、
ネット上でも参考書にも、多く存在するという事実が、
残念でなりません。
それが、VBAがプロから益々見下される、
その原因の一つとなっているいうのは
事実かと思います。
なので、
他人の「プログラムを読め!」とそう教える際には、
ただVBA言語の構文教えるというのではなくて、
「フローチャートの起こし方」を教えるべき
事なのであって、VBA構文なんかのコードの理解力には
何の意味も(全体の20%も意味)ないです。
プログラムというのは、処理の流れありき でありますので、
言語の意味なんてどうでも良い(言語なんて所詮はただの
記号の羅列に過ぎない)ただの付け足しに過ぎません。
マクロを難しくなるだけの VBA構文ありき の勉強するのは、
今すぐ止めておさらばしましょう!!
▼ YouTube再生25万回突破しました!
「エクセルマクロを10分で理解する(動画)」
マクロっていうのは、そもそもExcel等のPC作業を効率化する為の道具ですから、そのマクロを、非効率なやり方で組んでいたのでは、まさしく”本末転倒”です。
できるだけ、効率の良いマクロ作成の方法というのを習得しなければなりません。
それで、プロから見て一番非効率なやり方いうのは、
「ネットで似たような事してる他人の作ったマクロを捜して、そのコード読んで、理解して、直して使え。」
というものです。
ネット上や参考書で、よくこういうやり方をしろと教えているVBA先生いうのを目にするわけでありますが、、
こう言う人は、そもそもが真っ赤な素人だと言わざるを得ません!
プログラムというのは、他人の作ったものを理解して修正するより
「自分で一から組んで作った方が断然早い。」
いうのが、プロのごく常識事であります。
それは、経験豊富なプロのプログラマーであれば誰しも異論の無い、しごく当たり前の話に過ぎません。
何処の誰かも分からないプログラマー(信頼置ける人間か、いい加減な人間なのかも判らない・・)の作ったコードというのを基にして、それ「理解して、直す、」といったバカげた行為は、
よほどのベテラン、本職のプログラマーであっても、当然、至って困難であるわけです。
そんな、ベテランのプロでさえ難しいやり方というのを、素人さんがやろうとするから(やらせようとする素人レベルの先生がVBAの世界には多いから・・・)、
当然ながら、多大な時間が掛かるのは当たり前ですし、あげく、当然のようにその方法でやる人は必ず失敗するわけです。
「他人の作ったコードを理解して、その何処をどう直したらいいのか?」
と奔走する為に費やさねばならない時間というのは実に多大で、結局、それは全て無駄に終わるケースがほとんど(95%か、それ以上・・)であるのは、間違いない事実かと思います。
だから、そのやり方はただ時間を浪費する結果にしかならないということを、よく、よく、よく理解 してください。
これを読んでいる人の中にも、既に、そんな痛い失敗経験がある
という人も多いのではないでしょうか。。。
なので、
「誰か他人の作ったマクロを捜して、そのコードを読んで、理解して、直す。」という間違ったやり方だけは、絶対にやってはなりません!
必ずドツボにはまって貴重な時間を浪費し、大失敗で終わるだけとなりますので、そんな素人マネだけはしてしまわぬよう、くれぐれも注意してください。
ちなみに、プロは他人の書いたプログラムをよく参考にはしますけど、それは、書き方のわからない部分だけ(のほんの数行)をコピッペして使ってるだけであって、そのすべてをコピッペしてそれ直して使うだなんてことはしません。
先ほども言いましたように、理解するのに多大な時間が掛かり「一から自分で作ったほうがよっぽど速い。」ということを、よく知っているからです。
マクロは、短時間で効率良く自分自身で一から組める方法を、学んでください。
その方が「確実に早い!」という事だけは、確かです。
▼ YouTube再生25万回突破しました!
「エクセルマクロを10分で理解する(動画)」
- もくじ -
■はじめに
■合格率
■特別賞(ベストアンサー賞、トップ賞、アイデア賞)
■不合格理由で見られた間違いと注意点
■ブランク空いてしまってる人は・・・
■はじめに
先月末に実施しました「マクロ検定」の試験ですが、
受験くださった皆さま
ご参加、誠にありがとうございました!
大変お疲れさまでした。
今回の出題内容は初級レベルということで、
・ループが回せて、
・分岐処理ができて、かつ
・データ数の可変に対応したマクロが組めること、
マクロ作りで、最も重要なこの基本的な3点を問うという検定内容でありました。
それに加えて、今回の検定では、
「カンニング自由」
「制限時間60分」
という条件を設けまして、
・実際の仕事で(実務で)マクロを作る時と同じ環境下で、かつ、
・限られた制限時間内に素早く完成させる、
より現実的な技能(実務能力)を問うということを目的として実施したものです。
そもそも、実務にカンニングなんてものは存在しないわけですし、また、作業を効率化するためのマクロを、非効率な方法で長々と時間を掛けて作っていたのでは本末転倒、元も子もないわけです。
正しく動作するマクロを組めるか否か、それに加えて、素早くマクロが組める方法が身に付いているか否か、それがとても重要であるわけです。
素早く組める自信があるかどうかで、何か面倒で時間の掛かるExcel作業が発生した場合に、せっかく覚えたマクロのスキルであっても、それ使わずに原始的に手作業でやるという事が多くなってしまうと思うからです。
■合格率
それで、肝心な検定結果なんですが、
今回は、まるっきり一切の手加減なしで厳しく、厳密に合否判定をさせてもらいました。
当初、想定していたのは合格者半分程度(合格率50%)の難易度ということで問題作りをしましたが、それよりやや高めの合格率6割強という結果となりました。
合格した皆さん、おめでとうございます!
合格者の皆さんには、本日中に「合格証書」をお送りする予定です。
■特別賞(ベストアンサー賞、トップ賞、アイデア賞)
それと、今回は合格者の皆さんの中から、
★ベストアンサー賞
★トップ賞
★アイデア賞
この特別賞3名を選出することにしました。
特に賞品というのはありませんので気持ちだけですが、(笑)
該当者の方は、お送りした合格証書にこの記載がありますのでご確認ください。
なお、上記各賞の意味する所と、選考の理由は以下です。
★ベストアンサー賞
初心者でも素早く確実なやり方(当講座の教え)というのがちゃんと身に付いているという点で、下記理由により実にベストな解答をいただけた方に、この賞をおくりました。
・マクロの記録をベースにちょこっと修正するだけで素早く(何もわざわざ調べる必要もなく)作れる。
・Excelの操作と構文の1行1行が1対1の関係に対応していて、より分かり易い書き方になっている。(=デバッグも素早くやり易い。)
・思考を中断させない変数名の使い方と、時間の無駄なだけの余計なDimDimもやってない。
★トップ賞
合格者の中で、今回の3日間を通じて一番早く解答を提出し、検定開始(問題の公開時刻)から解答メールが届くまでが、わずか18分の最速の方にこの賞をおくりました。速い!
あのような長文問題文(マクロの仕様書)を読んで、この仕様を理解して、マクロ作って、確認の実行して、更に、解答のメールを送る、そこまで全部をやって、わずか18分間ですから、マクロ作成に正味掛かった時間というのは、たぶん10分以内だった事でしょう。
これだけスピーディーに組めれば、マクロ作りが全く苦にならないレベルなわけですから、身の回りのExcelデータの整理等は本当、「何でもかんでも全部マクロでやる派!」の域に達してることでしょうね。
★アイデア賞
問題文(仕様書)をそのままプログラムの下方へコピッペして貼り付けている、というアイデアが素晴らしかった方にアイデア賞をおくりました。
・問題文全部コピッペ&コメントブロック化するだけで一瞬で詳しい説明文代わりに使える。
・後々でも何やってるマクロなのか?これ何故作ったのか?等、これなら一目瞭然である。
時間が経てば自分で作ったプログラムであってもすっかり忘れるいうのが人間ですから、何年か後にこのプログラムを見た時に、これならすぐにこれ作った目的も内容も思い出せて、大変便利なやり方ですね。
(仕様は空きシートに貼り付けて置くというのでもよいのですが、データシートが沢山ある場合だと未来の自分がそれ残してあること自体に気付かないという事もよくある事ですから、将来、プログラム修正する場合にプログラマーなら必ず目にするという場所に貼り付けておくのがよいわけです。)
ちなみに、このようにプログラム中に文章等コピッペする際は、ここに書いてある「コメントブロック」というのを使うと便利です。参考HP→ コメントアウトの仕方と考え方
■不合格理由で多く見られた間違い点
惜しくも不合格となった皆さんは誠に残念でありましたが、(大変惜しいなぁ~思える人が多く居られました。)
不合格理由で間違い多く見られた主な点は、以下です。
・並べ替え順が昇順になっている。(正しくは降順(背の高い順)です。)
・データ数が固定になっている。(データ数増やすと正しく処理されない。)
・コンパイルエラーが出る。(プログラムが未完成の状態で実行できない。)
あと、一番注意しなければいけない思ったのが、問題文の中に、
2. また、上記の名(B列)欄には空欄(欠損データ)がありうるものとし・・・
との記載がありますので、たとえば、
n = Cells(Rows.Count, "B").End(xlUp).Row
このように書いてしまうと、名(B列)欄の最後がもし空欄だった場合には、正しく最後の行まで処理されないという事になりますから、ここは注意が必要です。
この仕様の問題文の中には、
姓の欄(A列)には欠損箇所はないものとする。
とありますから、ここは"B"でなくて"A"とすべきなので、正しくは、
n = Cells(Rows.Count, "A").End(xlUp).Row
ですね。どこの列で数かぞえるべきか?は、この観点で注意してください。
■ブランク空いてしまってる人は・・・
また、不合格とは言わないまでも、昔はもっと出来てた人なのにすっかりマクロご無沙汰で忘れてしまったのだろうなぁ~(!?)思える人がちらほらと居らっしゃるようでした。
そんな、「マクロご無沙汰!」となってしまってる人は、以前メルマガでもお話しましたこちらの方法いうのがかなり役立ちますから、心当たりのある方は是非これ一読してください。参考HP→ 何年ブランク空いて忘れても大丈夫な方法
これで、簡単に「昔の勘」はすぐに取り戻せますよ。
■検定受けた感想受付中!
おかげさまで、久しぶりのプログラムレビューで皆さんが作ったプログラムを沢山見させていただきまして、私自身も大変楽いマクロ検定(読者1万人達成記念の目前イベント!?)となりました。
受験くださった皆さま、本当にありがとうございました。
なお、今回の検定を受けたご感想(難しかった、やさし過ぎる、時間足りない、等々)何かもしありましたら、このブログの下記のコメント欄に自由に書き込みしてください。(もちろん、いつものようにメール返信でも受付けてます!)
では、ご参加誠にありがとうございました。