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 に分けて組み合わせてください。
- A1 に「処理開始」
- 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 にして構築してください。
- ClearCells:A1〜A5 をクリアする
- InputValues:A1〜A5 に 1,2,3,4,5 を入れる
- ShowTotal:合計をメッセージで表示
- 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 で管理すると綺麗な設計になる

