サーチ…


ケースを選択

Select Caseは、さまざまな条件が可能な場合に使用できます。条件は上から下にチェックされ、一致する最初のケースだけが実行されます。

Sub TestCase()
    Dim MyVar As String

    Select Case MyVar    'We Select the Variable MyVar to Work with
        Case "Hello"     'Now we simply check the cases we want to check
            MsgBox "This Case"
        Case "World"
            MsgBox "Important"
        Case "How"
            MsgBox "Stuff"
        Case "Are"
            MsgBox "I'm running out of ideas"
        Case "You?", "Today"  'You can separate several conditions with a comma
            MsgBox "Uuuhm..." 'if any is matched it will go into the case
        Case Else             'If none of the other cases is hit
            MsgBox "All of the other cases failed"
    End Select

    Dim i As Integer
    Select Case i
        Case Is > 2 '"Is" can be used instead of the variable in conditions.
            MsgBox "i is greater than 2"
        'Case 2 < Is '"Is" can only be used at the beginning of the condition.
        'Case Else is optional
    End Select
End Sub

Select Caseブロックのロジックを反転して、さまざまな変数のテストをサポートすることもできます。この種のシナリオでは、論理演算子も使用できます。

Dim x As Integer
Dim y As Integer

x = 2
y = 5

Select Case True
    Case x > 3
        MsgBox "x is greater than 3"
    Case y < 2
        MsgBox "y is less than 2"
    Case x = 1
        MsgBox "x is equal to 1"
    Case x = 2 Xor y = 3
        MsgBox "Go read about ""Xor"""
    Case Not y = 5
        MsgBox "y is not 5"
    Case x = 3 Or x = 10
        MsgBox "x = 3 or 10"
    Case y < 10 And x < 10
        MsgBox "x and y are less than 10"
    Case Else
        MsgBox "No match found"
End Select

case文は、算術演算子を使用することもできます。 Select Case値に対して算術演算子が使用されている場合、 Isキーワードの前に算術演算子を使用する必要があります。

Dim x As Integer

x = 5

Select Case x
    Case 1
        MsgBox "x equals 1"
    Case 2, 3, 4
        MsgBox "x is 2, 3 or 4"
    Case 7 To 10
        MsgBox "x is between 7 and 10 (inclusive)"
    Case Is < 2
        MsgBox "x is less than one"
    Case Is >= 7
        MsgBox "x is greater than or equal to 7"
    Case Else
        MsgBox "no match found"
End Select

各ループについて

For Eachループ構文は、コレクションのすべての要素を反復処理するのに理想的です。

Public Sub IterateCollection(ByVal items As Collection)

    'For Each iterator must always be variant
    Dim element As Variant

    For Each element In items
        'assumes element can be converted to a string
        Debug.Print element
    Next

End Sub

オブジェクトコレクションを反復処理するときにFor Each使用する:

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
    Debug.Print sheet.Name
Next

避けてくださいFor Eachの配列を反復処理するとき。 Forループは、配列のパフォーマンスが大幅に向上します。逆に、 For Eachループは、 Collection反復処理する際のパフォーマンスが向上します。

構文

For Each [item] In [collection]
    [statements]
Next [item]

Nextキーワードには、オプションでイテレータ変数を続けることができます。内部ループを独自のプロシージャに抽出するなど、ネストされたコードを明確にするためのより良い方法がありますが、ネストされたループを明確にするのに役立ちます。

Dim book As Workbook
For Each book In Application.Workbooks

    Debug.Print book.FullName

    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Worksheets
        Debug.Print sheet.Name
    Next sheet
Next book

ループを行う

 Public Sub DoLoop()
    Dim entry As String
    entry = ""
    'Equivalent to a While loop will ask for strings until "Stop" in given
    'Prefer using a While loop instead of this form of Do loop
    Do While entry <> "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to the above loop, but the condition is only checked AFTER the
    'first iteration of the loop, so it will execute even at least once even 
    'if entry is equal to "Stop" before entering the loop (like in this case)
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop While entry <> "Stop"

    
    'Equivalent to writing Do While Not entry="Stop"
    '
    'Because the Until is at the top of the loop, it will
    'not execute because entry is still equal to "Stop"
    'when evaluating the condition
    Do Until entry = "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to writing Do ... Loop While Not i >= 100
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop Until entry = "Stop"
End Sub

whileループ

'Will return whether an element is present in the array
Public Function IsInArray(values() As String, ByVal whatToFind As String) As Boolean
    Dim i As Integer
    i = 0

    While i < UBound(values) And values(i) <> whatToFind
        i = i + 1
    Wend
    
    IsInArray = values(i) = whatToFind
End Function

ループの場合

Forループは、指定された回数だけコードの囲まれたセクションを繰り返すために使用されます。次の簡単な例は、基本的な構文を示しています。

Dim i as Integer           'Declaration of i
For i = 1 to 10            'Declare how many times the loop shall be executed
    Debug.Print i          'The piece of code which is repeated
Next i                     'The end of the loop

上記のコードは整数を宣言しiForループは1と10の間のすべての値をi割り当て、 Debug.Print i実行します。つまり、コードは1から10までの数値を直接ウィンドウに表示します。ループ変数は、実行前とは逆の囲まれたコードが実行された後のNextステートメントによってインクリメントされることに注意してください。

デフォルトでは、ループが実行されるたびにカウンタが1ずつインクリメントされます。ただし、 Stepを指定すると、インクリメント量をリテラルまたは関数の戻り値のいずれかに変更できます。開始値、終了値、またはStep値が浮動小数点数の場合、最も近い整数値に丸められます。 Stepは正の値または負の値のいずれかです。

Dim i As Integer
For i = 1 To 10 Step 2
    Debug.Print i       'Prints 1, 3, 5, 7, and 9
Next

一般に、 Forループは、ループが何回目に囲まれたコードを実行するかが分かっている状況で使用されます(そうでなければDoループまたはWhileループが適切かもしれません)。これは、このコードが示すように、ループへの最初のエントリの後に終了条件が固定されているためです。

Private Iterations As Long              'Module scope

Public Sub Example()
    Dim i As Long
    Iterations = 10
    For i = 1 To Iterations
        Debug.Print Iterations     'Prints 10 through 1, descending.
        Iterations = Iterations - 1
    Next
End Sub

Forループは、 Exit Forステートメントで早期に終了することができます。

Dim i As Integer

For i = 1 To 10
    If i > 5 Then
        Exit For
    End If
    Debug.Print i       'Prints 1, 2, 3, 4, 5 before loop exits early.
Next


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow