\Excelショートカット集もらえる/
VBAの練習問題を解答・動画・サンプルファイルつきで紹介!学習のコツも解説
VBAの学習を進める中で、
「実務で活かせるレベルになりたい・・・」
「基礎は大体わかったけど、実力をもっとつけたい・・・」
このようなお悩みを抱えている方もいらっしゃるのではないでしょうか。
せっかく学習を始めたからにはVBAをバリバリ使いこなし、業務の自動化など実務に活かしていきたいですよね。そんな方にオススメなのが練習問題を解くことです!
本記事では、VBAを使いこなすための学習のコツから、実践してほしい練習問題を解答つきでご紹介します。
VBAの概要
VBAとは
まずはじめに、VBAについて解説します。VBA( Visual Basic for Applications)とはMicrosoftがMS Officeの拡張機能として提供しているプログラミング言語です。これだけだと少しわかりづらいですが、「マクロ」について理解すると理解しやすくなりますので、マクロについて説明をします。
マクロとは、Excelなどの操作を自動化する機能そのものを指します。具体的な使われ方としては、Excelで操作した内容をマクロに記録しておいて、同じ作業を繰り返し行うときに実行するといったことができます。このとき、記録した操作内容は裏側でプログラムとして変換されます。VBAは、このプログラムを作っているプログラミング言語のことです。
よく、VBAとマクロってどう違うの?と疑問に思う方がいらっしゃいますが、マクロを作成するプログラミング言語がVBAということです。
学習のコツ
プログラミングの学習の最も重要なコツはなんといっても実際に手を動かしてコードを書くことです。
本を読んだり動画を見て理解したつもりになっても、実際にコードが書けなければ意味がありません。「コードが書ける」といえる状態になるには、沢山のパターンの練習問題を解き、とにかくアウトプットの量を増やすことが大切です。頭で理解するのはもちろんですが、コードを書く際に、ある程度手が自然に動くようになるまで訓練してください。
どんな練習問題を解けばいいの?どの教材を使えばいいかわからない・・・という方には、ユースフルのオンライン講座、ExcelProVBAコースがオススメです。ExcelProVBAコースは実際の業務自動化の様々な例を扱った、業務に活かせる実践的な演習問題が豊富です。質の高い動画学習で、質問サポートもついていますので、挫折することがありません。
例題
前章で実際に手を動かしてプログラミングすることが習得のコツだと述べました。ここで、実際に簡単な問題をVBAで解いてみましょう。
今回は以下のユースフルの動画の問題から出題しています。
動画で学びたい人はこちら
今回は元の表のデータを売上管理表に転記していくプログラムを作成します。各例題ごとに①セルへの出力②判定処理(if文)③繰り返し処理(for文)を段階的に学べる問題となっていますので、ぜひ手を動かしてみてください!
以下の演習用ファイルをダウンロードしてご利用ください。
例題1 データの転記処理
問題:以下の表の上からC列からH列までの5行目(セルの8~12行目)までをK列以降の売上管理表に転記するプログラムを作成してみましょう。
ヒント:シンプルな出力処理ですが、基礎の基礎なのでしっかりおさえましょう!
解答例:
演習用ファイルのsampleAnswer_step1参照
実行結果:
※今回の解答例は上記の画像の通りに元の表と基準年月日と売上管理表が入力されている場合です。表の位置によってセルの値は変わります。
【解説】
セルを扱うためにはRangeオブジェクトを使います。構文は「Range(“セル範囲”)」です。選択したセルに値を出力するときはValueを使います。
例題2 判定処理
問題:今度は基準年月日2018年10月31日と一致する日付のみを転記してみましょう。例題1と同様に表の上からC列からH列までの5行目(セルの8~12行目)まで転記してください。
※出力先のエリアに空白行が出ないようにしてください。また、押したらプログラムが実行される実行ボタンも作成してみてください。
ヒント:if文(判定処理)を使います!また空白行がでないようにするために変数を使いましょう!
NG例:売上管理表の上3行が空白になってしまっている
成功例:空白無く転記できている
解答例:
演習用ファイルのsampleAnswer_step3参照
※演習用ファイルのsampleAnswer_step2はNG例
【解説】
if文で基準年月日と一致する日付が存在したとき、売上管理表に出力します。cntRowという変数を定義し、cntRowの値を+1することで売上管理表の上から順番に出力できるようにしています。(cntRowの初期値8は、売上管理表の8行目から出力したいから)
<解説:実行ボタンの作成>
開発タブの挿入からフォームコントロールの一番左端のボタンを選択します。
そうするとボタンを押したときどのマクロを実行するか選択できるダイアログが出てくるので実行したいマクロを選択します。
あとはOKを押すとボタンを作成することができます。
最後にボタンの位置や名称を右クリックで編集して完成です。
例題3 繰り返し処理
問題:例題2の処理を繰り返し処理(for文)を用いて記述してみましょう。
ヒント:繰り返し処理(for文)を使えば、例題2で書いたコードをスッキリさせることができます。
For [変数] = [初期値] To [最終値]
′ 繰り返したい処理
・・・・・
Next [変数]
解答例:
演習用ファイルのsampleAnswer_step4参照
【解説】
基準年月日と一致しているかの判定に必要なE列の8~12行目を変数にして繰り返し処理を組み込んでいます。繰り返し処理の変数はiが使われることが多いです。
応用編:最終行の取得
今回は練習のため、上から5行目までを管理表に転記するという処理を行いましたが、実務では最終行まで判定して転記する必要があります。
しかし、実際の実務ではデータがどんどん追加されたりするので、最終行が何行目かわからないことも多いですよね。
この最終行をExcelに自動で取得させる方法を最後にご紹介します。
Range(”セル指定”).End(xlDown).Row
指定されたセルを起点に終端セルを探索します。xlDownで下に探索し、Rowで終端セルの行数を取得します。
以下に最終行がわからないとき、自動で最終行を取得し、売上管理表に転記するサンプルプログラムを示します。
サンプルコード:
演習用ファイルのsampleAnswer_step5参照
表の一番下にも2018年10月31日を2つ用意してあるので、上記のプログラムを実行すると4件ヒットするはずです。
sampleAnswer_step5実行結果
みなさんも実務でぜひこの構文を使ってみてください。
以下の記事では、上記では解説しきれなかった「繰り返し処理」について解説しています。
読むとFor Next文やStep処理などを初心者が読んでも分かりやすく解説しているので、ぜひ参考にしてみてくださいね。
まとめ
今回はVBAの習得のコツと実際の例題を解説しました。
VBAをもっと学んで使いこなしたい方は、ぜひユースフルの提供するExcelProでアウトプットをたくさん積み、VBAをマスターしましょう。
ExcelProVBAコースは1日90分、最短2週間でマクロによる業務自動化が徹底的に学べる講座です。
伊藤忠商事で実務でExcelを使い倒してきたビジネスのプロと、現役システムエンジニアによる共同開発のカリキュラムで、即戦力になれるマクロの知識を実践的に身につけることができます。
実務で自動化したい業務がある方、マクロを組んでExcelを自在に操りたい方、プログラミングを始めてみたい方にもオススメです。