GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

GoGoマクロ

エクセル仕事の自動化が誰でもできる本

初級マクロ検定の結果発表

2020-05-26 06:27:21 | マクロ作成のコツ
遅くなりましたが、10日の日曜日に実施いたしました
「初級マクロ検定」の結果報告です。

今回も、想定合格率を6割に設定して作ったレベルの問題を
出題いたしましたが、結果、5割を少々下回る

合格率45.8% の結果となりました。

予想外に低調な合格率となってしまったその原因ですが、
それは実に今回明確でした。

不合格者の半数近くに皆同じちょっとしたミスが見られ
まして、もし、そのちょっとした共通の間違えさえなければ、
今回の合格率は7割を超えたかと思われます。ので、、

本日は、不合格者の皆さんに多く見られたミス初級者が間違えやすい部分について、述べてみたい思います。

その箇所と言いますのは、ひと言で言えばプログラミング
のバグでよく見られる「初期化」のミスです。

以下に、これ詳しく解説します。


「初期化」とは、すなわち「使い始める前の状態に戻すこと」の意味に
なりますが、プログラミングの場合、主にこれは
変数(データの入れ物)を使う場合によく使われる
言葉になります。

ただ、ここで皆さんと勉強しているプログラミングというのは
Excelのプログラミングになるわけですから、
そのデータの入れ物は主にExcelのシートの中だということになります。

これこそが、一般のプログラミングマクロのプログラミングとの最大の違いだと言っても過言ではありません!

すなわち、今回の初期化はシートの初期化
「シートの状態を元に戻すこと」との意味になります。

それで、今回の試験問題に関して具体的には、

一度マクロを実行して処理した結果(C列に出した出力データ)
が、2回目以降のマクロ実行時に、それを最初に削除しておく
必要があるわけですが、

データ数が固定、もしくは数減らないという前提条件があって
出力欄の全データは必ず上書き、もしくは新規の書き込みだけ
との保証がある場合には、わざわざ前回の出力データのクリア
というのは必要がありません。

ですが、今回のように「データ数が減る場合も想定せよ」との
場合になると、出力データのクリアというのが必修であるわけ
です。

で、不合格者に多かったこの部分のプログラムが、

    n = Cells(Rows.Count, "A").End(xlUp).Row
    Range("C1:C" & n).Select
    Selection.ClearContents

といったものです。これ、実に惜しいです。

この場合に消す必要のある前回の出力データの数は(データの
最後の行になる n に入れるのは)、A列(入力列)ではなくて
C列(出力列)の行数になります。

よって、正解はこの1行目の列名指定の部分を、ただ単に

    n = Cells(Rows.Count, "A").End(xlUp).Row
↓
    n = Cells(Rows.Count, "C").End(xlUp).Row

(AをCに変えただけ)これだけです。

けど、

これは、コード的には上記ほんの1文字違いの些細なミスのよう
でもありますが、プログラミングの根幹を成すロジック(処理の
考え方)としては、バグの原因になりやすい大きなミスと言える
間違いです。

プログラムのロジックとしては、これは言うなれば、

n = Cells(Rows.Count, "A").End(xlUp).Row '今回の入力数
m = Cells(Rows.Count, "C").End(xlUp).Row '前回の出力数

となりますので、この2つの変数(入れ物)は分けて考えた方が
いいわけです。


で、

この様な考える時(ロジックの思考時)に是非おすすめしたい
方法が、とにかく「紙に書く」という方法です。

私の本をお持ちの方は是非169ページにある「上達のヒント」
というページをみて頂きたいですが、

初心者がこの様な図形でのフローチャートを書くというのは
中々難しい思いますから、次の170ページにある説明を参考に
して日本語の文章で(箇条書きで!)書く、

且つ、これは何も紙上でなくてもいいですから、プログラム
の中に「コメント文で書く」すればよいわけです。
たとえばですが、

 'これ、どこまで消せばいいのか?

って、自分のプログラムのどこかに書き込んでみるのです。

ロジックは書かないと絶対にダメです。頭の中にあるだけだと、
「設計図のない家はうまく建ちません!」ですから、それは、
いつまで経ってもマクロ作りが上達しない人の一つの大きな
原因にもなっています。

ぜひ、このようなロジックの考え方は紙に(コメント文に)
書いて、「文字にして考える」というクセを付けるようして
ください。頭の中だけで考えてやっていると、必ずミスが起
こります。

で、この場合には、

 'これ、どこまで消せばいいのか?

こうコメント文で書き込んでおけば、必然的に

 'これ、どこまで消せばいいのか?→それはC列の全部だ!

ってなりますから、そしたら、わざわざ「データの最後の
行まで」とする必要性なんかないのに気付く思います。
C列のデータは全部消しちゃえばいいだけだ~、と。

よって、ここは「マクロの記録」でC列削除を記録して
自動でできる(マクロの記録→列名をクリックしてC列全体を
選択→Delキー押す→記録の終了、この手順で)

〇
    Columns("C:C").Select
    Selection.ClearContents

このコードを用いれば、たったこの2行のそのまんまで済みます
から、マクロの記録だけやれば何の修正の一つも必要ないです
から、

×
    n = Cells(Rows.Count, "C").End(xlUp).Row
    Range("C1:C" & n).Select

こんな面倒は一切必要なかったことに気付き、一瞬で作れる
プログラムになるわけです。

急がば回れ!ちょっと立ち止まって設計図を紙に書いてみる
(コメント文で書き込んでみる)、素早く効率よくマクロを
作る為のコツがこんなところにもあるわけですね。


以上、本日は今回の検定で特に合否の明暗を分けました
「初期化」に関する解説でした。


なお、合格者の皆さんには先週に「合格証書」をお送り
致しました。合格した皆さん、おめでとーう!!

惜しくも不合格だった皆さんは、今回の説明を実践して
ややこしい処理は「コメントに書く」この練習して頂いて、
次回(たぶん秋頃に)またチャレンジをお待ちしてます!!

 マクロ検定の紹介ページへ

本購入者 プレゼント!<マクロ構文集の電子ファイル>

2020-05-25 06:49:35 | マクロ作成のコツ
当マクロ講座の公式テキストとも言える本が出まして、丁度
3カ月が経ちました。とにかく、私の人生でも初めてとなる
「人生初の書籍出版」となりました。

けれど、正直、期待に反して何故だか全く売れてません!(笑)

当講座で教材を出せば、ほんと数万円もする教材が飛ぶように
売れていくわけなんですが、何故だか今回、この2千円の安い
本は全然売れない・・・。

まぁ、このようなコロナ時期でタイミング悪かったということ
もあるかとは思いますが、「本は中身で売れるんじゃない。」
という噂を、今回まじまじと実感した次第です。(本選びは
難しいー)

それにしても、企画していた全国20か所の(いや、35か所!)
出版記念のセミナーやらワークショップやら、全部中止を余儀
なくされたのが、痛恨の極みであります。(泣)
日本全国巡りたかったぁーーーーー!!!!!


そんなこんなの中ですが、

私を信じて(!?)この本を買ってくださった読者の皆さん方に、
ぜひ感謝の気持ちを込めましての何かお礼を!と思いまして、

何か良いものはないかな~と考えていましたら、感想のメール
をくださった何人かから、最後の付録に載っている「マクロの
初級構文集」いうのはとても便利だ、とのお褒めの言葉を頂戴
しましたですが、(そこっ?笑)

それで、その2ページを全部Excelに手で打ち込んでコピーして
使ってると言う人まで現れまして、それは、全部打つのも大変
ですし、打ち間違えもあるでしょうし、事前に言ってくれたら
原稿の元電子のファイルであげたのにー、と思いまして、、

で、本の購入者の皆さん全員にその構文集を元の電子ファイル
(Excelの)にてプレゼントしたいと思います。手間なくこれ
使ってくださいね。

それと、

それに加えて、初・中級構文集の[最新2020年版]を作りました
ので、それも一緒にプレゼント致します。

今回の[2020年版構文集]には、新たに当講座のマクロ作りの
真骨頂でもある、

「固定→可変」の変換例の一覧
(「固定の部分」を「固定じゃない様に」変える書き方集)

いうものを、今回新たに追加して載せました。

これで、「マクロの記録」のそのままでは使えない(セル名
やシート名、その他もろもろの)固定された部分の修正が
楽になる(殆どコピッペでできるよになる・・)思います。

これさえあれば大概のマクロは、
「マクロの記録+α」で素早く組めるようなりますから、
これは、可也の必見!ですよ。(たぶん!)


先日の検定試験でもそうですが、
プログラミングというのはVBAでもどんな言語でもそうですが、
構文を覚える必要というのは全く無いわけです。
そうした機能があるということだけを覚えていれば、それで
いいだけです。

それで、素早くプログラムを組む為に自分が良く使うであろう
1行1行の構文を並べてテキストファイルなんかに保存した構文
集を作って自分のパソコン上に置いておけば良いだけですね。

いちいちネットで調べていたら、探し当てるまでに&それ理解
するのに、更には必要ない情報まで沢山入ってきてしまうので、
余計な時間ばかりが掛かってしまう事になりますから、必要な
時に自分が見慣れた場所から(コンパクトに並べた一覧から)
コピッペして構文は使い回す、というのが素早いわけです。

「初・中級VBA構文集 2020最新版」

 目次
●セルの選択
●セルの操作
●シートの操作
●文字列の操作
●日付の操作
●ブックの操作
●テキストファイルの操作
●図形の操作
●時間管理
●エラー処理
●高速化
●その他メモ
●固定を可変に直すパターン集 ←※今回新規追加の項目です


なお、この本購入者プレゼント企画は今月いっぱいまで(6/1
にダウンロード一斉配布予定)となりますので、ご希望の方は
必ず今月末までに、お早めに下記からご応募ください。

但しなんですが、

誰が本買ったかいうのは私にはわからないですから、この応募
画面に簡単なクイズを出しています。本見て答えを書き込んで
ご応募ください。
(本を持ってる人であれば誰でも簡単に答えられる超簡単な
クイズ!です。)
(また、Kindle等の電子版のの購入者でも大丈夫です。)

本購入者プレゼント企画応募フォームへ
※終了しました。

何ごとにも、固定であれば簡単だけど、固定じゃないから
難しいわけですね。

だから、「固定→可変(固定じゃなく)」することこそが、
マクロで(自動化で)最も重要なわけです。

だから、当講座では本でも教材でも、マクロ作りのレッスン
勉強で、その「固定じゃなくする方法」を重点的に勉強して
いるわけです。(主にはループの中で、です。)

それでこそ、「マクロの記録」がただの辞書ではなく、
生きた使い方というのができるようなって行くわけですね。
「マクロの記録」をただの辞書だと考えてしまうと、
せっかく便利な機能が生きてこなくなってしまいますから。


それでは、コツを掴んで、素早く手間なく便利に楽しく、
今後もマクロ作りやっていきましょう!!

肺を鍛えましょう!

2020-05-08 08:35:48 | よもやまな話

この新型コロナウイルスというものは、要するに肺炎を引き起こす肺の病気なわけだと思いますが、

実は私、その昔、若い頃に肺の病気で(肺に穴が空いて空気が吸えなくなる肺気胸という病気で、)専門の国立病院に2週間程入院した経験というのがありますので、肺に関しては少々敏感な人間なんです。

今まずは当然、自分が感染しない事、感染した可能性が少しでもある場合には絶対他人に移さないよう努力すること。であるわけですが、、

百歩譲って、もし万が一いづれ感染してしまった場合にでも肺炎で重症化だけはしないよう、今から方策を取っておくことが重要なのではないかと思う次第です。

それで、思い出しましたのが、「肺を鍛える」為の超簡単な方法です。

肺にも「肺年齢」というのがありまして、高齢者に重症になる割合が高い原因が、これなんじゃなかろうか?と私は睨んでいます。(あくまでも私個人の意見です。)

それでその方法なんですが、それはただ「息をしっかり吐く」というだけです。

皆さん「息」は、しっかりと吐いていますか?

しっかり息吐く?ってこの意味は、言葉の通りですが、もっと分かり易く言い替えると、「吐き切る」です。吸った息を「吐き切る」ということを意識して呼吸をするだけです。

そうすると、誰かのコメンテータもテレビで言っていましたですが、それだけで「肺年齢」が10歳くらい若返ったそうです。

吸う方は普通でいい(特に大きく吸う必要はない)ですから、菌吸い込む心配もないですから、とにかく吐く時だけしっかりと吐く、息吐き切る。誰もいないところで思い出した時に、日に数回やったら「肺年齢」は若返る、

これ多少なりとは、重症化の予防効果はあるかとは思いますので、是非お試しください。ただ深く吐くだけです。