VBAを学ぶコツは例題をこなすこと!問題・解答・詳細付きで解説!


VBAの基礎はわかったけど、その先になかなか行けない・・・
VBAのスキルアップするために、おすすめの例題はないかな?

VBAを始めて基礎は終わらせたものの、そこから何をすればいいかわからず手が止まっている人もいるのではないでしょうか。知識はついたけど、そこから自分のスキルにしていくためには、どうすればいいんだろう?と悩む方は結構多いです。

そんな方におすすめなのが、例題をとおして実際に作る力を身に着けることです。

こんにちは!フリーランスエンジニア兼テックライターのワキザカです。

この記事では、VBAでスキルアップしたい方向けに、VBAでスキルアップするコツ・計算ツールを作る例題について解説します!

例題だけでなく、最後に応用力を鍛えるコツについても紹介しているので、ぜひ最後まで見てくださいね!

この記事はこんな人のために書きました。

  • VBAの基礎を終えた人でスキルアップをはかりたいと思っている人
  • 例題を通してVBAの実力をつけたいと思っている人
この記事の要約
  • VBA学習は何度も例題をこなして書く力を鍛えることが大事
  • 計算ツールなどを作成してみて一連の流れを覚えるのがおすすめ
  • デバッグを鍛えたり複雑なツールに挑戦して応用力を鍛えよう

なお、1人で学習が進められるか、途中で挫折しないか不安な人は「侍エンジニア」をお試しください。

侍エンジニアでは現役エンジニアと学習コーチの2名体制で学習をサポートするため、挫折しづらい環境で学習が進められます。

受講料が最大70%OFFになる「給付金コース」も提供中。未経験から効率よく学習を進めたい人は、ぜひ一度お試しください。

\ オンラインで相談可能 /

目次

VBAのスキルアップは例題をこなした数で決まる

最初に、VBAの実力をつけるコツについて解説します。

VBAは、基礎を学ぶためのWebサイトや本が多いですよね。そのため、基礎を網羅的に学ぼうとするだけでとてつもない時間がかかってしまいます。ただ、基礎知識を増やしただけでは、VBAのスキルは少ししかつきません。

なぜなら、VBAは実際に書く力を鍛えなければ自分で作ることができないからです。

そのため、基礎を覚えるだけでなく、実際に手を動かして使えるようになることが重要です。また、ただ手を動かして作るだけでなく、具体的に作りたいイメージを決めてから作ることがおすすめです。最初にゴールを決めて作ることで、必要な知識をググりながら作る力を養うことができます。

調べて作る力がつけば、どんなツールも作ることができるようになります。VBAのスキルアップにつながっていきます。

【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型を使うようにしましょう!


■参考記事

次は、取得した値のタイプ(奇数・偶数)によって処理を分ける、条件分岐(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」はメッセージ表示するときに、文章を改行するためのコードです。参考記事に改行についても載せておくので、使ったことがない方は見てみてくださいね!


■参考記事

次は、計算結果をセルに書き込んでみましょう。

例題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プロパティは値の取得・書き込みがどちらもできるので、覚えておきましょう。


■参考記事

次は、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文の処理ごとにデータを取得・書き込む位置を変えています。

最大行を取得する処理を初めてみた人は、何を書いているかよくわからないかもしれませんね。処理の意味を完璧に覚えるのではなく、「データの最大行を取得する方法があること」をまずは覚えておくのがおすすめです。

最初から完璧に理解して進むことも大事ですが、プログラミングでは「〇〇ができるコードがある」と覚えて使いこなしていくうちに覚えていくことも重要です。どんなことができるか把握して、どんどん使っていってくださいね。


■参考記事

最後に、ボタンから作った処理を動かせるようにしましょう。

例題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」のみ処理に書きました。このように、ボタンクリックの処理は簡単に作ることができます。

ちょっとした操作でも、ボタンで処理を作っておくだけで自動化できることはよくあります。ぜひ色んな処理を作ってみて、ボタンクリックで自動化してみてください。


■参考記事

VBAの応用力をつけたい方へ

ここからは、応用力をつけたい方におすすめの情報をご紹介します!

応用力と一口に言っても、鍛え方はいろいろあります。


■応用力を鍛える例

  • コーディングレベルを上げる
  • デバッグを徹底的に鍛える
  • 応用的なツールを作れるようになる

以下で詳しく解説しているので、応用力をつけたい方はぜひ見てみてくださいね!

VBAの応用力を鍛える方法とは?3つの切り口で解説!
更新日:2024年3月1日

まとめ

今回は、VBAをスキルアップするコツ・おすすめの例題を解説しました。

VBAの実力をつけるコツは、覚えただけで終わらせず自分で作って動かすことです。

簡単な処理でもいいので、ぜひボタンを作って自動化ツールを作ってみてくださいね!

この記事を書いた人

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

目次