VBAのスケジュール表自動作成でSEやプログラマーのすごさを垣間見た気がした

VBAのスケジュール表自動作成というのは『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』にあるVBAで自動でできるようにしたスケジュール表のことです。

 

スケジュール表というと何となくたいしたことはないイメージがあります。自分も最初は「簡単なシステムなんだろうな」と思っていました。しかし本書の大きさは大型本サイズでさらに全部で430ページ程になるなどボリュームがあります。

 

ですから、「スケジュール表なんて簡単そうなのになんでこんなに分厚いんだろう・・・。」と不思議に思っていました。けれども本書をひととおり読んでみて、簡単なシステムといっても実際に手を使ってコードを入力していくことで学ぶものがたくさんありました。

 

今回はこのことについて思ったことを書いていってみます。

スポンサーリンク

『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』を読むきっかけや目的

このブログではVBAというプログラミング言語のすごさやその効果について何度も書いてきました。それからVBAについて本格的に勉強を始めてからは『VBAエキスパート公式テキスト Excel VBA ベーシック』や『VBAエキスパート公式テキスト Excel VBA スタンダード』を読んだり、業務で本で学んだ知識を利用して簡単にプログラムをつくってきました。

 

ある程度時間が経ち、多少VBAというものがわかってきたので、もう少しまとまったシステムをつくってみたいと考えるようになりました。そこで手に取ったのが『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』です。

 

他にもVBAに関するまとまったシステムをつくる方法が書かれた本はいくつかあったのですが、他の本に比べて本書はVBAの公式テキストの内容に近いステートメントや関数が使われており、何より初心者がちょっとしたシステムをつくってみたいと思った時にそれ程難しくない内容だと感じました。

 

そういった経緯からVBAのツボとコツの本を選んだという次第です。

スケジュール表の簡単な概要

エクセル上でスケジュール表をつくるとなると、単純に年・月・日と曜日、そしてその日何をするかが書けるちょっとしたスペースがあるスケジュール表であればすぐにできそうなイメージがあります。

 

自分も最初は『続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本』でつくるスケジュール表というのはそんなイメージがあって簡単に出来るものだろうと思っていました。しかし実際つくるとなると全然違いました。

 

本書における「スケジュール表自動作成」のスケジュール表というのは基本的にエクセルのワークシート上において次のように表示されるようにしていきます。

  • A1セルに年度
  • A列に月
  • B列に日
  • C列に曜日
  • D列は少し幅を広げて、その何をするかのスペースにする
  • 土曜日、日曜日の休日と祝日に色をぬる

といった感じでつくっていきます。一見すると何の変哲もない簡単なスケジュール表に見えます。手作業とかオートフィルを使ってもそれほど難しくはないんじゃないか、何もVBAを使ってコードを入力していくまでもないように見えます。

 

しかし、このスケジュール表を自動作成できるようにするためには、様々な状況やパターンの想定、それによる機能の追加などが書かれており、そのために430ページというボリュームになっています。

 

ではもう少し具体的に、このスケジュール表自動作成にはどういった機能があって、それを実現するための方法にはどんなものがあるのかについて、次の項目以降でまとめていきます。

実際の仕事においてどのようにコードが入力されていくのか

スケジュール表自動作成というシステムをつくるためにどういった方法で進めていくのか、というのが本書においては次のように書かれています。

  • ブック新規作成
  • 期間とスケジュール欄の列幅を固定値で、月・日・曜日と罫線を描画
  • 指定した期間とスケジュール欄の列幅で、月・日・曜日と罫線を描画
  • 印刷範囲設定
  • 土日祝日のセル背景に色を付ける
  • フォーム化
  • エラー処理追加

パッとみるとそれほど難しくはないように思えますが、VBA初心者が勉強するうえではそうでもありません。上記の形で進んでいくのと並行して本書では主に以下の項目がVBAプログラミングで新たに学べるものとなっています。

  • 罫線の引き方
  • 日付関係の各種関数
  • 印刷範囲の設定方法
  • 変数のより高度な使い方
  • VBEのデバッグ機能の使い方
  • ファイル操作
  • 2次元配列の使い方
  • 組み込みダイアログの利用
  • スピンボタンやフレームなどのフォーム
  • エラー処理
  • 配列の要素数の操作
  • オリジナルのデータ型の定義

『VBAエキスパート公式テキスト Excel VBA スタンダード』にも書いていないことが結構あります。それと同時に本書を読み始めてから、「スケジュール表というと単純そうな感じがするけど、確かにこんな機能も考えられるよな」とか「こういった方法もあるんだな」といった感じでたくさんの気付きがありました。

 

本書ではスケジュール表自動作成というシステムをつくっていくという内容になっていますが、そのために「段階的につくりあげていく」というアプローチをとっています。その理由は次のように書かれています。

p.30

アプリケーションの規模が大きいということは、プログラミングで実装する機能の数が多かったり、1つの機能そのもののコード量が多かったりします。すると、コードの記述ミスなどによって不具合が発生する確率が上がり、それぞれの機能が最初から一発ですべて意図通りに動く確率が下がってしまいます。

 

Excel VBAでのアプリケーション制作において、アプリケーションの規模が大きくなればなるほど大切になるコツは、前作でも登場した「段階的に作り上げていく」です。

確かにそうだなと思いました。自分も職場でVBAを使って簡単なプログラムを作ったときは「今はまだそんなにコードは多くないけど、これが何千行、何万行にもなったらどうやって進めていけばいいんだろう」と考えていました。

 

確かに少しずつコードを入れていって、その都度動作を確認していった方が現実的です。本書ではこの「段階的に作り上げていく」という方法が一貫して使われています。

 

もう少し詳しく書くと、

 

一旦思いつくやり方でやってみる→ある程度つくったら見直しをしてもっと簡単に処理できるステートメントや関数へ修正→withステートメントを使って重複したコードをまとめていく、この繰り返しといった感じです。

 

なるほど、実際の仕事の現場でもたぶんこういった感じで進められているのでしょう。どんなステートメントや関数、機能があるのかという面もそうですが、実際の業務の進め方という面でもいろいろとイメージができて勉強になる本です。

 

コメント