この記事では、例題や解答も交え、VBAの練習問題を紹介します。
VBAの基礎はわかったけど、その先になかなか行けない・・・
VBAのスキルアップするために、おすすめの例題はないかな?
VBAを始めて基礎は終わらせたものの、そこから何をすればいいかわからず手が止まっている人もいるのではないでしょうか。知識はついたけど、そこから自分のスキルにしていくためには、どうすればいいんだろう?と悩む方は結構多いです。
そんな方におすすめなのが、例題をとおして実際に作る力を身に着けることです。
こんにちは!フリーランスエンジニア兼テックライターのワキザカです。
この記事では、VBAでスキルアップしたい方向けに、VBAでスキルアップするコツ・計算ツールを作る例題について解説します!
例題だけでなく、最後に応用力を鍛えるコツについても紹介しているので、ぜひ最後まで見てくださいね!
この記事はこんな人のために書きました。
- VBAの基礎を終えた人でスキルアップをはかりたいと思っている人
- 例題を通してVBAの実力をつけたいと思っている人
- VBA学習は何度も例題をこなして書く力を鍛えることが大事
- 計算ツールなどを作成してみて一連の流れを覚えるのがおすすめ
- デバッグを鍛えたり複雑なツールに挑戦して応用力を鍛えよう
VBAのスキルアップは例題をこなした数で決まる
最初に、VBAの実力をつけるコツについて解説します。
VBAは、基礎を学ぶためのWebサイトや本が多いですよね。そのため、基礎を網羅的に学ぼうとするだけでとてつもない時間がかかってしまいます。ただ、基礎知識を増やしただけでは、VBAのスキルは少ししかつきません。
なぜなら、VBAは実際に書く力を鍛えなければ自分で作ることができないからです。
そのため、基礎を覚えるだけでなく、実際に手を動かして使えるようになることが重要です。また、ただ手を動かして作るだけでなく、具体的に作りたいイメージを決めてから作ることがおすすめです。最初にゴールを決めて作ることで、必要な知識をググりながら作る力を養うことができます。
調べて作る力がつけば、どんなツールも作ることができるようになります。VBAのスキルアップにつながっていきます。
なお、ITエンジニアへの就業や業務効率化・副業での収入獲得を見据え、どの言語が自分にあうのか、どう学習を進めればいいのかなどがあいまいな人は「プログラミング学習プラン診断」をお試しください。
かかる時間は1分ほど。4つの質問に答えるだけで、あなたにあう言語や学習プランを診断してもらえます。
効率よくスキル習得したい人は、ぜひ一度お試しください。
\ 4つの質問に答えるだけ /
【VBAの例題】計算ツールを作ってみよう!
ここからは、計算ツールを作る例題をご紹介します!
最初にゴールの共有ですが、以下のようなツールを作っていただきます。
■仕様
1.シートの「計算」ボタンをクリックすると計算実行
2.A例(元の値)の値が偶数の場合はB列(計算結果)に、「A例 × 2」掛けた値を入れる
3.A例(元の値)の値が奇数の場合はB列(計算結果)に、「A例 × 3」掛けた値を入れる
4.データの行数文 2~3の処理を実行
■画面
計算前:
計算後:
例題は、全部で6つ用意しました。
- 例題1:セルの値を取得
- 例題2:変数を使った計算
- 例題3:条件式を使う
- 例題4:セルに値を書き込む
- 例題5:ループ処理を組み込む
- 例題6:ボタンから実行出来るようにする
問題、回答、参考記事の流れで解説していくので、問題を見たら回答を見る前に、自分でVBAを書いてみてください。それでは、行きます。
例題1:セルの値を取得
問題:
A2セルの値を取得し、値をメッセージで確認するサンプルを作ってください。
背景:
値を取得して使うことは、VBAを書くときは基本となります。ただ、値の確認をせずにそのまま使うのは危険なので、値を確認する癖をつけましょう!
回答例:
Sub 例題1() MsgBox "A2セルの値は" & Worksheets("Sheet1").Range("A2").Value & "です。" End Sub
実行結果:
Worksheets(“Sheet1”).Range(“A2”)で、Sheet1シートのA2セルを指定し、Valueプロパティで値を取得しています。今後複数シートで処理を作ることが増えてくると思うので、セルを指定するときはシートを指定する癖をつけることがおすすめです。
取得した値は、MsgBox関数を使ってメッセージを表示しています。MsgBoxは手っ取り早く値を確認する方法の1つなので、ぜひ覚えておいてください!
■参考記事
- Rangeの使い方:https://www.sejuku.net/blog/28094
- Valueの使い方:https://www.sejuku.net/blog/74540
- MsgBoxの使い方:https://www.sejuku.net/blog/32941
次は、変数を使って例題を書き換えてみましょう。
例題2:変数を使った計算
問題:
A2セルの値を取得した値をLong型変数「num1」に入れてから、値をメッセージで確認するサンプルを作ってください。
背景:
値はそのまま使うのではなく、変数に入れて使うことがおすすめです。そのまま使ってしまうと、同じ値を使うたびに値を取得する必要がありますよね。
処理が重たくなる原因にもなりますので、同じ作業は極力減らすように意識しておくのがおすすめです!
回答例:
Sub 例題2() '変数にA2セルの値を入れる Dim num1 As Long num1 = Worksheets("Sheet1").Range("A2").Value 'メッセージで表示 MsgBox "A2セルの値は" & num1 & "です。" End Sub
実行結果:
変数を使う時は、「Dim 変数名 As 型名」で変数宣言をしてから使います。今回はLong型の変数num1を宣言しています。それ以外は、例題1と同じですね。
ちなみに、数値型にはInteger型とLong型がありますが、整数は全てLong型でOKです。少し前までは「少ない数値の場合はInteger型の方がメモリが少なく済む」と言われていました。ただ、今はInteger型を使ってもLong型を使っても、必ずLong型に変換して使用されます。
Integer型を使った場合は、Long型に変換する分処理も遅くなってしまうため、Long型を使うようにしましょう!
■参考記事
- 変数の使い方:https://www.sejuku.net/blog/28984
- Long型の使い方:https://www.sejuku.net/blog/74250
次は、取得した値のタイプ(奇数・偶数)によって処理を分ける、条件分岐(if文)を使ってみましょう。
例題3:条件式を使う
問題:
A2セルの値を取得し、奇数だった場合は3を掛けた値、偶数だった場合は2を掛けた値をメッセージでするサンプルを作ってください。サンプルができたら、A2セルの値を偶数、奇数に変えてみて、実行結果が変わることを確認して下さい。
背景:
条件式を作って処理を作ることは、VBAを書くときの肝になります。今回は奇数、偶数のみの例ですが、色々変えて処理を作ってみると良いかもしれませんね。
回答例:
Sub 例題3() '変数にA2セルの値を入れる Dim num1 As Long num1 = Worksheets("Sheet1").Range("A2").Value '2で割った余りが1の場合は奇数、それ以外は偶数 If num1 Mod 2 = 1 Then MsgBox "A2セルの値:" & num1 & vbCrLf & _ "計算結果:" & num1 * 3 Else MsgBox "A2セルの値:" & num1 & vbCrLf & _ "計算結果:" & num1 * 2 End If End Sub
実行結果:
Mod関数を使って、割り算の余りを計算した結果が1の場合は奇数、それ以外は偶数としてIf文の条件を作っています。奇数の場合は3を掛けた値、偶数の場合は2を掛けた値をメッセージに表示しています。
また、メッセージには奇数、偶数だけでなくA2の値も表示しています。num1の値 + 奇数/偶数の結果が見えれば、処理があっているか確認しやすいですよね。このように、値を確認するときは実際の値 + 確認したい結果を表示することがおすすめです。
「vbCrLf」はメッセージ表示するときに、文章を改行するためのコードです。参考記事に改行についても載せておくので、使ったことがない方は見てみてくださいね!
■参考記事
次は、計算結果をセルに書き込んでみましょう。
なお、IT企業への転職や業務・作業の効率化などを見据え、独学でVBAが習得できるか不安な人は「侍エンジニア」をお試しください。
侍エンジニアでは、現役エンジニアと学習コーチの2名体制で学習をサポートしてもらえます。
「受講生の学習完了率98%」「累計受講者数4万5,000名以上」という実績からも、侍エンジニアなら未経験からでも挫折なく転職や効率化が実現できますよ。
\ 給付金で受講料が最大80%OFF /
例題4:計算結果をセルに書き込む
問題:
例題3で計算した結果を、B2セルに書き込むサンプルを作ってください。
背景:
セルに値を書き込む処理は、VBAの超基礎です。ただ値を書き込むだけでなく、取得した値・変数・If文などと絡めて処理を作れるようになると、応用が効くのでおすすめです!
回答例:
Sub 例題4() '変数宣言 Dim num1 As Long 'セルの値 Dim calcResult As Long '計算結果 '変数にA2セルの値を入れる num1 = Worksheets("Sheet1").Range("A2").Value '2で割った余りが1の場合は奇数、それ以外は偶数 If num1 Mod 2 = 1 Then calcResult = num1 * 3 Else calcResult = num1 * 2 End If '計算結果をセルに書き込む Worksheets("Sheet1").Range("B2").Value = calcResult End Sub
実行結果:
新たな変数calcResultを用意し、If文の処理で計算結果を入れています。最後の処理で、calcResultの値をB2セルに書き込んでいます。計算結果のように値を使いまわす場合は、変数を作ることがおすすめです。
また、値を書き込むときは、値を取得するときと同じくValueプロパティを使っています。Valueプロパティは値の取得・書き込みがどちらもできるので、覚えておきましょう。
■参考記事
- Rangeの使い方:https://www.sejuku.net/blog/28094
- Valueの使い方:https://www.sejuku.net/blog/74540
次は、For文を使ってループ処理を使ってみましょう。
例題5:ループ処理を組み込む
問題:
例題4まで作った処理をデータの行数文ループし、B列(計算結果)に値を入れるサンプルを作って下さい。
背景:
データの行数分処理を動かすケースはよくあります。データを表で持つExcelだからこそ、使いこなせるようにしておくのがおすすめです。
※少し難易度が上がるのでわからない場合は、補足説明や参考記事を見て知識を深めてから再挑戦するのもおすすめです。
回答例:
Sub 例題5() '変数宣言 Dim num1 As Long 'セルの値 Dim calcResult As Long '計算結果 Dim maxRow As Long '最大行数 Dim i As Long 'ループ処理用の変数 'データの最大行の取得 maxRow = Cells(Rows.Count, 1).End(xlUp).Row '行数分、計算結果を書き込む処理を実行 For i = 2 To maxRow '変数にA2セルの値を入れる num1 = Worksheets("Sheet1").Range("A" & i).Value '2で割った余りが1の場合は奇数、それ以外は偶数 If num1 Mod 2 = 1 Then calcResult = num1 * 3 Else calcResult = num1 * 2 End If '計算結果をセルに書き込む Worksheets("Sheet1").Range("B" & i).Value = calcResult Next i End Sub
実行結果:
「maxRow = Cells(Rows.Count, 1).End(xlUp).Row」の処理を追加し、データの最大行を取得しています。その後、For文で2行目 ~ 最大行まで処理をループしています。ループ処理の中では、A列の値が偶数・奇数を判断して計算した結果を対象の行に書き込むために「”A”&i」「”B”&i」をセルに指定して、For文の処理ごとにデータを取得・書き込む位置を変えています。
最大行を取得する処理を初めてみた人は、何を書いているかよくわからないかもしれませんね。処理の意味を完璧に覚えるのではなく、「データの最大行を取得する方法があること」をまずは覚えておくのがおすすめです。
最初から完璧に理解して進むことも大事ですが、プログラミングでは「〇〇ができるコードがある」と覚えて使いこなしていくうちに覚えていくことも重要です。どんなことができるか把握して、どんどん使っていってくださいね。
■参考記事
- 最大行を取得する方法:https://www.sejuku.net/blog/28929
- For文の使い方:https://www.sejuku.net/blog/30720
最後に、ボタンから作った処理を動かせるようにしましょう。
例題6:ボタンから実行出来るようにする
問題:
今まで作った処理を、シートに設置したボタンから実行できるようにするサンプルを作ってください。
背景:
VBAでマクロを作るだけでは、VBAがわかる人しか処理が使えません。誰でも使える便利ツールを作れるようになるためには、ボタンから実行できるようにするのが重要です。
回答例:
'ボタンクリック後の処理 Sub calcNumBtn_Click() '例題5の処理を実行する Call 例題5 End Sub '計算処理 Sub 例題5() '変数宣言 Dim num1 As Long 'セルの値 Dim calcResult As Long '計算結果 Dim maxRow As Long '最大行数 Dim i As Long 'ループ処理用の変数 'データの最大行の取得 maxRow = Cells(Rows.Count, 1).End(xlUp).Row '行数分、計算結果を書き込む処理を実行 For i = 2 To maxRow '変数にA2セルの値を入れる num1 = Worksheets("Sheet1").Range("A" & i).Value '2で割った余りが1の場合は奇数、それ以外は偶数 If num1 Mod 2 = 1 Then calcResult = num1 * 3 Else calcResult = num1 * 2 End If '計算結果をセルに書き込む Worksheets("Sheet1").Range("B" & i).Value = calcResult Next i End Sub
実行結果:
新規でボタンを作る方法は次のとおりです。
1. 開発タブ→挿入からボタンを選択し、セルにドラッグしてボタンを設置
2. マクロ名(ボタン名_Click)を入力し、新規登録ボタンをクリック
3. 自動生成された「ボタン名_Click」の処理に、クリック時の処理を書く
今回は、既に「例題5」のマクロを作っていたため、「Call 例題5」のみ処理に書きました。このように、ボタンクリックの処理は簡単に作ることができます。
ちょっとした操作でも、ボタンで処理を作っておくだけで自動化できることはよくあります。ぜひ色んな処理を作ってみて、ボタンクリックで自動化してみてください。
■参考記事
- シートにボタンを作る方法:https://www.sejuku.net/blog/66576
なお、IT企業への転職や業務・作業の効率化などを見据え、独学でVBAが習得できるか不安な人は「侍エンジニア」をお試しください。
侍エンジニアでは、現役エンジニアと学習コーチの2名体制で学習をサポートしてもらえます。
「受講生の学習完了率98%」「累計受講者数4万5,000名以上」という実績からも、侍エンジニアなら未経験からでも挫折なく転職や効率化が実現できますよ。
\ 給付金で受講料が最大80%OFF /
VBAの応用力をつけたい方へ
ここからは、応用力をつけたい方におすすめの情報をご紹介します!
応用力と一口に言っても、鍛え方はいろいろあります。
■応用力を鍛える例
- コーディングレベルを上げる
- デバッグを徹底的に鍛える
- 応用的なツールを作れるようになる
以下で詳しく解説しているので、応用力をつけたい方はぜひ見てみてくださいね!
なお、副業での収入獲得を目指しているものの、どんな仕事が自分に合うかわからない人は「副業診断」をお試しください。
かかる時間はたった1分ほど。5つの質問に答えるだけで、自分にあう副業を診断してもらえます。
自身が取り組みやすい副業で収入を獲得したい人は、ぜひ一度お試しください。
\ 5つの質問に答えるだけ /
まとめ
今回は、VBAをスキルアップするコツ・おすすめの例題を解説しました。
VBAの実力をつけるコツは、覚えただけで終わらせず自分で作って動かすことです。
簡単な処理でもいいので、ぜひボタンを作って自動化ツールを作ってみてくださいね!