【Excel VBA】ループ処理 Do While…Loop

■ループ処理 DoUntil…Loop

同一の処理を何度も繰り返すことを「ループ処理」と呼ぶ。
ループ処理には、指定した回数だけ繰り返す方法や、
ある特定の条件を満たすまで処理を繰り返す方法がある。

今回はDoWhile…Loop文を使用する。

Do While 条件
    処理A
Loop

■例題

以下の「Main」シートに表示されている表の「インプットデータ」列について、
「演算子フラグ」列の値に従い、計算処理をする。

※演算子フラグの内容

フロー図:

サンプルコード:

' シート名の定数
Private Const SHEETNAME_MAIN As String = "Main"

' Mainシート関係の定数
Private Const STARTROW      As Integer = 4      ' 処理開始行
Private Const NOCOL         As Integer = 3      ' 「No.」列
Private Const ENZANFLGCOL   As Integer = 4      ' 「演算子フラグ」列
Private Const INPUTDATACOL  As Integer = 5      ' 「インプットデータ」列
Private Const RESULTCOL     As Integer = 6      ' 「結果」列

Private Const CALDATA       As Integer = 2     ' 計算用の定数

Public Sub Cal()
    ' 変数宣言
    Dim ShtName     As Worksheet    ' ワークシート格納変数
    Dim looprow     As Integer      ' 処理行の変数
    Dim resultdata  As Integer      ' 処理結果格納変数

    ' シート名を変数に格納
    Set ShtName = Sheets(SHEETNAME_MAIN)

    ' 処理開始行を変数に格納
    looprow = STARTROW

    ' ループ処理(「No.」列が空白セル以外の間)
    Do While ShtName.Cells(looprow, NOCOL).Value <> ""

        ' 値の初期化
        resultdata = 0
        
        Select Case ShtName.Cells(looprow, ENZANFLGCOL).Value
            Case Is = 0
                ' 計算処理(演算子フラグ「0」の場合はそのまま)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value
            Case Is = 1
                ' 計算処理(演算子フラグ「1」の場合は加算)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value + CALDATA
            Case Is = 2
                ' 計算処理(演算子フラグ「2」の場合は減算)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value - CALDATA
            Case Is = 3
                ' 計算処理(演算子フラグ「3」の場合は乗算)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value * CALDATA
            Case Is = 4
                ' 計算処理(演算子フラグ「4」の場合は除算)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value / CALDATA
            Case Is = 5
                ' 計算処理(演算子フラグ「5」の場合はべき乗)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value ^ CALDATA
            Case Is = 6
                ' 計算処理(演算子フラグ「6」の場合は除算の商)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value ¥ CALDATA
            Case Is = 7
                ' 計算処理(演算子フラグ「7」の場合は除算の余り)
                resultdata = ShtName.Cells(looprow, INPUTDATACOL).Value Mod CALDATA
        End Select

        ' 計算結果を「結果」列に出力
        ShtName.Cells(looprow, RESULTCOL).Value = resultdata

        ' 処理行をインクリメント
        looprow = looprow + 1
    Loop

    ' 終了処理
    Set ShtName = Nothing

End Sub

実行結果:

タイトルとURLをコピーしました