VBAにおいて他の言語との違いの一つにVBAではクラスを使用することが少ないということあると思います。これをもってVBAが低レベルの言語と思われるところもあるのですが、自分でもExcelマクロというのはあくまでもパーソナルな範囲で業務効率化するものという位置づけのためクラス化してまでマクロを作るということはほぼありません。ただ、クラスという概念は参照設定で他のアプリケーションを使用する際に重要になってくるので、ここでまとめておきたいと思います。
クラスというのはよく「設計書」にたとえられます。例えば、ハウスメーカーが家を建てる際に毎回一から設計しているとは考えにくく、通常は基本の設計図がありそこから顧客のニーズをくみ取って追加・削除していると考えるのが普通です。その基本設計図が「クラス」ととらえます。
では、実際に顧客のニーズに合った設計図を作ろうとした際にその「クラス」である基本設計書の原本を引っ張り出して使うでしょうか?それだと他で使いまわしできないですよね。通常、原本はデータ化され「マスタ」として管理されているはずです。そのマスタの基本設計書である「クラス」を呼び出してそこに加筆修正していくと想定したとき、そのマスタの「クラス」を呼び出して顧客用の設計図ファイルを作るという操作が「インスタンス」ということになります。「インスタンス」をする動作を「new」キーワードで行うと考えてみてください。
別の言い方をすれば、会社における申請書のテンプレートファイル=「クラス」であり、そのテンプレートをコピーする行為が「インスタンス」ということになります。申請書を毎回一から各個人が作成するより、「クラス」たるテンプレートファイルを作っておいたほうが便利ですよね?ただ、テンプレートそのものを使われてしまったら別のファイルになってしまい他の人が使えなくなってしまいます。クラスも同じで、クラスそのものを使うのではなく、テンプレートを別ファイルにする=インスタンスにするという理解が分かりやすいのかと思います。
なぜ急にクラスの話を持ち出したかというと、最近クライアントが使用しているExcelファイルのサポートする機会が多く、自分では当たり前に行っているExcelでの設計や関数の選択に「どうやってそういう考えが思いつくのですか?」と聞かれることが多々あります。自分ではそれが普通と思っているので説明がしにくいところではありますが、Excelが得意な人とそうでない人の差は何か?を考えた際にこのテンプレート化するという概念が非常に重要なのではないかと思います。
つまり、Excelが得意な人はデータ更新した際になるべく最小限の労力でupdateできることを無意識ながら考えながら作っているのではないかなと。また作業する過程において①加工していない元データは何か?②最終ゴールは何か?③どういうルールで処理をするのか?というのを意識している気がします。
この考え方はExcelというよりも日々の業務をしていくうえで非常に役立っていますし、特にテンプレートを作る(標準化する)ことに労力を惜しまなくなったというのが一番のメリットだと思います。標準化やテンプレート化による業務効率化については全員賛成するといいながら、実際には誰もつくらないし作る時間に対しては上司から作業が遅いといわれる始末。その結果、誰も業務効率化するモチベーションがないというのが現実ではないでしょうか?(そういう現場を嫌というほど経験してきました)
全体のプロセスを俯瞰し必要な事前準備に時間をかけながら全体として効率化するというのはマネジメントの基礎でもありますし、また最適な数式を考えること自体がロジカル・シンキングの一つではないかと思いますので、そういう観点からExcelを勉強するメリットをアピールできるのではないかと考えています。
