<p>VBAのスケジュール表自動作成というのは『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』にあるVBAで自動でできるようにしたスケジュール表のことです。</p>
<p>&nbsp;</p>
<p>スケジュール表というと何となくたいしたことはないイメージがあります。自分も最初は「簡単なシステムなんだろうな」と思っていました。しかし本書の大きさは大型本サイズでさらに全部で430ページ程になるなどボリュームがあります。</p>
<p>&nbsp;</p>
<p>ですから、「スケジュール表なんて簡単そうなのになんでこんなに分厚いんだろう・・・。」と不思議に思っていました。けれども本書をひととおり読んでみて、簡単なシステムといっても実際に手を使ってコードをうちこんでいくことでいろいろ学ぶものがありました。</p>
<p>&nbsp;</p>
<p>今回はこのことについて思ったことを書いていってみます。</p>
<p>&nbsp;</p>
<h2>『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』を読むきっかけや目的</h2>
<p>このブログではVBAというプログラミング言語のすごさやその効果について何度も書いてきました。それからVBAについて本格的に勉強を始めてからは『VBAエキスパート公式テキスト Excel VBA ベーシック』や『VBAエキスパート公式テキスト Excel VBA スタンダード』を読んだり、業務で本で学んだ知識を利用して簡単にプログラムをつくってきました。</p>
<p>&nbsp;</p>
<p>ある程度時間が経ち、多少VBAというものがわかってきたのでもう少しまとまったシステムをつくってみたいと考えるようになりました。そこで手に取ったのが『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』です。</p>
<p>&nbsp;</p>
<p>他にもVBAに関するまとまったシステムをつくる方法が書かれた本はいくつかあったのですが、他の本に比べて本書はVBAの公式テキストの内容に近いステートメントや関数が使われており、何より初心者がちょっとしたシステムをつくってみたいと思った時にそれ程難しくない内容だと感じました。</p>
<p>&nbsp;</p>
<p>そういった経緯からVBAのツボとコツの本を選んだという次第です。</p>
<h2>スケジュール表の簡単な概要</h2>
<p>エクセル上でスケジュール表をつくるとなると、単純に年・月・日と曜日、そしてその日何をするかが書けるちょっとしたスペースがあるスケジュール表であればすぐにできそうなイメージがあります。</p>
<p>&nbsp;</p>
<p>自分も最初は『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』でつくるスケジュール表というのはそんなイメージがあって簡単に出来るものだろうと思っていました。しかし実際つくるとなると全然違いました。</p>
<p>&nbsp;</p>
<p>本書における「スケジュール表自動作成」のスケジュール表というのは基本的にエクセルのワークシート上において次のようにつくっていきます。</p>
<ul>
	<li>A1セルに年度</li>
	<li>A列に月</li>
	<li>B列に日</li>
	<li>C列に曜日</li>
	<li>D列は少し幅を広げて、その何をするかのスペースにする</li>
	<li>土曜日、日曜日の休日と祝日に色をぬる</li>
</ul>
<p>といった感じでつくっていきます。一見すると何の変哲もない簡単なスケジュール表に見えます。手作業とかオートフィルを使ってもそれほど難しくはないんじゃないか、何もVBAを使ってコードを入力していくまでもないように見えます。</p>
<p>&nbsp;</p>
<p>しかし、このスケジュール表を自動作成するためには、様々な状況やパターンが想定して書かれており、そのために430ページというボリュームになっています。</p>
<p>&nbsp;</p>
<p>ではもう少し具体的に、このスケジュール表自動作成にはどういった機能があって、それを実現するための方法にはどんなものがあるのかについて、次の項目でまとめていきます。</p>
<h2>実際の仕事においてどのようにコードが入力されていくのか</h2>
<p>スケジュール表自動作成というシステムをつくるためにどういった方法で進めていくのか、というのが本書においては次のように書かれています。</p>
<ul>
	<li>ブック新規作成</li>
	<li>期間とスケジュール欄の列幅を固定値で、月・日・曜日と罫線を描画</li>
	<li>指定した期間とスケジュール欄の列幅で、月・日・曜日と罫線を描画</li>
	<li>印刷範囲設定</li>
	<li>土日祝日のセル背景に色を付ける</li>
	<li>フォーム化</li>
	<li>エラー処理追加</li>
</ul>
<p>パッとみるとそれほど難しくはないように思えますが、VBA初心者が勉強するうえではそうでもありません。上記のような感じで進んでいくにあたって、本書において主に以下の項目がVBAプログラミングで新たに学べるものとなっています。</p>
<ul>
	<li>罫線の引き方</li>
	<li>日付関係の各種関数</li>
	<li>印刷範囲の設定方法</li>
	<li>変数のより高度な使い方</li>
	<li>VBEのデバッグ機能の使い方</li>
	<li>ファイル操作</li>
	<li>2次元配列の使い方</li>
	<li>組み込みダイアログの利用</li>
	<li>スピンボタンやフレームなどのフォーム</li>
	<li>エラー処理</li>
	<li>配列の要素数の操作</li>
	<li>オリジナルのデータ型の定義</li>
</ul>
<p>『VBAエキスパート公式テキスト Excel VBA スタンダード』にも書いていないことが結構あります。それと同時に本書を読み始めてから、「スケジュール表というと単純そうな感じがするけど、確かにこんな機能も考えられるよな」とか「こういった方法もあるんだな」といった感じでたくさんの気付きがありました。</p>
<p>&nbsp;</p>
<p>本書ではスケジュール表自動作成というシステムをつくっていくという内容になっていますが、そのために「段階的につくりあげていく」というアプローチをとっています。その理由は次のように書かれています。</p>
<blockquote>
<p>p.30</p>
<p>アプリケーションの規模が大きいということは、プログラミングで実装する機能の数が多かったり、1つの機能そのもののコード量が多かったりします。すると、コードの記述ミスなどによって不具合が発生する確率が上がり、それぞれの機能が最初から一発ですべて意図通りに動く確率が下がってしまいます。</p>
<p>&nbsp;</p>
<p>Excel VBAでのアプリケーション制作において、アプリケーションの規模が大きくなればなるほど大切になるコツは、前作でも登場した「段階的に作り上げていく」です。</p>
</blockquote>
<p>確かにそうだなと思いました。自分も職場でVBAを使って簡単なプログラムを作ったときは「今はまだそんなにコードは多くないけど、これが何千行、何万行にもなったらどうやって進めていけばいいんだろう」と考えていました。</p>
<p>&nbsp;</p>
<p>確かに少しずつコードを入れていって、その都度動作を確認していった方が現実的です。本書ではこの「段階的に作り上げていく」という方法が一貫して使われています。</p>
<p>&nbsp;</p>
<p>もう少し詳しく書くと、</p>
<p>一旦思いつくやり方でやってみる→ある程度つくったら見直しをしてもっと簡単に処理できるステートメント関数へ修正→withステートメントを使って重複したコードをまとめていく、この繰り返しといった感じです。</p>
<p>&nbsp;</p>
<p>なるほど、実際の仕事の現場でもたぶんこういった感じで進められているのでしょう。どんなステートメントや関数、機能があるのかという面もそうですが、実際の業務の進め方という面でもいろいろとイメージができて勉強になる本です。</p>
<h2>デバッグとエラー処理</h2>
<p>システムをつくるとなると、様々な状況を想定してデバッグやエラー処理も必要になってきます。自分は今まではプログラムは作ったら作りっぱなしで、その後「不具合が出たらどう処理するか」までは全然考えていませんでした。こういった面でも本書は勉強になります。</p>
<p>&nbsp;</p>
<p>『VBAエキスパート公式テキスト Excel VBA スタンダード』ではデバッグやイミディエイトウィンドウなど簡単にしか説明されていないのですが、『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』では具体的にどういった場面でどの機能を使えばいいのかが書かれています。</p>
<p>&nbsp;</p>
<p>「おっ」と感じた部分もたくさんあったのですが、その中のひとつがウォッチウィンドウを使う時にコードには記述されていないウォッチ式を追加して値を確認できる、といったものです。</p>
<p>&nbsp;</p>
<p>説明するのは難しいのですが、実際の論理エラーを想定してそういった時はどうすればいいのかが詳しく書かれており、興味がある方は本書を見ていただければと思います。</p>
<p>&nbsp;</p>
<p>本書はスケジュール表自動作成のエラー処理についても書かれています。その考え方として「自分がシステムをつくってもユーザーが意図通りシステムを使ってくれるとは限らない。時にはこちらが全く想定しない使い方をするかもしれない。そうなった時のためにも何らかの処理を準備しておく必要がある」といったものです。</p>
<p>&nbsp;</p>
<p>確かに言われてみればそうだなぁと思いました。別にいたずらするつもりはなくても、何かの拍子で手が滑ってとんでもない数値を入れてしまったり、気づかずに全然違う値を入れてしまうという状況はあり得ます。</p>
<p>&nbsp;</p>
<p>そうなった時のためにどんな対応方法が書かれているのが本書のエラー処理の部分です。この部分もVBAで配列では対応できない場合はTypeステートメントを使ってこういう方法もある、といったことが書かれており学べる部分がたくさんあると感じました。</p>
<h2>フォームモジュールやFunctionプロシージャの活用</h2>
<p>『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』の中の一番の見所はたぶんここでしょう。第5章の「フォームから期間とデザインを指定可能にしよう」という所です。</p>
<p>&nbsp;</p>
<p>VBAとかプログラミングと聞くと、単純に業務の自動化、ボタンを押したら何らかの処理が自動で行われるといったイメージがありますが、VBAにはそれだけではなく「フォームの作成」ができる機能があります。これがVBAの幅を広げているとも言えると思います。</p>
<p>&nbsp;</p>
<p>この第5章ではフォームを使ってスケジュール表自動作成の開始日と終了日の設定、休日祝日のセルにどの色を使うかの選択などを設定できるようにしていくのですが、この部分ではどのようにコードを入れていくのかがすごく勉強になりました。</p>
<p>&nbsp;</p>
<p>このフォームにこのコードを入れたらAという処理が実行されて、別のフォームに入れたBというコードはCに数値を入れたら処理が実行されるといった具合に、「処理がいろんな所を飛ぶ」のが、「あぁなんかシステムっぽいなぁ」と感じました。</p>
<p>&nbsp;</p>
<p>会計ソフトとか実際に企業内で使われるようなシステムもこんな感じなのかなぁと思いました。</p>
<p>&nbsp;</p>
<p>本書の第5章を読んでいておもしろいと思ったのは、VBAで用意されているコンボボックスとかスピンボックスなどのフォームを使うのではなく、「既にある色を選択できるダイアログボックス」なども利用できる点です。</p>
<p>&nbsp;</p>
<p>これはエクセルの画面の上にあるリボンから手作業で開くのではなく、ちゃんとVBAでのコードを利用することで開いたり使えたりするのです。「あぁそういったやり方もあるのかぁ」とVBAとかエクセルというものが自分の中ですごく可能性というか使い勝手が広がっていくような感じがしました。</p>
<h2>ワードプレステーマで使われるモジュールテンプレートの数</h2>
<p>たぶんエクセルのVBAでコードを入力する場所としての「モジュール」にあたるものが、ワードプレスのテーマにおいて「モジュールテンプレート」というものに対応するのではないでしょうか。（間違えていたら許してください）</p>
<p>&nbsp;</p>
<p>このブログで使わせていただいてるワードプレスのテーマが「simplicity」というものであり、わいひらさんという方が作成したものです。</p>
<p>&nbsp;</p>
<p>で、その管理画面からカスタマイズ→テンプレートの編集でこのテーマで使われているモジュールテンプレートが100個程あります。親テーマとか子テーマとかいろいろ種類があるのですが、最も多いところでこのテーマを構成していると考えられるコードが書かれたモジュールが100個程あるということです。</p>
<p>&nbsp;</p>
<p>何が言いたいかというと、こういった使いやすいテーマを作れるプロというのは本当にすごいというのと、これぐらいの規模のコードを書く必要があるんだなぁという点に気づいたことです。</p>
<p>&nbsp;</p>
<p>今までの自分であれば、テーマの数とかモジュールテンプレートの数とか全然気にもとめていませんでした。</p>
<p>&nbsp;</p>
<p>しかし、『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』を通して実際に自分の手でコードを入力していくことでその大変さに気づきました。だからこそこのブログのテーマのように、プロの方がつくるシステムがどれだけすごいのか、ということが少しですが理解できた気がします。</p>
<p>&nbsp;</p>
<p>やっぱり実際に経験してみないとその凄さというのはわからないものです。もちろん全部を理解したわけではありません。</p>
<p>&nbsp;</p>
<p>けれどもコードの分量とかここにチェックマークをつけたらこのコードが反応してここに繋がってくるんだなとか、全然素人視点ではあるのですが想像を巡らせるとこれだけの複雑な構造を構築できる製作者の方というのはどれだけすごいのだろうか、と途方に暮れてしまいます。</p>
<p>&nbsp;</p>
<p>以上のようなことからタイトルにもあるように、プログラマーとかSEとかその道のプロというのは本当にすごいと感心したというお話です。</p>
<h2>あわせて読みたい</h2>
<ul>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/03/20/1021">オブジェクト型変数や誤字脱字などプログラミングでやりそうなミスについて</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/25/1129">VBAプログラミングで仕様変更にも動的に対応できるコードという発想について</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/17/2712">経理業務でデバッグツールが使えたり会計ソフトが学習できたら便利なのに</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2018/02/03/1303">VBAが使える範囲はエクセルの他にMicrosoft系列以外にも及ぶ</a></strong></li>
	<li><strong><a href="https://www.chishikinosoukonoseiri.com/entry/2017/12/31/0830">業務を自動化できる技術を持たないと自動化される時代が来るかもしれない</a></strong></li>
</ul>