Excel VBA | While…Wend

VBA
スポンサーリンク

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
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました