For文を使った例題

「For … Next」を使っての例題を考えてみたいと思います。10個の商品があり、それぞれコード番号と商品名、金額の書いてある表があるとします。別のセルで、コード番号を入れてマクロを実行するために設定したボタンを押すと、商品名、金額、送料を表示するマクロを考えてみましょう。送料は、1000円未満で150円、5000円未満で300円、10000円未満で500円、10000円以上は無料とします。

ボタンの設定方法は基本編のマクロを実行する方法とセル操作編のメニュー画面作成で説明しています。 まず商品一覧表を作成しましょう。以下は、入力するところとボタンも設定している画面です。

図17:For文例題画面

以下はマクロのリストです。

[リスト5]CodeSearch(For文Do文例題.xlsm)

Sub CodeSearch()
    For y = 3 To 12
        If Cells(15, 2) = Cells(y, 2) Then
            Cells(15, 3) = Cells(y, 3)   '商品名設定
            Cells(15, 4) = Cells(y, 4)   '金額設定
            Select Case Cells(15, 4)     '送料設定
                Case Is < 1000
                    Cells(15, 5) = 150
                Case Is < 5000
                    Cells(15, 5) = 300
                Case Is < 10000
                    Cells(15, 5) = 500
                Case Else
                    Cells(15, 5) = 0
            End Select
        End If
    Next
End Sub

商品一覧表はセルの3行目から12行目までに書いてあります。For文の変数yは3から12まで変化させます。変数yを変化させながら、入力コードと商品一覧表の商品コードが等しいかをIf文で確認しています。等しい時はその行の商品名、金額をセットしています。送料はSelect文を使って設定しています。実際にVBAを入力して、検索ボタンを作成し、確認してください。

「Exit For」という命令書くと、その時点でFor文を抜けます。変数などはそのままで「Next」の後に書いてある処理に移ります。

[リスト6]CodeSearch(For文Do文例題.xlsm)Exit For 追加

Sub CodeSearch()
    For y = 3 To 12
        If Cells(15, 2) = Cells(y, 2) Then
            Cells(15, 3) = Cells(y, 3)   '商品名設定
            Cells(15, 4) = Cells(y, 4)   '金額設定
            Select Case Cells(15, 4)     '送料設定
                Case Is < 1000
                    Cells(15, 5) = 150
                Case Is < 5000
                    Cells(15, 5) = 300
                Case Is < 10000
                    Cells(15, 5) = 500
                Case Else
                    Cells(15, 5) = 0
            End Select
            Exit For                      '(1)
        End If
    Next
End Sub

If文の終わりにExit For(1)を追加しました。今回のように10回くらいの時はそんなに大きな時間の差はないのですが、繰り返しの回数が多くなると処理時間の差が出てきます。For Each … Nextでも途中で処理を終了させたい時は、Exit For命令を使います。