はじめに
過去ほとんどプログラミングに触れてこなかった社会人が、VBAの勉強を始めて「作りたいもののイメージができる」「時間はかかるがコードからある程度仕組みが理解できる」と感じられるようになったので、それまでの勉強法をまとめます。
参考書通りの一般的な勉強法とは異なるので、「参考書での勉強が続かない」「理屈より実践で覚えたい」という方の参考になれば幸いです。
この記事の対象読者
- 参考書での勉強が続かない方
- 理屈より実践で覚えたい方
- プログラミング経験がほぼない社会人
- Excel業務の効率化に興味がある方
自己紹介
勉強前のレベル
私は理系出身ですが、専攻は機械設計だったため、プログラミングにはほとんど触れてきませんでした。
- 分岐処理や繰り返し処理の存在は知っているが、コードは書けない
- ExcelはVLOOKUPなど一般的な関数を使えるレベル
- プログラミングに対する苦手意識はそこそこある
なぜVBAから始めたか?
1. 前任者のVBAマクロを引き継ぐ必要があった
実務で必要なため、強制的に触ることに。
2. 環境構築が不要
Excelがあればすぐに始められる手軽さは大きな利点。これは初心者にとって重要。
3. 作りたいものが見つけやすい
Excel業務の自動化など、「やりたいこと」が明確で、動機づけしやすい。
私自身がまだ初心者だからこそ「環境構築の難易度の高さ」や「とっつきにくさによる参入障壁」、「分からないことが分からない状態」についてはよく分かるつもりです。
ExcelVBAがおすすめ!!!とは言いませんが、プログラミングを知るということに関しては適していると思います。
私の勉強方法(実践ベース)
私は「教科書を最初から読む」勉強法が苦手です。その代わり、作りたいものベースで学ぶ方法を取りました。
イメージは「教科書を読んでからテストを受ける」ではなく、「テスト問題を解きながら教科書を調べる」という学び方です。
まずは 作りたいもの を具体的に決めます。
例としてエクセルで 「リストから特定の品番に備考(注意点等)を入力する機能」 を作成します。
Step1. 作りたいものを決める
まず、やりたいこと(ゴール)を具体的に決めます。
例:エクセルのリストから特定の品番に注意点(備考)を入力する機能
「作りたいものがない」という場合は、日常のExcel作業を思い出してください。
以下のような作業は自動化できる可能性が高いです:
データ整理系
- 複数のシートから特定条件のデータを抽出
- 重複データの削除や整理
- データの並び替えや書式統一
- フィルター等で特定のデータだけ取り出す
レポート作成系
- 月次レポートの自動生成
- グラフの自動作成と更新
- 複数ファイルのデータ集計
入力補助系
- 入力フォームの作成
- マスタデータからの自動入力
- 入力チェック機能
Step2. その作業を"言語化"する
次に、それをどんな工程で実行するか、人間の作業ベースで細かく書き出します。
例(作業の分解):
- 入荷リストのブックを開く
- 確認するシートを選ぶ
- 品番の範囲を確認する
- 1件ずつ品番をチェックし、対象品番なら備考を記入
- 次の品番へ移動して繰り返す
「こんなことまで書く?」と思うくらい細かく分けるのがコツです。
Step3. 1工程ずつコードの意味を調べ、コメントを書く
これが最重要ステップです。
例えば「Excelブックを開く」という処理を調べると、以下のようなコードが出てくると思います。
Sub Sample1()
Dim listFullName As String
listFullName = "C:\Book1.xlsx"
Dim wbList As Workbook
Set wbList = Workbooks.Open(listFullName)
Dim wsList As Worksheet
Set wsList = wbList.Sheets("リスト")
End Sub
この内容に対して1行ずつ意味を調べてコメントを入れます。
中学校の英語の授業のイメージで全ての単語の意味を調べてください。
Sub Sample1()
Dim listFullName As String '文字列を入れる為の変数を宣言
listFullName = "C:\Book1.xlsx" '開きたいExcelのフルパスを格納
Dim wbList As Workbook 'Excelブックを入れる為の変数を宣言
Set wbList = Workbooks.Open(listFullName) 'Excelを開きながら変数に格納、Openメソッドで引数にフルパスを入れる
Dim wsList As Worksheet 'Excelのシートを入れる為の変数を宣言
Set wsList = wbList.Sheets("リスト") '「リスト」という名前のシートを変数に格納
End Sub
変数宣言とかは型名含めて理解できるようになればコメントを省略しても良いと思います。
「なんとなく理解」ではなく、「少しの応用が自分で書ける」レベルまで掘り下げます。
応用ができるようになったら自分が求めている機能に変更して実装をします。
以上内容を繰り返して作りたいものの作成を進めてください。
この方法のメリット
知識の吸収が早くなる
作りたいものが明確なので、調べる目的も明確。
モチベーションが続く
作ったものがすぐ使えるので達成感がある。
分からないところが分からない状態になりにくい
一行ずつ理解する為、正しく動作しない時に原因箇所の予測ができる。
参考書の理解が後から深まる
ある程度経験してから参考書を読むと、足りない部分を補ってくれるので理解しやすい。
この勉強法で注意すること
1. エラーを恐れない
最初は動かないことの方が多いです。エラーメッセージを読んで、一つずつ解決していきましょう。
2. 完璧を求めすぎない
最初から完璧なコードは書けません。まず動くものを作り、後から改善していく姿勢が大切です。
3. コピペだけで終わらせない
ネットで見つけたコードをコピペして動いても、必ず一行ずつ意味を理解しましょう。
4. 小さく始める
いきなり大きなシステムを作ろうとせず、小さな機能から始めましょう。
この勉強法の次のステップ
この方法である程度コードが書けるようになったら:
1. コーディング規約を学ぶ
保守しやすいコードの書き方を学びましょう。
2. エラーハンドリングを学ぶ
予期しない動作への対処方法を身につけましょう。
3. 参考書を読み直す
実践経験があると、参考書の内容がより深く理解できます。
おわりに
最近プログラミングの勉強を始めた仲間から
「よくプログラミングは『実務ベースで勉強するほうがおすすめ』みたいなこと聞くけど、具体的にどうしたらいいのかわかりにくい」
ということを聞き、自分の勉強法の記録を残すことにしました。
どんな勉強法でも「調べて、理解する」工程は避けて通れません。参考書をコツコツ読むのが苦手な方は、ぜひこの方法を試してみてください。