ここ最近の過去記事では以下のようなことを書いてきました。
- ExcelVBAの凄さに気づいた
- そのためExcelVBAの勉強を始めて、それに乗じてAccessVBAの勉強も始めた
- 勉強した甲斐があってExcelVBAでシステムをつくる仕事に就けた
以上が今までの簡単な流れになりまして、ExcelVBAを使ってシステムをつくるようになって数ヶ月が経とうとしています。
経理の仕事をしていた時とは違い、良くも悪くも今までとは違った非常に濃密な時間を過ごせてきていると思います。
SEと言えるほどそこまで専門的なことができているかどうかはわかりませんが、今の仕事に就く前に勉強しておいたことが非常に役立っていると感じています。
経理から今の新しい仕事に移ってから、いろいろと気づいたことがあったので今回はそのことについて簡単に整理していってみようかと思います。
なぜそれほど問題なくコーディングができたのか
単純に「思ったよりもできた」というのは自分にとって嬉しい誤算でした。思ったよりもできた、というのは例えば上長から「このシステムつくって」と指示されて特に問題もなく指示通りにシステムをつくることができている、ということです。
この理由としては、結果として事前にちゃんと勉強することができていた、ということになると思います。このブログでは以下のような過去記事を書いています。
ExcelVBAを使う仕事をするためには、上記で書いたようなレベルの知識が必要だと思って勉強してきました。もちろんこれらの知識が役立ったのですが、これらに加えてExcelVBAで実際にシステムをつくる系の本も大いに役立ちました。
というか、今の状態はその本のおかげだと思っています。なぜなら今の会社に入ってから、担当したシステムが「ほぼ見たことがある」という感覚が持てているからです。
こういった感覚って非常に大事で、一度でも同じような経験があると、「あぁ、あれか」という感じで思い出せて、記憶のデータベースから必要なコードを引っ張って来れます。
例えば「この場合は、Findメソッドを使えば良かったんだよな」とか、「ファイルを操作するのって確かファイルシステムオブジェクトっていうのを使えばよかったんだよな」といった感じで思い出せるからです。
本を通してひとつでもシステムを作り上げるという経験をしておかないと、精神的に不安な中、全くの0から時間をかけてなんとかシステムを組み上げる、という苦労をしなければいけなくなります。
立山秀利さんの「ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」シリーズの効果
こういった感覚が持てるようになった本というのは、立山秀利さんが出している「ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」シリーズです。このシリーズの本はだいたい読んだと思います。
以下に列挙したのがシリーズを通して勉強できる主だったシステムになります。以下のシステムについてはこのブログの過去記事でも言及しています。
- 請求書作成
- スケジュール表作成
- ガントチャート表作成
- 自動メール作成
他にもあったかもしれませんが、上記のシステムをつくる勉強をしていたおかげで、現在の仕事も当初想定していたよりも全然スムーズに進められています。(本当に勉強しておいて良かった)
この理由として、ExcelVBAをちゃんと勉強できていたということに加えて、立山秀利さんの本から
- プログラミングのスキル
- アプリケーションを作り上げるノウハウ
を見につけることが出来ていたのではないかと思います。
「続 ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本」では、次のように書かれている部分があります。
P.14
入門書などでExcelVBAの基礎を一通り学んだものの、日常の仕事のなかで、ExcelVBAを実際にどう使えばよいのか、わからないという方が多いかと思います。
確かにこれはあるなと思います。自分がExcelVBAを勉強し始めた時の会社では、「具体的にどのようにコードを組めば業務で役立つシステムができるのか」というのが全然わかっていませんでした。
典型的だなと感じたのは立山さんの本の「請求書作成システム」をつくる時に、エクセルの別シートから該当するデータを請求書シートに順次代入していくというコードです。
例えば請求書システムの作成において、「売上」シートのセルA2から下方向に順に見ていって、取引先「A」のデータ「だけ」を「請求書」シートに順番に代入していく処理が必要だったとします。
一般的にFor文を使う場合、変数はiを使います。しかし、変数がひとつだけでは、請求書システムをつくるのは上手くいきません。
なぜならもうひとつの変数を上手く使わないと、売上シートでセルA2とセルA10に取引先「A」があった場合、請求書シートへの代入も同じ行の分だけ間隔が空いてしまうからです。
このような処理ではなくて、請求書シートに取引先「A」の代入をした時だけ、次はひとつ下のセルに代入できるようにする必要があります。
つまりは、
Dim i As Long For i 2 to 50 Sheets("請求書").Cells(i+10,1).Value=Sheets("売上").Cells(i,1).Value Next i
上記のようなコードでは駄目で、以下のようなコードにする必要があります。
Dim i As Long Dim j As Long:j=1 For i 2 to 50 If Sheets("売上").Cells(i,1).Value="A" Then Sheets("請求書").Cells(j+10,1).Value=Sheets("売上").Cells(i,1).Value j=j+1 End IF Next i
上のコードと下のコードで何が違うかというと、下のコードには「IF文」と「j=j+1」が追加されています。
特にj=j+1が大事です。このコードは売上シートの取引先「A」を請求書シートに代入したら、次に請求書シートに代入する時に先ほどのひとつ下のセルに代入する、という意味になります。
何年もプログラミングをしてきた人なら全然なんてことない技巧かもしれません。ですが、自分のような全くの素人が、ただExcelVBAの教科書を勉強してきただけではまず思いつかない方法です。
初めてこのコードを見て意味を理解した時は、ちょっと感動したというか、「あ、なるほど」と思わずにはいられませんでした。
以上のようなことから、「実際にシステムをつくってみる」ことで「具体的にどんな技巧が必要になってくるか」という点を学ぶことができた立山さんの本は、自分が実務に取り組む上で非常に役に立ったといえます。
もし事前に、何もシステムをつくる経験をしていなかったら
逆に、実際にシステムをつくることが学べる本を読んでいなかったら、実務では全然システムを組み上げることができず、就職先の上長から能力不足の烙印を押されていたことでしょう。
今のひとつ前の会社では、とりあえずマクロとか多少なりとも自分でつくったプログラムを業務で使ってみたりはしていました。しかし今だからわかりますが、もう少しまとまった専門的なシステムをつくるためにはそれだけでは足りなかっただろうなと思います。
当時自分がつくっていたものは、別の言い方をすれば非常に断片的、一時的な状況にしか使えず、例えば何らかの都合で表の行が増えたりデータが変わったりしたらそれだけで対応できないものだったからです。
それが現在の規模で、エクセルの表の上で多少の変化があってもそれなりに対応できるシステムをつくれるようになったのは、本書のおかげです。
ExcelVBAを使う仕事に就く上で、どんなプロパティやメソッド、ステートメントがあるのかを勉強することはもちろん必要なのですが、それに加えて「実際にそれなりの規模のシステムを作ってみる」という経験は非常に重要だと、身にしみて感じました。
これは一見すると、実際に仕事をしないと経験できないことのように思われますが、市販の本でも十分勉強することが出来ます。というかここまで書いてきたように、この時に学べる知識や経験が実務で非常に活きてきます。
自分のようにプログラミング未経験の人間がシステムをつくる仕事に就くことを考えている人がいたら、市販の本を通していくつかシステムをつくってみることを是非お勧めします。
コメント