BizFAQ-ビズファック

仕事・ビジネスにおけるちょっと困ったこと、わからないことをズバリ解決お悩み解決サイトです。

  • TOP
  • 副業解禁時代の年収1000万円戦略
  • Excel
  • Word
  • PowerPoint
  • サイトマップ

VBAで柔軟な繰り返し処理を実装する!Do 〜 Whileステートメントとは

2015年4月3日 by Gen

VBA_Do_While_3

VBAで繰り返しといえばFor文です。

しかし、Forステートメントメントは明確に繰り返し回数が決まっていないと使用できないため、終了条件を指定して「とりあえず」繰り返し処理をするのがVBAのDo〜Whileステートメントです。
Do〜While制御文は使用機会の多いとてもパワフルな制御文です。



目次

  • VBAのDo〜Whileを使いこなす
    • 1.Do〜Loop構文
      • Sub sumple1() Dim i As Integer Do i = i + 1 Cells(i, 1).Value = i Loop End Sub
    • 2.前置While構文
      • Sub sumple2() Dim i As Integer Do While i < 100 i = i + 1 Cells(i, 1).Value = i Loop End Sub
    • 3.後置While構文
      • Sub sumple() Dim i As Integer Dim MaxIndex As Integer Do MaxIndex = i + 100 Do While i < MaxIndex i = i + 1 Cells(i, 1).Value = i Loop Cells(i, 1).Activate Loop While MsgBox("もう一度繰り返しますか", vbOKCancel) = vbOK End Sub

VBAのDo〜Whileを使いこなす

VBAのDo〜Loopの終了条件を指定して適当なところで処理を中止するのが、WhileキーワードやUntilキーワードです。

VBAの中では馴染みにくい制御文ですが、その分パワフルです。テキストファイル処理ではDo〜While処理がテンプレート化しています。

1.Do〜Loop構文

先にの方を見たほうがいいかもしれません。

Sub sumple1()
Dim i As Integer

Do
i = i + 1
Cells(i, 1).Value = i
Loop
End Sub

このコードは無限ループします。しかし実際はiがIntegerで宣言されているので32767行目でオーバーフローして停止します。

VBA_Do_While_1

2.前置While構文

WhileキーワードをDoの方につけるパターンです。「繰り返し処理に入る前に」終了条件を確認します。
ほとんどの場合はこちらで大丈夫です。

Sub sumple2()
Dim i As Integer

Do While i < 100 i = i + 1 Cells(i, 1).Value = i Loop End Sub

「100より小さい場合に」繰り返し処理に入ります。
繰り返し処理内でiをインクリメントしているので100まで入力されます。

VBA_Do_While_2

3.後置While構文

WhileキーワードをLoopの方につけるパターンです。「繰り返し処理の後に」終了条件を確認します。前置While構文と決定的に違うのは「必ず一回実行されることが保証」されます。もう一度繰り返すかユーザーに確認するときなど、とても便利です。

Sub sumple()
Dim i As Integer
Dim MaxIndex As Integer

Do
MaxIndex = i + 100

Do While i < MaxIndex i = i + 1 Cells(i, 1).Value = i Loop Cells(i, 1).Activate Loop While MsgBox("もう一度繰り返しますか", vbOKCancel) = vbOK End Sub

MaxIndexは繰り返し処理に入る前に、現在のiより100大きい数になっています。iとMaxindexはInteger宣言されているので、直後は0であることが保証されています。

VBA_Do_While_3


後置While文はFor制御文では完全に不可能な挙動をします。(泥くさく実装は出来ますが)より適した制御文を選べるようになると、VBAを触るのが楽しくなります。

VBAにはUntilキーワードも用意されていますがVBA独自ですので、Whileキーワードのみを使用するのが好ましいとされています。

Filed Under: Do〜While Tagged With: Do, Excel, vba, While, マクロ




© Copyright 2015 BizFAQ · All Rights Reserved · Powered by WordPress · Admin