見出し画像

独学でのvba学習方法(実務に応用できるまでの道のり)


私は仕事上、エクセルを使用することが多く、VBAを取り入れて業務効率化に取り組んできました。
今回は、私がEXCEL VBAをどのように学んでいったのかを紹介したいと思います。
私が学んできた方法はあまり効率が良くないと思います。
みなさんがそんな事態に陥らないよう、反面教師としてこれからVBAを学んでみたい人にとってご参考になればと思います。


VBAを学ぶ前のPCスキル

一般的な事務レベルのパソコン知識は持ち合わせていました。
エクセル関数(vlookupなど)を使いこなすことができる、そんな程度のレベルでした。


学習しようと思ったきっかけ

残業時間を短縮するためにVBAを学ぼうと思いました。

仕事上、毎日エクセルを使っていました。
物流関係の仕事に携わっており、配送データの入力や商品在庫管理などをエクセルメインで運用していました。
月末に請求書を作成する際は、入力した配送データを毎回加工するという面倒な作業をしていました。
(具体的には、シートを顧客分コピーして作成、フィルタや並び替えで顧客情報を抽出、不要な行列を削除など・・・)

このような単調な処理を手作業でする時間がもったいないと感じるようになり、効率化できる方法を探してVBAにたどり着きました。。

学習方法

まず、書籍を購入しました。

立山氏の本です。
決め手はamazonで評価が高かったこと、そして、実際に書店で見て、これなら読み進めることが出来そうだなと思い購入しました。
立山氏の本はEXCEL以外にも、初心者向けのACCESSやpythonの本を出版されています。
どれを読んでもわかりやすいと思います。


この本を一通り読んでから、自分が作り上げたい請求書加工のVBAに取り掛かりました。
わからないところはネットで検索をしながら、作っていきました。
時間はかかったと思いますが、作成する過程はそこまで苦ではありませんでした。

試行錯誤を重ね、無事完成!

挫折せずに最後までやり遂げることができた理由はなんだったのでしょうか?
それは、やりたいこと、作りたいものが明確になっていたことが大きかったと思います。
見事、業務時間の削減につなげることが出来ました。


次のステップ


VBAに無限の可能性を感じた私は、仕事で使用している様々なエクセルファイルにVBAを組み込むようになりました。

例えば、
🔹商品在庫ファイルの翌月繰り越し機能
🔹商品が入力されているセルをダブルクリックすると、各出荷倉庫の在庫が表示される機能
🔹対象商品のデータを読み取り、合計売上を計算する機能
🔹月ごとにファイル管理されている配送データから、目的のデータを抽出する機能
などいろんなことを実現させることができました。

学習方法は、書籍での学習をメインとしていました。
一冊読破したら、次の書籍を読みました。

中級者向けでおすすめ本がこちら。

参考になったのは、オートメンバの活用やコードの色分けなどです。
色分けをすることによって、オブジェクトやメソッド、文字列などの区分けが分かりやすくなります。
オートメンバを活用することは、コードを作成する時間の短縮につながります。

また、私がVBAを使いこなせることがわかると、社内の人々から作成依頼が来るようになりました。
他人からのリクエストは、自分が使用したこともない機能などを学習するきっかけにもなり、非常に良い勉強になりました。

モチベーション、生産性が高まる瞬間


VBAを学んだきっかけは、自分自身の業務時間短縮でしたが、他人から頼まれたときが一番集中でき、完成までのスパンを短くできると感じます。

素早く上達するコツ

以上が私がVBAを学んできた方法です。
ですが、人におすすめできる方法ではないと感じます。
なぜなら、要領が悪いと感じるのです。

似たような課題に対しても応用が利かず時間を浪費してしまう、そんな状態がいつまでも続いていました。
いわば、越えられない壁が立ちはだかっている状態です。

では、どのような方法が上達への近道なのでしょうか。

場面を大きく分けて二つに分けて説明したいと思います。

1️⃣ 分からないことに直面した時
2️⃣ 日々の学習で身に着けたいこと

1️⃣ 分からないことに直面した時」



どうすればよいのでしょうか。
まずは、自分で調べることが大切です。調べて解決できればOK。
ですが、何が何でも自分で解決しようと延々と時間を費やすのは明らかに時間の無駄です。

20分くらい調べて分からなかったら、誰かに聞きましょう。
(ちなみに、私はひとつのコードにつまづいて数時間が経過してしまうことが多々ありました。)

身近なところに先達がいなければ、ネットで質問しましょう。
yahoo知恵袋でも、teratailでもなんでもOKです。
自分では、思いもよらなかった発想や解決策をネット界の方々は回答してくれるでしょう。
そのスピードとひらめき、知性に感動すらします。


「2️⃣ 日々の学習で身に着けたいこと」


普段の学習では、どのような部分を意識して、なにを身に着ければよいのでしょうか。
私が感ずるに、それは基礎的な概念を身に着けることです。

上にも書きましたが、私自身、わからなかいところに直面したとき、ネットで調べても解決できない、、、、そこで何時間もつまずいてしまうことがありました。
ネットで似た事例があるにもかかわらず、どうして解決できないのか。
それは、概念を理解できていないからです。
戻り値で返ってくる型はなにか、オブジェクト変数とはなにか、
概念が分かっていれば、解決できることはたくさんあったと感じます。


私はその後、より本格的なプログラミングを学びたいと思い、プログミングスクールに通ってJavaを学びました
そこで私がプログラミングに対して抱いていたわずかな自信は完全に打ち砕かれるわけです。
Javaとはこんなに難しい言語だったのか。。。と思い知らされました。

ですがJavaを学習する前と後では、明らかにvbaの習得具合に差が出ました。
要は、ちょっとだけですがプログラミングの概念がわかったという感じでしょうか。

オブジェクトやプロパティの関係などについてわかったようでわからない。
以前までは、そんな感じで進めていましたが、Javaを学習してからは概念というものに意識が向くようになり、ファンクションプロシージャやコレクションなどちょっぴり応用的な概念にとっつきやすくなりました。

では、概念を学ぶためにはどんな学習方法が良いの?って声が聞こえてきそうです。
私のようにJavaを勉強しなければいけないの?

いえ、決してそうではないと思います。

その方法とは、オブジェクトブラウザに書かれている情報を積極的に参照し、理解できるようになる。ことだと思います。

オブジェクトブラウザとはエディター画面でF2を押すと出てくるアレです。
以下のような画面です。

画像3


私は、つまずいてしまうとすぐにネットで調べて、わかりやすく解説されているサイトで解決策を見つけていました。
その状態を続けると、わかったようでわからない状態から抜け出せづらいと思います。
なぜなら、多くのサイトはわかりやすくかみ砕かれているからこそ、概念を理解できる機会が失なわれている気がするのです。

一方で、オブジェクトブラウザはどうでしょう。
見るからに、専門的っぽくて、敬遠してしまいがちですよね。
ですが、ここに書かれていることを理解できるようになれば、概念を理解できているということであり、格段に進歩は加速すると思います。

概念を理解する



特に、戻り値の概念が理解できるようになると、かなりスムーズに学習できるのではないかと思います

例えば、ワークシートをオブジェクト変数へ格納したい場合の
OK例とNG例を紹介します。

OK例:
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("シート1")

オブジェクトブラウザでSheetsを検索すると

スクリーンショット 2021-02-06 192358

見るべきポイントは、1行目の「As Sheets」です。
これはSheetsプロパティを使用した場合の戻り値がSheetsであるということです。

一方のNG例を紹介すると、


NG例:
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("シート1").Name

このコードはエラーになります。
Nameプロパティをオブジェクトブラウザで検索すると、

スクリーンショット 2021-02-06 192442


Nameプロパティの戻り値は「As String」となってます。
String=文字列を返すからワークシート変数=wsに格納できないというわけです。

最初は、オブジェクトブラウザを見てもなにがなんだかわからず、非常にとっつきづらいと思います。

ですが、オブジェクトブラウザに書かれていることを理解するように努めることは、学習スピードに差がつくポイントだと個人的には思います。

オブジェクトブラウザの使い方については、下記のサイトが非常にわかりやすいです。(ご存じの方も多いかとは思いますが)


まとめ

ということで、私がおすすめする学習方法は、


⭕まずは気に入った入門書的な参考書を手に作ってみる。
    (自分が作りたいものが明確になっていることが大切)

⭕なんとなく作れるようになった。
    (なんとなく作れるようになったけど、分からないことはたくさん出てく         ると思います。)
20分考えて分からないことは誰かに聞きましょう。

   日々の学習で意識することは、概念を学んでいくこと。
 (わからない部分はオブジェクトブラウザを積極的に使用し理解に努める       、ネット検索に頼る頻度を減らしていくよう心掛ける。)

ポイントは、まずはがむしゃらでも良いから、いくつかのコードを作ってみること。

なんとなく作れるようにはなったものの、いつも同じところでつまずいてしまう、コードの作成に膨大な時間がかかってしまう。

・・・・越えられない壁・・・・

一人で延々と考え過ぎず、誰かに聞きましょう、教えてもらいましょう。
と同時に、概念を学んでいくことが大切です。

ご参考になれば。


この記事が気に入ったらサポートをしてみませんか?