Excel VBA | 中級・上級 VBA 総合セット(100問)

VBA
スポンサーリンク

VBA 制御構文・ロジック 練習問題(10問)+ 解答解説

ここでは 中級~上級者向けの制御構文・ロジック演習を 10 問用意し、模範コードと解説を添えています。
「For」「For Each」「Do」「Select Case」「If」などを自在に使いこなす練習です。


Q1. 偶数行だけ処理するコードを書け

解答例

Sub EvenRows()
    Dim i As Long
    For i = 2 To 100 Step 2
        Cells(i, 1).Value = "偶数行"
    Next i
End Sub
VB

解説:
Step 2 を使うと偶数行だけをループできる。For Each では「偶数だけ」などの制御が難しいため For i が有効。


Q2. For Each と For i の違いを説明し、配列の偶数番目だけ処理せよ

解答例

Sub EvenArrayItems()
    Dim arr As Variant
    Dim i As Long
    arr = Array("A", "B", "C", "D", "E")
    
    For i = LBound(arr) To UBound(arr)
        If i Mod 2 = 0 Then Debug.Print arr(i)
    Next i
End Sub
VB

解説:
For Each は「全部処理」に便利だが、インデックスを使った条件分岐は For i が必要。


Q3. Do While ループで空白セルが続く間処理を繰り返せ

解答例

Sub DoWhileBlank()
    Dim r As Range
    Set r = Range("A1")
    
    Do While r.Value = ""
        r.Value = "空白を埋めました"
        Set r = r.Offset(1, 0)
    Loop
End Sub
VB

解説:
Do While は「条件が満たされている間」繰り返す。空白セルが続く限り処理する。


Q4. Do Until ループで「値が100以上になるまで」繰り返せ

解答例

Sub DoUntilExample()
    Dim x As Long
    x = 1
    
    Do Until x >= 100
        x = x * 2
    Loop
    
    Debug.Print "結果: " & x
End Sub
VB

解説:
Do Until は「条件が成立するまで」繰り返す。ここでは 100 以上になるまで倍々にする。


Q5. Select Case を使って売上金額をランク分けせよ

解答例

Sub SalesRank()
    Dim sales As Double
    sales = 12000
    
    Select Case sales
        Case Is >= 10000: Debug.Print "Aランク"
        Case Is >= 5000: Debug.Print "Bランク"
        Case Else: Debug.Print "Cランク"
    End Select
End Sub
VB

解説:
Select Case は複数条件を整理して書ける。If…ElseIf より読みやすい。


Q6. If 文で「セルが空白なら ‘未入力’ と表示」せよ

解答例

Sub IfBlank()
    If Range("B2").Value = "" Then
        Range("B2").Value = "未入力"
    End If
End Sub
VB

解説:
シンプルな条件分岐。空白チェックは実務で頻出。


Q7. For ループで逆順処理(100行目から1行目へ)せよ

解答例

Sub ReverseLoop()
    Dim i As Long
    For i = 100 To 1 Step -1
        Debug.Print Cells(i, 1).Value
    Next i
End Sub
VB

解説:
Step -1 を使うと逆順処理が可能。For Each では逆順ができない。


Q8. ネストした If 文で「数量が10以上かつ単価が100以上なら ‘特売’」と表示せよ

解答例

Sub NestedIf()
    Dim qty As Long, price As Double
    qty = 12: price = 120
    
    If qty >= 10 Then
        If price >= 100 Then
            Debug.Print "特売"
        End If
    End If
End Sub
VB

解説:
複数条件を組み合わせる場合、ネストした If が有効。


Q9. For Each でセル範囲を処理し、10000以上なら太字にせよ

解答例

Sub BoldHighValues()
    Dim r As Range
    For Each r In Range("C2:C20")
        If IsNumeric(r.Value) And r.Value >= 10000 Then
            r.Font.Bold = True
        End If
    Next r
End Sub
VB

解説:
For Each は「範囲内のすべてのセルを処理」に最適。


Q10. Exit For を使って「最初に空白セルを見つけたら処理を終了」せよ

解答例

Sub ExitForExample()
    Dim i As Long
    For i = 1 To 100
        If Cells(i, 1).Value = "" Then
            Debug.Print "最初の空白は " & i & " 行目"
            Exit For
        End If
    Next i
End Sub
VB

解説:
Exit For は「条件成立時にループを抜ける」ための制御。効率的に処理を止められる。


総まとめ

  • For Each → 全要素処理に便利
  • For i → インデックス制御(偶数・逆順・範囲指定)が可能
  • Do While / Do Until → 条件成立まで繰り返す
  • Select Case → 複数条件を整理
  • Exit For → 途中でループを抜ける
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました