ステートメント

指定回数繰り返し(For...Nextステートメント)

あらかじめ繰り返す回数が決まっている場合は、
For...Nextステートメントを使います。

For カウンタ変数 = 初期値 To 終了値 [Step 増減値]
  ’処理
Next カウンタ変数


カウンタ変数というのはカウント用に使うというだけで、ただの変数です。

カウンタ変数に初期値を入れて処理を行い、「Next カウンタ変数」の
ところまできたら、カウンタ変数に増減値の値を加えて
終了値になるまで繰り返します。

増減値は省略可能で、省略した場合、1が加算されます。
マイナスを指定した場合、カウンタ変数から値を引いて繰り返します。

カウンタ変数には「i」や「n」など小文字アルファベット1文字を
使う事が多いです。

サンプルコード1


A1セル〜A10セルまで順番に連番を振ります。

Sub ForNextで繰り返し1()

Dim i As Long

With ThisWorkbook.Worksheets(1)
  For i = 1 To 10
    .Cells(i, "A").Value = i
  Next i
End With

End Sub


サンプルコード2


10行目から1行目まで下から順に行を削除していきます。

Sub ForNextで繰り返し2()

Dim i As Long

With ThisWorkbook.Worksheets(1)
  For i = 10 To 1 Step -1
    .Rows(i).Delete
  Next i
End With

End Sub


サンプルコード


繰り返すかどうかはFor...Nextステートメントの開始時に判定されます。

下記コードでは、カウンタ変数Iの値が1→4→7→10と変わり、
I = 10の時の繰り返しが終わった時点(I = 13)で繰り返し処理が
終了します。

Sub ForNextで繰り返し3()

Dim i As Long

With ThisWorkbook.Worksheets(1)
  For i = 1 To 11 Step 3
    .Cells(i, "A").Value = i
  Next i
End With

End Sub

ステートメント

条件式を使って繰り返し Do...Loop ステートメント3

先の2例では、先に条件を判断してから処理を行っています。
はじめの条件が当てはまらなかった場合は、1度も処理が
実行されません。

条件にかかわらず1回は処理を実行して、2回目以降から条件を
判定して処理を行うようにするにはUntil(While)以降を
Loopの後に持ってきます。

Do
  '繰り返したい処理
Loop Until 条件式



Do
  '繰り返したい処理
Loop While 条件式


サンプルコード



Sub DoUntilで繰り返し2()

Dim lngRow As Long

lngRow = 1

'1行目は無条件に実行、2行目以降は空白になるまで繰り返し
With ThisWorkbook.Worksheets(1)
  Do
    MsgBox .Cells(lngRow, "A").Value
    lngRow = lngRow + 1
  Loop Until .Cells(lngRow, "A").Value = ""
End With

End Sub



たいていはDo Until...Loopだけで済んでしまう事が多いので、
私はあまり使いません。

ステートメント

条件式を使って繰り返し Do...Loop ステートメント2

Do... Loopステートメントのもう1つの書き方として
「〜の間」というのがあります。

Do While 条件式
  '繰り返したい処理
Loop


次のサンプルは、前の「Do Untilで繰り返し」をDo Whileで書き直したものです。
条件式の書き方が、ちょうどDo Untilと逆になっています。

サンプル



Sub DoWhileで繰り返し()

Dim lngRow As Long

lngRow = 1

'A列が空白でなければ繰り返し
With ThisWorkbook.Worksheets(1)
  Do While .Cells(lngRow, "A").Value <> ""
    MsgBox .Cells(lngRow, "A").Value
    lngRow = lngRow + 1
  Loop
End With

End Sub


「〜の間」というのは、文章にすると回りくどい言い方で
なかなかわかりずらいと思います。

単なる書き方の問題なので、わからなかったらDo Untilを使って書けばOKです。

VBA以外のプログラム言語だとWhileを使った書き方しかなかったりするため、
どちらかというと他のプログラム言語を経験された方向けの書き方だと思います。

ステートメント

条件式を使って繰り返し Do...Loop ステートメント1


Do Until 条件式
  '繰り返したい処理
Loop


Untilは「〜まで」という意味です。
つまり、指定した条件式を満たすまで、Do〜Loop内の処理を繰り返します。

次のサンプルは、A列のセルを1行目から順番に見ていき、
空白セルになるまでメッセージボックスにA列の値を表示します。

サンプルコード



Sub DoUntilで繰り返し1()

Dim lngRow As Long

lngRow = 1

'A列が空白になるまで繰り返し
With ThisWorkbook.Worksheets(1)
  Do Until .Cells(lngRow, "A").Value = ""
    MsgBox .Cells(lngRow, "A").Value
    lngRow = lngRow + 1
  Loop
End With

End Sub


行数は変数lngRowの値で指定し、繰り返しの中で1ずつ増やしています。

最初に変数lngRowに1を指定して、空白でなければメッセージボックス表示して
変数lngRowを+1する。

すると変数lngRowが2になるため、次は2行目を判定して空白でなければ
メッセージ表示、次は3行目、4行目・・・・・・というのを
A列が空白になるまで繰り返します。


最後に変数lngRowの数を増やすのを忘れると、
lngRowが変わらない→ずっと同じセルを判定し続ける→
判定した空白ではなかった場合、永遠に処理が終わらない、という
「無限ループ」になります。

慣れていないと起こしやすいミスです。

無限ループになってしまった時は、「Esc」または「Ctrl」+「Break」で
処理を中断させる事ができます。

メッセージボックスが表示されている時は「Esc」での中断は
できないので、「Ctrl」+「Break」を使うといいでしょう。

ステートメント

いろいろな繰り返し処理

条件分岐では、IfステートメントとSelect Caseステートメントがありました。


繰り返し処理も、書き方が3通りあります。

1つ目は、条件式を指定して繰り返すDo...Loopステートメント。
2つ目は、指定した回数分繰り返すFor...Nextステートメント。
3つ目は、オブジェクトに対して繰り返すFor Each...Nextステートメント。


それぞれ微妙に動作が違うので、これからそれぞれを見ていきます。

ステートメント

Select Caseステートメントで「〜を含む」の書き方

Select CaseステートメントでLike演算子を使いたい時は、
ちょっと書き方が変わります。

サンプルコード


Sub SelectCaseで部分一致判定()

Dim test As String

test = "11A1"

Select Case True
  Case test Like "*A*"
    MsgBox "Aを含みます。"
  Case test Like "*B*"
    MsgBox "Bを含みます。"
  Case test Like "*C*"
    MsgBox "Cを含みます。"
End Select

End Sub


「Select Case 変数名」ではないので注意しましょう。

条件によって処理を変える(条件分岐)
複数条件で条件分岐する
複数条件で条件分岐する時の注意点
「〜を含む」の条件式の書き方
たくさん条件がある場合の書き方(Select Caseステートメント)
Select Caseステートメントで「〜を含む」の書き方

ステートメント

たくさん条件がある場合の書き方(Select Caseステートメント)

条件がたくさんある場合は、Ifステートメントより
Select Caseステートメントを使った方がコードが見やすくなります。

Select Case 対象
  Case A
    '対象の値がAの時の処理
  Case B
    '対象の値がBの時の処理
  Case Else
    ’対象の値がそれ以外の時の処理
End Select


サンプルコード1



Sub SelectCaseで条件分岐()

Dim n As Long

n = 1

Select Case n
  Case 1
    MsgBox "1です。"
  Case 2 To 3
    MsgBox "2〜3です。"
  Case Is >= 4
    MsgBox "4以上です。"
  Case Else
    MsgBox "0以下です。"
End Select

End Sub


これをIfステートメントで書くと、コードが読みづらくなるほか、
変数名を変えようと思った時に複数箇所を直さなければなりません。

サンプルコード2



Sub Ifステートメントの例()

Dim n As Long

n = 2

If n = 1 Then
  MsgBox "1です。"
ElseIf n >= 2 And n <= 3 Then
  MsgBox "2〜3です。"
ElseIf n >= 4 Then
  MsgBox "4以上です。"
Else
  MsgBox "0以下です。"
End If

End Sub


条件によって処理を変える(条件分岐)
複数条件で条件分岐する
複数条件で条件分岐する時の注意点
「〜を含む」の条件式の書き方
たくさん条件がある場合の書き方(Select Caseステートメント)
Select Caseステートメントで「〜を含む」の書き方

ステートメント

「〜を含む」の条件式の書き方(Ifステートメント)

条件を完全一致ではなく、部分一致で判定したい場合、
IfステートメントのLike演算子とワイルドカード(*)を使います。

サンプルコード1



Sub 部分一致で条件分岐1()

If ThisWorkbook.Worksheets(1).Range("A1").Value Like "*A*" Then
  MsgBox "セルA1は「A」を含みます。"
End If

End Sub


「A」という固定の文字ではなく「(変数の値)を含む」としたい場合は
下記のようにします。
""の範囲に注意してください。

サンプルコード2



Sub 部分一致で条件分岐2()

Dim test As String

test = "A"

If ThisWorkbook.Worksheets(1).Range("A1").Value Like "*" & test & "*" Then
  MsgBox "セルA1は「" & test & "」を含みます。"
End If

End Sub


「〜を含まない」場合は、下記のように「Like "*文字列*" = False」とします。

サンプルコード3



Sub 部分一致で条件分岐3()

Dim test As String

test = "B"

If ThisWorkbook.Worksheets(1).Range("A1").Value Like "*" & test & "*" = False Then
  MsgBox "セルA1は「" & test & "」を含んでいません。"
End If

End Sub


条件によって処理を変える(条件分岐)
複数条件で条件分岐する
複数条件で条件分岐する時の注意点
「〜を含む」の条件式の書き方
たくさん条件がある場合の書き方(Select Caseステートメント)
Select Caseステートメントで「〜を含む」の書き方

ステートメント

複数条件で条件分岐する時の注意点

複数条件で条件分岐をする場合、間違えやすい例としては、
2つ目以降の条件式の左辺を抜かしてしまうことです。

正:If n = 1 Or n = 10 Then
誤:If n = 1 Or 10 Then

2番目の「n =」が抜けています。
こうした場合、エラーにはなりません。

しかし、実行すると意図しない結果になります。
次のサンプルでは、変数nは0なのに、条件を満たした時の処理が
実行されてしまいます。

サンプルコード



Sub 複数条件のテスト()

Dim n As Long

n = 0

If n = 1 Or 10 Then
  MsgBox "test"
End If

End Sub


条件によって処理を変える(条件分岐)
複数条件で条件分岐する
複数条件で条件分岐する時の注意点
「〜を含む」の条件式の書き方
たくさん条件がある場合の書き方(Select Caseステートメント)
Select Caseステートメントで「〜を含む」の書き方

ステートメント

複数条件で条件分岐する(Ifステートメント)

Ifステートメントで複数条件で判定するには、
And演算子、Or演算子で条件式をつなぎます。

サンプルコード1


条件がAかつBの場合のサンプルコードです。

Sub 複数条件で条件分岐1()

Dim n As Long

If n >= 1 And n <= 10 Then
MsgBox "1以上10以下です。"
End If

End Sub


サンプルコード2


条件がAまたはBの場合

Sub 複数条件で条件分岐2()

Dim n As Long

If n = 1 Or n = 10 Then
MsgBox "1か10です。"
End If

End Sub


And演算子、Or演算子を使わずにIfステートメント
入れ子にする方法もあります。
条件式が長くなる場合はこちらの方が読みやすいかもしれません。

サンプルコード3



Sub 複数条件で条件分岐3()

Dim n As Long

If n >= 1 Then
If n <= 5 Then
MsgBox "1〜5です。"
Else
MsgBox "6以上です。"
End If
Else
MsgBox "0以下です。"
End If

End Sub


条件によって処理を変える(条件分岐)
複数条件で条件分岐する
複数条件で条件分岐する時の注意点
「〜を含む」の条件式の書き方
たくさん条件がある場合の書き方(Select Caseステートメント)
Select Caseステートメントで「〜を含む」の書き方

1 2 >>


Powered by Seesaa
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。