Excel VBA | Subプロシージャ(マクロ)の考え方

VBA
スポンサーリンク

Subプロシージャ 演習問題セット

初心者が Subプロシージャの流れ・呼び出し・変数・セル操作 をしっかり身につけられるように、
難易度順で 10問、すべて 詳しい解説つき で紹介します。


問題1:メッセージを表示する Sub を作る

「こんにちは VBA!」と表示するだけの Sub を作ってください。


解答1

Sub HelloVBA()
    MsgBox "こんにちは VBA!"
End Sub
VB

解説

  • Sub HelloVBA() で「処理の箱」を作る。
  • MsgBox はメッセージを表示する命令。
  • Sub は必ず End Sub で終わる。

問題2:セル A1 に「開始」と書く Sub を作る

A1セルに文字列「開始」を書き込んでください。


解答2

Sub WriteStart()
    Range("A1").Value = "開始"
End Sub
VB

解説

Excel のセルに値を書く基本形は
Range("A1").Value = 値
です。


問題3:1〜5までの数字を A列に書く

A1〜A5 に 1,2,3,4,5 を書いてください。


解答3

Sub FillOneToFive()
    Dim i As Long
    For i = 1 To 5
        Range("A" & i).Value = i
    Next i
End Sub
VB

解説

  • "A" & i で A1, A2…と文字を作る。
  • For〜Next は繰り返し。
  • こういう「連番を入れる処理」は超よく使う。

問題4:2つの Sub に分ける

以下の2つの仕事を、別の Sub に分けて組み合わせてください。

  1. A1 に「処理開始」
  2. B1 に「データ入り」

Main → SubA → SubB の流れになるように。


解答4

Sub MainProcess()
    WriteStartMessage
    WriteDataMessage
End Sub

Sub WriteStartMessage()
    Range("A1").Value = "処理開始"
End Sub

Sub WriteDataMessage()
    Range("B1").Value = "データ入り"
End Sub
VB

解説

  • 大きな仕事を小さい Sub に分けると見やすい。
  • 呼び出すときは名前をそのまま書くだけ。

問題5:合計を出す Sub

B1, B2, B3 の合計を計算し、B5 に書いてください。


解答5

Sub SumB1toB3()
    Dim total As Long
    total = Range("B1") + Range("B2") + Range("B3")
    Range("B5").Value = total
End Sub
VB

解説

  • セルの値は Range("B1").Value.Value をつけるのが正式だが、省略も可能。
  • 計算式を変数に入れてからセルへ書くのが見やすい書き方。

問題6:引数を使う Sub

引数 msg をメッセージとして表示する Sub と
その Sub を呼び出す Sub を作ってください。

例)ShowMessage "Hello!"


解答6

Sub ShowMessage(msg As String)
    MsgBox msg
End Sub

Sub TestCall()
    ShowMessage "Hello!"
End Sub
VB

解説

  • msg As String は「文字を受け取る変数」。
  • 呼び出すときに "Hello" を渡す。

問題7:引数でセル位置と値を指定して書き込む

WriteToCell(value, address)
という Sub を作ってください。

例:
WriteToCell "OK", "C3" → C3 に OK


解答7

Sub WriteToCell(v As String, addr As String)
    Range(addr).Value = v
End Sub

Sub TestWrite()
    WriteToCell "OK", "C3"
End Sub
VB

解説

  • セル番地も文字列なので "C3" のように渡す。
  • 引数2つの Sub は実務でもめちゃくちゃ使う基本パターン。

問題8:Subの呼び出し順を理解する問題

次のコードを実行したとき、
A1, A2, A3 はどういう順序で書き込まれるでしょうか。

Sub Main()
    Range("A1").Value = "one"
    CallSecond
    Range("A3").Value = "three"
End Sub

Sub CallSecond()
    Range("A2").Value = "two"
End Sub
VB

解答8

書き込み順 → A1 → A2 → A3

解説

  • Main の A1 が最初に実行
  • 次に CallSecond が呼ばれて A2
  • CallSecond が終わると Main に戻り A3
  • 「呼び出し先が全部終わってから元に戻る」という流れを必ず覚える!

問題9:A1〜A5 の合計を別Subに分離して計算

以下の2つを作ってください。

● Main(メイン処理)

  • A1〜A5に 10,20,30,40,50 を入れる
  • SumRange Sub を呼んで合計を B1 に書かせる

● SumRange

  • A1〜A5 までの合計を B1 に書く

解答9

Sub Main()
    Range("A1").Value = 10
    Range("A2").Value = 20
    Range("A3").Value = 30
    Range("A4").Value = 40
    Range("A5").Value = 50

    SumRange
End Sub

Sub SumRange()
    Dim i As Long
    Dim s As Long

    For i = 1 To 5
        s = s + Range("A" & i).Value
    Next i

    Range("B1").Value = s
End Sub
VB

解説

  • Main は「データ準備」、SumRange は「計算担当」。
  • こういう役割分担は実務でも重要。

問題10(少し難しい):複数の Sub を組み合わせる

以下の3つの仕事を、それぞれ別 Sub にして構築してください。

  1. ClearCells:A1〜A5 をクリアする
  2. InputValues:A1〜A5 に 1,2,3,4,5 を入れる
  3. ShowTotal:合計をメッセージで表示
  4. MainProcess:1→2→3 の順で呼び出す

解答10

Sub MainProcess()
    ClearCells
    InputValues
    ShowTotal
End Sub

Sub ClearCells()
    Range("A1:A5").ClearContents
End Sub

Sub InputValues()
    Dim i As Long
    For i = 1 To 5
        Range("A" & i).Value = i
    Next i
End Sub

Sub ShowTotal()
    Dim s As Long
    Dim i As Long
    For i = 1 To 5
        s = s + Range("A" & i).Value
    Next i
    MsgBox "合計は " & s & " です"
End Sub
VB

解説

  • 3つの処理を Main でつなぎ合わせることで、流れが明確になる。
  • 「準備 → 入力 → 計算 → 結果表示」という実務的な構成。

まとめ

今回の問題で覚えてほしいポイント:

  • Sub は「処理の箱」
  • 他の Sub を名前で呼び出せる
  • 引数を使えば汎用的な処理が作れる
  • セル操作(Range)は VBA の基本中の基本
  • 全体の流れを Main で管理すると綺麗な設計になる
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました