web-dev-qa-db-ja.com

「Do While」「Loop」および「While」「Wend」ループ。違いは何ですか?

Stackoverflowでいくつかの答えを読んで、whilewendループを見ました。私はdo whileloopに慣れているので、この2つのループの違いは何だろうと思っていました。

私はいくつかのテスト(下記のコード)を行いましたが、どちらも同じ結果を与えているようです。

Sub test_loop_1()
Dim i As Integer
i = 1
Do While i < 10
    Cells(i, 1) = i
    i = i + 1
Loop

End Sub

Sub test_loop_2()
Dim i As Integer
i = 1
While i < 10
    Cells(i, 1) = i
    i = i + 1
Wend

End Sub
19
umLu

私が言及した答えはもはや見えませんが、この答えはまだ当てはまります。 While/WendはBasicからの二日酔いであり、Do/Loopは次の理由で優先される構文です。

  1. 状態の確認をサポートします  ループに入る_Do While [condition] ... Loop_(ゼロ回以上のループ実行)
  2. 状態の確認をサポートします  ループに入る_Do ... Loop While [condition]_(1つ以上のループ実行)
  3. 特定の条件をサポートしませんDo ...(some logic) (Exit Do) ... Loop(1つ以上のループ実行、潜在的に無限)
25
NeepNeepNeep

While Wendは次のことができません。

Do
    someCode
While (someCondition)

速度については、簡単なテストを行いました。

Sub whileLoopTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

While (i < 500000000)
    j = i + 2
    i = i + 1
Wend

Debug.Print "While execution time: " & Timer - StartTime
End Sub


Sub doWhileTest()
Dim i As Long, j As Long
Dim StartTime As Variant

i = 1
StartTime = Timer

Do While (i < 500000000)
    j = i + 2
    i = i + 1
Loop

Debug.Print "Do While execution time: " & Timer - StartTime
End Sub

結果:

While execution time: 6,429688  
While execution time: 6,429688
While execution time: 6,441406
Do While execution time: 6,429688
Do While execution time: 6,449219
Do While execution time: 6,4375
7
Vegard