昨日、検定の合否採点が無事に終了して、受験者全員の方へその結果をお伝えし終えることができました。参加者の皆さん、日曜のお休みの所 大変お疲れさまでした!
それで、今回の出題内容は「請求書の自動発行マクロ」の作成ということでやりましたが、
これ、60分でできた人(ちょっと上級の初級者の人)は、もちろん請求書だけでなく、見積書、納品書、領収書、etc、といった、自動化すべきもろもろの帳票出力全般も、ちょっとこれ応用すればいいだけですから、ごく短時間で容易に自動化できる実力が既にあるということが実証されたわけです。
例えば、住所録からの宛名ラベルの印刷だったり、12月生まれの顧客だけ抽出して誕生ハガキを自動印刷するなんてことも、もう楽勝!ですから、色々な分野へ応用できる思います。
それで、今回の問題で取り上げた請求書発行時の可変部分いいますのが
主には、「宛名」と「金額」と「日付」ですね。
これらがない請求書いうのは会計上の意味をなさないわけですし、これらは、必ず出力する請求書毎に変わる可変の部分であるわけです。
これらの可変部分を、どうマクロで自動化すればいいのか?
今回の課題の場合にも、マクロ作りというのはそれに尽きるわけです。
あと、今回出題した中で主なポイントとしましては、
請求リストからの条件抽出と、その連続印刷をプレビューにて行うこと、また、消費税額の計算や請求日の表示、などです。
まず、今回のリスト抽出条件の一つを「締め日」としました。よくあるのが、10日締めとか25日締め、末日締めとかですね。これ請求先の会社によって異なる部分ですが、その締め日毎に請求書は送るものなので、今回まず最初の条件がこれになっています。
それと、2番目は金額。請求リストにある会社でも今月は何も取引なかったいう場合もありますから、当然、その場合には請求書は出しませんから、その条件(請求額が1円以上あるか否か)でも抽出するマクロを作る必要があります。
すなわち、今回のIF条件式は以上の2つになります。
また、請求書の表示内容に関して、問題文にある以下の記述で
P3 ・・・「請求日」(請求処理(マクロ実行)した日の年月日)
今回、不合格となった人の中にはこの請求日と上記の「締め日」とを混同してしまった方も多く見受けられましたが、
これは当然、請求書に記載する日付の基準いうは会社によってまちまちなわけでありますが、けど、この場合の「締め日」は「日にち」だけの情報になりますから、年と月がありません。
年月日の書いてない請求書なんて会計上あり得ませんですから、ここの表示が(15日とか)日にちだけでは明らかに間違いです。
以下は、その部分の正解の一例になりますが、
まずは「マクロの記録」で、
Range("P3").Select
ActiveCell.FormulaR1C1 = "aaa"
↓
Range("P3").Select
ActiveCell.FormulaR1C1 = Date
この修正で、セルのP3に、もし実行日が今日だったらデフォルトの表示形式で 2018/11/18 と出ます。(まぁ、この辺は特に問題はないかと思います。)
例えばこれを、Excelのデフォルト表示の 2018/11/18 でなくて日本語の年月日で 2018年11月18日 と表示したいという問題の場合だったとしたら、
どうしますか?
そうです、これも「マクロの記録」を1度やればいいだけですね。
まずは、「マクロの記録」を開始して、
[ホーム]タブのフォントで[セルの書式設定]の画面を表示して(ショートカットキーでやってもいいです)
[表示形式]タブの[分類]の「日付」と、右側の[種類]から自分が表示したい形式のものを選んで、[OK]して閉じる。
あとは、「記録終了」のボタンを押して、「Visual Basic」で出来たプログラムのコードの中身を見てみれば、
Selection.NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
(上記の右側( = 以降)は、選んだ[種類]によって異なります。)
となっていますから、この1行を先ほどのプログラムにただ追加(コピッペ)して、
Range("P3").Select
ActiveCell.FormulaR1C1 = Date
Selection.NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
とすればいいだけです。
たったこれだけで、デフォルト表示の 2018/11/18 が、セルの書式設定の如何に関わらず、 2018年11月18日 の表示に変わるわけですから、この作成にも、ものの3分とは掛かりませんね。
では、ここで問題です。
上記の 2018年11月18日 の表示を 平成30年11月18日 にするマクロに直すには、どこをどう修正すれば良いでしょうか?
・
・
・
簡単ですね。
もう一度、「マクロの記録」をやって([セルの書式設定]画面下方[カレンダーの種類]から[和暦]を選んで・・)出来たコードの1行をコピッペ(先ほどの1行に上書き)すればいいだけですね。
Selection.NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
↓
Selection.NumberFormatLocal = "[$-ja-JP]ggge""年""m""月""d""日"";@"
簡単ですね。
よって、Excelで可能な表示形式であれば、この方法で何でもマクロで書式の指定ができますから、自分の好きな書式でセルの値を表示させるということが、思いのままに自動でできるようになるわけです。
こんなに簡単に、素早く、手間いらず、だからネットでわざわざ調べる必要性もなく(考える必要すらなく)、短時間でマクロは作れてしまう場合が多いわけです。
よく、ネットや本のライターさんが主張しているような、、「マクロの記録で出来たコードの意味を知る必要性」なんか毛頭必要ありませんね。
要は、いつも私が言っているように「マクロの記録」のうまい利用方法をよく知って、それをちゃんと身に付けることで、コードなんかの余計な部分は見る必要すらなくなります。
それが、そもそも「マクロ言語」と「高級言語」は根本が違う、古来からある「マクロ言語」の良い所です。「マクロ言語」本来の利点を活かしたマクロの作り方いうのをしていう、それ知らないと勉強時間の大損にしかなりません!
全ては、
関係ないところで悩んであなたの貴重な時間を浪費しなくてすむために・・・、です。語学でも何でもそうです。(結局、何の役にも立たなかった文法重視の学校英語での失敗いうのをよく思い出してみてください。笑)
要するに、
「マクロの記録」のうまい利用法を知らないと(理解できてない人から教わってしまうと、)マクロの言語が全く間違った解釈になってしまって、どんなに長い時間を掛けて勉強してもまったくマクロ作れない状態・・になってしまうというだけです。(それ、本屋で買ったVBA本にはよくある話ですね。笑)
皆さん、この辺はもう 重々よろしいでしょうか?