VBScriptのloopの色々(1)

Excelのマクロなどで使うVBScriptですが、現代的なスクリプト言語とはやや違う文法を持っています。特徴の1つにループの種類が豊富と言う事が言えます。
一般的な、For~Nextや、While~wendループ以外に、Do~Loopとwhile, untilの組み合わせで豊富なバリエーションがあります。
この他に、配列を使ってループする、For each がありますが、いわゆるループとは少しタイプが違うので、割愛します。

特に、While~wendループやDo~Loopは、セル上の表を全て操作したい場合に使う場面があると思いますが、以外にも解説が少なくて欲しいコードを探し出すのに苦労した。と言う経験があります。
この解説とは別に、セル上の表を全て操作する処理についても掲載したいと思っています。そのベースとなるのが、このループの地域です。

この例では、4~12まで1づつ上がる例と、4~12まで2づつ上がる例を示します。

VBScript のループを解説したページは良く見るのですが、Do~Loopの4つのバリエーションや、2ステップづつアップさせる方法などを解説したページに出会う事が無かったので、作ってみました。

Option Explicit

Public Sub main()
    Dim i As Integer
    Dim s As String
    Const pmin As Integer = 4
    Const pmax As Integer = 12
    Const pstep As Integer = 2

    '------------------------------
    '--- For ~ Next ループ
    '------------------------------
    s = "For ループ" & vbCrLf
    For i = pmin To pmax
        s = s & i & " "
    Next i
    MsgBox s & vbCrLf

    '------------------------------
    '--- While ~ Wend ループ
    '------------------------------
    s = "While ~ Wend ループ" & vbCrLf
    i = pmin
    While i <= pmax
        s = s & i & " "
        i = i + 1
    Wend
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do While ~ Loop ループ
    '------------------------------
    s = "Do While ~ Loop ループ" & vbCrLf
    i = pmin
    Do While i <= pmax
        s = s & i & " "
        i = i + 1
    Loop
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do ~ Loop While ループ
    '------------------------------
    s = "Do ~ Loop While ループ" & vbCrLf
    i = pmin
    Do
        s = s & i & " "
        i = i + 1
    Loop While i <= pmax
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do Untile ~ Loop ループ
    '------------------------------
    s = "Do Untile ~ Loop ループ" & vbCrLf
    i = pmin
    Do Until i > pmax
        s = s & i & " "
        i = i + 1
    Loop
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do ~ Loop Untile ループ
    '------------------------------
    s = "Do ~ Loop Untile ループ" & vbCrLf
    i = pmin
    Do
        s = s & i & " "
        i = i + 1
    Loop Until i > pmax
    MsgBox s & vbCrLf

    '------------------------------
    '--- For ~ Next ループ
    '------------------------------
    s = "For ループ(step 2)" & vbCrLf
    For i = pmin To pmax step pstep
        s = s & i & " "
    Next i
    MsgBox s & vbCrLf

    '------------------------------
    '--- While ~ Wend ループ
    '------------------------------
    s = "While ~ Wend ループ(step 2)" & vbCrLf
    i = pmin
    While i <= pmax
        s = s & i & " "
        i = i + pstep
    Wend
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do While ~ Loop ループ
    '------------------------------
    s = "Do While ~ Loop ループ(step 2)" & vbCrLf
    i = pmin
    Do While i <= pmax
        s = s & i & " "
        i = i + pstep
    Loop
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do ~ Loop While ループ
    '------------------------------
    s = "Do ~ Loop While ループ(step 2)" & vbCrLf
    i = pmin
    Do
        s = s & i & " "
        i = i + pstep
    Loop While i <= pmax
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do Untile ~ Loop ループ
    '------------------------------
    s = "Do Untile ~ Loop ループ(step 2)" & vbCrLf
    i = pmin
    Do Until i > pmax
        s = s & i & " "
        i = i + pstep
    Loop
    MsgBox s & vbCrLf

    '------------------------------
    '--- Do ~ Loop Untile ループ
    '------------------------------
    s = "Do ~ Loop Untile ループ(step 2)" & vbCrLf
    i = pmin
    Do
        s = s & i & " "
        i = i + pstep
    Loop Until i > pmax
    MsgBox s & vbCrLf

End Sub

シェアする

  • このエントリーをはてなブックマークに追加

フォローする