While…Wend:追加練習問題 10問(解答付き)
While…Wend の理解が深まる“追加10問”の練習問題(すべて解答付き) を作りました。
超基礎 → 実務寄り → 応用 の順に難易度が少しずつ上がります。
問題1(基礎)
1〜30 のうち、3 の倍数だけを Debug.Print するプログラムを、While を使って作りなさい。
✅ 解答
Sub Q1_Add()
Dim i As Integer
i = 1
While i <= 30
If i Mod 3 = 0 Then Debug.Print i
i = i + 1
Wend
End Sub
VB問題2(基礎)
A1〜A10 に「Hello」を書き込む While ループを作りなさい。
✅ 解答
Sub Q2_Add()
Dim r As Integer
r = 1
While r <= 10
Cells(r, 1).Value = "Hello"
r = r + 1
Wend
End Sub
VB問題3(基礎)
10 からスタートして、0 になるまで 1 ずつ減らしながら、値を Debug.Print に出力する。
✅ 解答
Sub Q3_Add()
Dim n As Integer
n = 10
While n >= 0
Debug.Print n
n = n - 1
Wend
End Sub
VB問題4(基礎)
1〜200 のうち、合計値が 500 を超えた時点でループを止め、
「合計」「最後に足した値」を Debug.Print しなさい。
✅ 解答
Sub Q4_Add()
Dim i As Integer
Dim total As Long
i = 1
total = 0
While total <= 500
total = total + i
i = i + 1
Wend
Debug.Print "合計=" & total
Debug.Print "最後に足した値=" & (i - 1)
End Sub
VB問題5(実務系)
A列のデータを上から順に読み、「空白セルに当たったら終了し、合計を MsgBox で表示せよ」。
✅ 解答
Sub Q5_Add()
Dim r As Long
Dim s As Long
r = 1
s = 0
While Cells(r, 1).Value <> ""
s = s + Cells(r, 1).Value
r = r + 1
Wend
MsgBox "合計=" & s
End Sub
VB問題6(実務系)
A列の値を上から見ていき、
「NG」という文字が出てきたら、そのセルの行番号を MsgBox で知らせて終了する。
✅ 解答
Sub Q6_Add()
Dim r As Long
r = 1
While Cells(r, 1).Value <> ""
If Cells(r, 1).Value = "NG" Then
MsgBox "NGが見つかった行: " & r
Exit Sub
End If
r = r + 1
Wend
MsgBox "NGは見つかりませんでした"
End Sub
VB問題7(実務系)
A列に「商品名」、B列に「在庫数」が入っている。
在庫数が 0 の商品名をすべて Debug.Print せよ。
空白セルで終了。
✅ 解答
Sub Q7_Add()
Dim r As Long
r = 1
While Cells(r, 1).Value <> ""
If Cells(r, 2).Value = 0 Then
Debug.Print "在庫ゼロ: " & Cells(r, 1).Value
End If
r = r + 1
Wend
End Sub
VB問題8(応用)
B列に数値が入っているとして、「負の値(0未満)が出てきたら、そこまでの平均値を MsgBox で表示せよ」。
✅ 解答
Sub Q8_Add()
Dim r As Long
Dim total As Double
Dim count As Long
r = 1
total = 0
count = 0
While Cells(r, 2).Value <> ""
If Cells(r, 2).Value < 0 Then
Exit While
End If
total = total + Cells(r, 2).Value
count = count + 1
r = r + 1
Wend
If count > 0 Then
MsgBox "平均値=" & (total / count)
Else
MsgBox "正のデータがありません"
End If
End Sub
VB問題9(応用)
乱数(1〜6)を振り続け、合計が 30 を超えたら
「出た回数」「最終の合計」を出力せよ。
✅ 解答
Sub Q9_Add()
Dim total As Integer
Dim count As Integer
total = 0
count = 0
Randomize
While total <= 30
total = total + Int((6 * Rnd) + 1)
count = count + 1
Wend
Debug.Print "回数=" & count & ", 合計=" & total
End Sub
VB問題10(応用)
単語をつなげて文章を作る問題。
A列に「単語」が縦に並んでいるとする。
空白セルに当たるまで単語を読み取り、「スペース区切り」で 1つの文章を作成し、MsgBox に表示せよ。
例:
A1=I
A2=love
A3=VBA
→ 「I love VBA」
✅ 解答
Sub Q10_Add()
Dim r As Long
Dim text As String
r = 1
text = ""
While Cells(r, 1).Value <> ""
If text = "" Then
text = Cells(r, 1).Value
Else
text = text & " " & Cells(r, 1).Value
End If
r = r + 1
Wend
MsgBox text
End Sub
VB