参考1人ではマクロの勉強が続かず分からなくなった時はこちらへお進みください。
マクロを勉強する人達を助けるロードマップを作成
Excelマクロ(VBA)の勉強を始めた当初私は「何から勉強したら良いのか?」について常に悩んでいました。
どこから手を付けて良いのか?何を見たら良いのか全然分かりませんでした。
単純に「だれか助けてください」と思っていました。
- 自分のやりたい事を実現するには何から勉強したら良いのか
- 分からない事を放置して先に進んでも良いのか
- ExcelVBAの全てを覚える必要があるのか
書籍を読んでも「順番に読めば良いのか?」、「分からない所は飛ばしても良いのか?」判断がつきません。
動画を探すにしてもきっかけが無いのでどんな動画を選んだら良いのか分かりません。
仕方ないのでスクールに任せて勉強しようと思っても費用と気持ちのバランスが取れず申し込めませんでした。
勉強を重ねた事で自分では分かるようになりました。しかし自分しか理解できていません。
例えば「他者に説明してください」と言われた時にうまく説明できる様ツール化できていませんでした。
そこで今回効率良くマクロを学習する為のロードマップとして画像を2つ作成しました。
やりたい事ができる様になるには一定のレベルまでのスキルアップが必要です。
機能毎にレベル分けをしています。順番通り勉強していただく事で一定のレベルまで成長できる仕様にしました。
勉強初期から自分のやりたい事ができる様になるには何を勉強したら良いのかを視覚でとらえて認識しましょう。
ご注意下さいVBAエキスパートや基本/応用情報技術者試験等の資格試験については別途勉強方法をご検討ください。
関連記事
勉強する順番は以降の記事で解説します。勉強の方向性が分かったら次はコンテンツ選びです。
VBAの勉強を継続する為にはライフスタイルや性格を考慮した勉強方法を選択する必要があります。
リンク先の記事には質問にYes,Noで回答すると最適なコンテンツが選択できる画像を用意しています。
作業時間は1分程度です。最適な勉強方法を見つけてVBAを習得してください。
関連書籍
勉強を始めるにあたりテキストを1つ決めましょう。
どんなテキストでも良いというわけではなく「読み物として非常に簡単に理解できる」書籍を1つ選びましょう。
VBAが理解できなくても読み物として理解出来ていれば勉強を進めることが出来る可能性が高い為です。
こちらは電子書籍です。携帯さえあれば勉強出来るよになるのでさらに勉強を継続できるようになりますよ。
自分のやりたい事を実現するには何から勉強したら良いのか
冒頭で紹介した3つの疑問(質問)に答えていきます。
まずは「自分のやりたい事を実現するには何から勉強すると効率が良いのか」です。
この順番で勉強してくださいというサンプルケースを画像にまとめました。
勉強する順番をリスト化しました
画像を2枚提示します。1枚目は勉強初期から初心者までの道のりを表現しました。
レベル1から勉強していただきレベル7まで到達したら「初心者」です。
入門書レベルの本なら半分以上は理解できてストレス無く読むことが出来る様になります。
ほとんどの人はやりたい事はこの先にあるのでまずはLevel7に到達する事が当面の目標になります。
Level毎に関連記事を用意してあります。順に見ていただくとレベルアップ出来る様にしています。
2枚目は中級者から上級者までを表現しました。レベル11到達で中級者、レベル15到達で上級者です。
レベル15は書いてないですが準備はしています。
「どんな案件が来てもあきらめず調べてやり通す」方がレベル15です。
画像のとらえ方
この画像は「マクロの勉強をする方」と「マクロを教える方」向けに作っています。
勉強初期の独学の方だけではなくマクロを教える方(講師さん等)にも使っていただけるものにしました。
マクロの勉強をする方向けの使い方
これから勉強を始める方はレベル7を目指して勉強していただくと基礎が身に着きます。
レベル7が終わる頃には初心者様向けに市販されている書籍が程よく読める様になっています。
勉強初期は体系的に勉強する事ができません。
挫折しない様にモチベーションを落とさず効率的にマクロを習得する為に画像を活用してください。
マクロを教える方向けの使い方
これから勉強を始める方と会話する際どんな事をやりたいのかヒアリングする機会があります。
御存知の通り情報は溢れるほど流通しているので色々なキーワードを調べてぶつけてきます。
- ワークブック間の転記をしたい
- クラスが最終目標と聞きましたがどうやって勉強していけば良いのか
- スクレイピングをやってみたい
気持ちは分かります。教えてあげる事も可能です。しかし現状では高確率で理解はしてもらえないでしょう。
そういった方々には画像を使ってできるだけ簡単に説明してあげると理解につながります。
視覚で認識してもらう
やりたい事を勉強するにはやらなければならない事がどれだけあるのかを見せる事ができます。
例えばワークブック間の転記がしたいのであれば最低でもレベル8の知識が必要です。
「レベル1から8までを勉強してからワークブック間の転記を教えます」という様に見た目で会話ができます。
画像を使えばクラスが最終ではない事も伝わるしWebスクレイピングが大変な事も分かってもらえます。
情報が少ない人の立場に立って考える
これから勉強を始める方は工数を見積もる事ができません。それは仕方がないことです。自身もそうでした。
ならば相手の立場に立ってその人がイメージできる様に情報を提供してあげるのも教える人の仕事です。
今回の画像はそういった想いも込めて用意した次第です。
勉強初期から初心者まで
レベル毎に解説していきます。
1_マクロ、VBAの違いが分かる
どちらも自動化を連想させるキーワードですが別モノです。マクロは各作業を取りまとめた作業の集合体です。
VBAは言語の名前です。文字で書くと「VBAを使ってマクロを構築する」という使い方になります。
マクロとVBAの違いなんて知らなくても勉強できる。という意見もあります。
確かに勉強は進められますが私としては何かよく分からないものを勉強する気持ちにはなれないです。
マクロやVBAが何か分からない状態だと周りにも「マクロを勉強している」と言いづらい事でしょう。
例えばマクロの勉強を始めたと周りに話した時に「マクロとVBAは同じもの?」と聞かれた際に困りますね。
聞いた人も答えられないという事は「勉強進んでないんだろうな・・・」と思ってしまいます。
「マクロ」と「VBA」はこれから勉強しようと思っているものの根底にあるキーワードです。
違いを説明できるようにしてほしいという思いからLevel1に設定しました。
参考記事VBA-1|初心者向けエクセルマクロ学習シリーズ|マクロとは?
2_VBEの存在を知る
開発環境の存在を知っていただくという意味でVBEの存在を知ると書きました。
ExcelにVBEが搭載されている事を知っている人は少ないです。
「なんか変な画面が出た」という問い合わせがあった時に画面を見ると大半はコマンドプロンプトかVBEです。
現実としてVBEは認知されてないです。このような環境下でVBEの存在を知る事は1つのステップになります。
加えて標準モジュールやワークシートとの関係、データの保存方法を合わせて理解する事が必要です。
VBEをはじめとした一連の開発環境を知っていただきたいという思いからLevel2に設定しました。
参考記事VBA-1.5なぜマクロ付ブックの保存時の拡張子は.xlsmなのか
3_Subプロシージャを用意する
ここからやっとコードを書く事になります。
Subプロシージャを用意してEnd Subまでの間にコードを書く事で1つの命令となる事を理解してもらいます。
標準モジュールにコードを書く事を含め1つのモジュール内に複数のプロシージャが持てる事を学びます。
ここではコードにバリエーションを持たせることができるスコープやサブルーチンの話はしません。
とにかく1つの命令というパッケージの作り方を認識してもらいます。
自力でコードを書く為の環境を整えてもらいたいという思いからLevel3に設定しました。
参考記事VBA-2VBEの表示方法と使い方&標準モジュールにコードを書く理由
4_演算子を用いた値の代入(プロパティ)
コードの命令部分を書いていく事になります。
最初はオブジェクトやプロパティの話はしません。まずはコードを書いてもらいます。
あえてオブジェクトやプロパティの事を意識しないでコードを沢山書いてもらいます。
一定程度コードを書いた後でコードの状態を見ながらオブジェクトやプロパティの考えを後付けしていきます。
ただの文字の羅列ではなくて一定の規則のもとコードが用意されている事を学んでもらいます。
最後に規則に従ってキーワードを当てはめる様にコーディングする事を体感してもらいます。
コードは要素の組み合わせだという事を認識してもらいたいという思いからLevel4に設定しました。
参考記事VBA-4オブジェクト、プロパティ、メソッドは後回しでよい
参考記事VBA-5Rangeオブジェクトに関連するプロパティを使いコードを書く
5_コピー、クリア、オートフィルを使う(メソッド)
コピー、クリア、オートフィルと書きましたがメソッドであればどれを使っても大丈夫です。
Level4の時と同様に最初はメソッドを意識せず沢山コードを書いてもらいます。
一定程度コードを書いた後でコードの状態を見ながらメソッドの考えを後付けしていきます。
メソッドはオブジェクトの直下に配置されます。状況によっては引数も用意する必要があります。
オブジェクトとプロパティとの関係とは違うところを比較して視覚で認識してもらいます。
余談ですがマクロではワークシート関数を使う事もできます。
関数はメソッドとして使います。メソッドの理解は関数の理解にもつながります。
メソッドを使う事で動的な振る舞いを指示できる事を認識してもらいたいという思いからLevel5に設定しました。
参考記事VBA-10メソッドはオブジェクトの直後に書く|状況により引数を指定
6_変数を使う
変数の定義を含め使い方を勉強する事になるのですがもう1つ重要な機能があります。
ローカルウインドウです。変数を使うという事はセットでローカルウインドウを見るという事になります。
初心者様と話すとローカルウインドウの存在を知らない人が非常に多いです。
私ローカルウインドウが無かったらコードを書けないとまでは言いませんがかなり苦戦を強いられます。
車に例えるとサイドミラーとバックミラーがないまま運転してくださいという感じです。それだけ必要な要素です。
ローカルウインドウを使い効率良く変数を勉強してもらいたいという思いからLevel6に設定しました。
参考記事VBA-8変数の宣言とは何かマクロの中で使い方を決めます
7_条件分岐、繰り返し処理を使う
序盤の山場です。ここまで勉強できるとやっと「初心者」を名乗れます。
なぜここを初心者のラインに設定したのかと言いますと「一定の仕事ができるようになる」からです。
条件分岐と繰り返し処理が無いと作業の効率化を進めるのは難しいです。
理由は数千、数万の情報を少ないコードでさばくにはこの2つの機能が必要だからです。
Level7までの要素が理解出来ていれば1つのワークシート内で起こる事の多くをマクロ化できます。
加えて条件分岐と繰り返し処理はマクロの記録では生成する事ができない要素です。
「やった事の記録を組み合わせてコードを作る」人たちとの決定的な差が出るのがこのレベルです。
やりたい事をコード化する事ができる様になってもらいたいという思いからLevel7に設定しました。
参考記事VBA-11マクロ内でMsgBoxとIFステートメントを組み合わせる
参考記事VBA-12繰り返し処理をFor~Nextステートメントで学習する
初心者の仲間入りです
ここまで勉強をしてきたあなたは初心者を名乗っても良いレベルです。
自分の仕事を徐々にマクロに置き換える事ができる様になってきます。
次はワークシート、ワークブック間の操作であったり大量の情報を扱うという壁を迎えます。
以降は2枚目の画像を使って説明していきます。
中級者から上級者まで
レベル毎に解説していきます。Level8からは難易度が上がりますよ。複雑で高度な機能が出てくるからです。
8_ライブラリの存在を知る、オブジェクト変数を使う
中級者を目指す様になるとコードを書いたワークブック以外のオブジェクトを扱う事になってきます。
ワークブック間の転記などの処理やフォルダ内のデータを周回するという作業をイメージしてください。
ファイルシステムオブジェクトを使ったりDir関数を使いこなせるようにしてください。
加えて各ファイルに到達できてもワークブックやワークシートを特定できないと困ります。
ワークブックやワークシートを変数にとる為にはオブジェクト変数の使い方を学んでください。
参考記事VBAで転記|ブック間で文字列をコピペするマクロの作り方を教えます
9_配列、コレクション、オートシェイプを使う
Level8の様に行動範囲が広がると大容量のデータを取り扱う機会が増えてきます。
加えて取得した情報をグループ単位で管理したいと思う事も増えてきます。
配列、コレクションを学んでデータの持ち方も幅を広げていきましょう。
作業性も上がりコードの処理スピードも上がりますので配列は是非勉強してほしいです。
オートシェイプはオブジェクト変数が理解出来ていれば非常に使いやすくなりますのでここに書きました。
似たコードで画像も扱える様になります。
Level8の要素を用いて複数のフォルダ間から画像を取得するというようなコードを書く事も可能になります。
参考記事【一次元配列の考え方】マクロでアルファベットのAからZZを用意
参考記事VBAで画像を取り込む高速で画像自体を取得しエクセルに貼り付ける
10_連想配列、サブルーチンを使う
この辺りまでくると1つのプロシージャ内に書くコードが長くなってきます。扱うデータ量も増えてきます。
そこで連想配列とサブルーチンを挙げさせてもらいました。
連想配列は大量データにおける検索速度を担保してくれます。主なデメリットは無いです。
サブルーチンはコードを効率良く書く事ができる様になるのでコード量が減り見やすいコードになります。
デメリットとしてはコードが色々なプロシージャに飛ぶのでスキルが無いとコードが読めなくなってしまいます。
しかしここまで勉強した人なら大丈夫ですよね。デメリットよりもメリットの方が大きくなっているはずです。
参考記事【マトリクスで理解する】プロシージャを分割したマクロを用意する方法
参考記事VBAで連想配列-1Dictionaryの解説遅いマクロを高速化
11_ユーザーフォームを使う
ユーザーフォームはどこに入れようか非常に迷いました。
クラスが分かる様になってからの方が効率良くコードが書けるという思いもあります。
しかしクラスにメリットを見出すほどのコードが書ける様になる事よりは下だと認識しました。
実際クラスを使わずともユーザーフォームで業務改善、効率化は可能です。
そういった環境の中フォームの勉強をするにはサブルーチンの考え方を知っていた方がコードの理解が進みます。
加えて配列や連想配列を使えた方がサクサク動くフォームを作る事ができる様になります。
色々考えたうえでLevel10の機能より上のLevel11にユーザーフォームを配置しました。
ユーザーフォームが分かるとオブジェクトやプロパティ、メソッドへの理解が深まります。
それがクラスの理解、自作に繋がります。ここまで勉強出来た方は中級者という位置付けになります。
参考記事VBAでユーザーフォーム-1使い方|VBEからの表示方法や各種オブジェクトの説明
12_クラスを自作する、動的配列を使う
先に動的配列の話をさせていただきます。
実務で配列を使う機会は非常に多いです。中でも動的配列は1番仕様頻度が高いです。
むしろほとんどの事例で2次元動的配列ばかり使うと言っても過言ではないです。
圧倒的に便利で使いやすいのですが慣れるまでは難しさも伴います。
RedimPreserveによる要素の追加などクセのある要素とも付き合っていく必要があります。
配列の2次元目にしかデータを追加できないのでどうやってデータを持つか考えないといけません。
最後にワークシートに貼り付ける時のTransposeの使い方も重要です。
一定量を超えたデータが格納された配列はTransposeを使ったアウトプット時にデータがバグります。
動的配列にある程度の量のデータが溜まったら一旦データを吐き出すプロセスを組み込む等細工が必要です。
クラスの概念は勉強して損はない
次にクラスです。初心者様に人気のあるキーワードです。私も「早くクラスを勉強したい」と思っていました。
しかし勉強してある程度使って一定の結論に達しました。
よほどの事が無い限り「VBAでは使わない方が良いかもしれない」と思ってしまいました。
理由は沢山あるのですが3つに絞ってみます。
- 現状用意されたクラス群でもコードは書けるのであえてClassを自作しなくても良い
- グループで大規模なマクロ開発をしないのでメリットが見いだせない
- VBAは引継ぎが難しいという課題がある中でさらに引継ぎが難しくなる(ほぼ不可能になる)
各論はネガティブな内容になるので省きます。共通して言えることはメリットが見出しにくいという事です。
自身が高スキルの集団の中で働いていたらクラスを使うかもしれませんが今の自分が居る環境には不要です。
ただしメリットもあります。クラスを自作すると既に用意されているクラス群の構造が理解できる様になります。
- 既存のクラス(オブジェクト)に紐付くプロパティの構造
- メソッドの構造(Functionで用意する関数のような構造だと思っている)
- クラスに用意するコードと標準モジュールに用意するコードの住み分けを考える事ができる
- 標準モジュールでは自作したプロパティを使い扱うデータの取り回しや引数の準備に特化
- 演算や加工は自作したクラス内のメソッドに任せる
勉強して損はないのですが使用頻度を考えると頻繁には使いません。概念だけで良いと感じました。
クラスの概要、概念はこのあと勉強するLevel13、14には必ず活きてくるのでLevel12に配置しました。
そもそもクラスとは?VBA|クラスとは何か|本当に難しいのかを3つのポイントから検証
事例で解説【サンプルコード】VBAでクラスを使ったコードと使わないコードを比較する
13_Microsoft関連のAppを操作する
ExcelからAccessやWord、OutlookなどのMicrosoftOffice関連のAppを動かす事ができます。
会社では仕事の完成までに複数のアプリケーションを経由する案件が沢山あります。
Level12までのスキルであればExcel内の改善は進みますが一連の仕事の改善はできないです。
例えばExcelでいくつかのcsvや.xlsxの情報を集合させたデータを準備したと想定します。
そのデータを300社分作る必要があって最後に300社に作成したデータメールするとしましょう。
前半のExcel部分については工数削減は可能ですが後半のOutlookでの作業は手動になってしまいます。
300社分のメールを作って送るのは相当大変です。間違える可能性もあります。これもExcelVBAで解決できます。
VBAを使いこなせばOutlookの操作もExcel側でマクロを構築して1クリックで済ませることが可能です。
これで業務改善、効率化の幅は格段に広がります。Outlookの他にもAccessでも可能性を見出す事ができます。
AccessにはSQLを使う環境が搭載されています。参考記事はExcel×SQLですが参考になるかもしれません。
参考記事【VBA×SQL】メリットや使い方、環境構築の方法を画像で解説
参考記事エクセルVBA×Outlook|メールにハイパーリンク&添付ファイルを用意する
14_Webスクレイピングができる
画像に用意した要素としては最後になります。最後はExcelからWebサイトへのアクセスを試みます。
ExcelVBAとSeleniumbasicの組み合わせでWebサイトから情報を取得することができます。
反対にWebサイト内のテキストにExcelに用意した文字を入力する事もできます。
このような操作をまとめてWebスクレイピングと言います。
仕事でクラウドなどのWeb環境に配置されているAppから情報を出力してExcelで加工する事はありませんか?
このような仕事であれば最初のAppにアクセスし情報を抜き取るところからマクロで自動化できます。
WebスクレイピングにはHTMLやCSS、Javascriptなど他の言語の知識が必要になります。
いよいよVBAから抜け出して本格的に他の言語を学ぶ事になります。
この辺りまでくるとVBAの扱いにストレスは感じなくなる事でしょう。エラーが出ても落ち着いて対応できます。
加えて「たぶん出来そうだ」と頭の中でイメージしたことが何とか出来てしまう様になります。
参考記事VBAを使ってWebからデータを取得|Webスクレイピングとは?できる事を教えて
15_どんな案件が来てもあきらめず調べてやり通す
「どんな案件が来てもあきらめず調べてやり通す」人がLevel15です。
この辺りまで来ると相談を聞きながらある程度の解決策を思いついています。
どんな言語、ツールでアウトプットを用意しようか選択できるようになっています。
同時に現状では出来ない事も分かるので足りない知識を勉強して出来る様にしようとします。
「なんとかしよう」というマインドが勝手に働いて勉強を始めてしまいます。
全ての事を網羅的に知識としてストックする事は不可能です。分からない時は調べれば良いと割り切っています。
それでやり切ったらやり切った事がスキルマップに上書きされていきます。
ここまで来たらエンジニアです。本格的にプログラミング言語の勉強をして転職を目指す事も可能です。
その他:画像に無いものはどうするのか
基本的にレベル8まで勉強してもらえれば以降の順番を変えても良いです。
グラフや画像の使い方を勉強したい方はライブラリ、オブジェクト変数までは勉強しておきましょう。
参考ピボットグラフについての記事を紹介します。通常のグラフでも参考に出来るところがあります。
分からない事を放置して先に進んでも良いのか
分からない時は先に進んでも良いです。むしろ少々分からない事があっても突き進んでください。
考え方次第ですがLevel4~7は平行して繰り返し勉強した方が早く理解する事ができます。
たとえば変数を理解して繰り返し処理や条件分岐を勉強したとしましょう。
繰り返し処理や条件分岐を理解した時に新たに変数に対しての気付きが出てきます。
そんな時は戻って変数を勉強し直す事になります。そうやってレベル間を行き来しながら勉強を進めてください。
何が分からないのか分からない時
これ以上は無理だと思ったらここに連絡してください。分かる人が居ます。
スクールでも勉強できます
VBAの講座を展開しているスクールさんは非常に少ないです。
その中でもWinスクールさんはVBAについて多くの選択肢を提供してくれます。
ラインナップが多いという事は勉強する人ごとに勉強する内容を合わせやすいという事になります。
期待しているコンテンツが用意されている可能性が高いという事です。
URLへアクセスするとサイト右上に「個別カウンセリング・無料体験」のボタンがあります。
クリックすると日時など予約に関する情報を入力する事ができます。
講義の体験や説明会は無料です。まずは行動を起こしましょう。よい感触が得られると良いですね。
ExcelVBAの全てを覚える必要があるのか
これは即答でNOです。エクセルに例えるとすごくわかりやすいです。
エクセルユーザーがエクセルを使用するにあたって全機能を覚えているかと言われたらどうでしょうか。
そんなことは無いですよね。VBAも同じです。
基本を覚えた後は柔軟に立ち回る
ある程度の事ができる様になると必要な機能は都度調べて使う事になります。
使わなくなった機能は忘れても良いです。また調べれば良いだけです。
勉強は大変で覚えた事を忘れていく事の繰り返しですがまた調べれば良いので楽な気持ちで取り組みましょう。
まとめ
「Excelマクロは何から勉強するのか」に回答しました。
用意した画像について一通り説明しました。全部解説するという事で各項目の詳細は説明できていません。
各項目の詳細についてはリンク先の関連記事で情報を取得してください。
課題
課題としては画像の中に時間軸を表現する事ができなかった事です。
個人差が出てしまうのでこちらで決めると挫折する要因になりそうな気がして外しました。
次にデータを用意する際はさらに網羅的に作り込みが出来る様に挑戦していきます。
賛否両論は前提のもと作成しています
今回用意した画像は賛成、反対など色々な意見が出る仕様です。反対に見向きもされない事も想定しています。
私としては多くの人の助けにならなくても良いので誰かの助けになればと思い画像を用意しました。
これは自身の経験と今まで一緒に勉強してきた方の傾向を見て作成しています。
数十名分のデータしか反映されていませんが目安としては大きく間違ってはいないという判断をしています。