スライドショースライドショー

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


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

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

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

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

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

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

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

  • VBAの基礎を終えた人でスキルアップをはかりたいと思っている人
  • 例題を通してVBAの実力をつけたいと思っている人

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つの切り口で解説!
更新日 : 2019年4月19日

VBA以外の選択肢も

今回解説したVBAの応用まで理解できると様々な業務が効率化できて大切なスキルではありますが、このままVBAを学び続けるなら親和性のあるプログラミング学習に挑戦してみることもおすすめです。

VBAだと会社の業務改善などがメインの業務であり会社に貢献する場面が多くありますが、プログラミングなら年収や働き方などが選べるようになり、もっと自分に努力が返ってくるスキルです。

  • VBAは社内出世など、会社にずっと属していく人のみに必要
  • AIの発達によってVBAで条件を組まなくても良くなる可能性も
  • 人材不足かつ、市場か伸びているのはプログラミング、スキル次第で人生に選択肢が増える

これらの理由から、せっかくVBAというスキルを身につけようとしているなら親和性のあるプログラミングの方が、あなたの人生に選択肢や可能性を増やすのでは?と思います。

でもVBAでも精一杯なのにプログラミング?難しそう。

そんな心配をしているあなたでも大丈夫です。侍エンジニア塾ではあなたの目標や性格を踏まえて適切な講師を配属させていただき、マンツーマンで指導していくため、着実にスキルアップしていくことができます。

また、あなたの目標に対して現在のスキルや興味のある分野から最適な学習カリキュラムを作るフルオーダーメイドカリキュラムを作成いたします。これによりあなたの興味関心と授業のカリキュラムが完全にあった状態で学習できるため、確実に未来に繋がる実感を持ちながら学習ができます。

まずはあなたの興味や関心からおすすめの言語を判定するプログラミング学習診断アプリを受けてみてください。

質問に答えていくだけで、最適な言語やスキルと学習期間を提案いたします。

プログラミング言語診断を受ける

まとめ

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

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説