ステートメント

条件式を使って繰り返し 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ステートメントで「〜を含む」の書き方

ステートメント

条件によって処理を変える(条件分岐)

条件によって処理を分岐させるには、IfステートメントかSelect Caseステートメントを使います。

書き方の違いだけなので、どちらを使ってもOKです。
まずはIfステートメントから見ていきます。

If 条件式A Then
  '条件式Aがあてはまる時の処理
ElseIf 条件式B Then
  '条件式Bが当てはまる時の処理
Else
  'どれにも当てはまらない場合の処理
End If


ElseIf、Elseは必要がなければ省略できます。


If 条件式A Then
  '処理
End If


条件式では比較演算子を使います。
比較演算子意味
=等しい
<>等しくない
<=左辺が右辺以下
>=左辺が右辺以上
<左辺が右辺未満
>左辺が右辺より大きい


サンプルコード


マクロがあるブックの一番左側のシートのA1セルが空白(長さ0の文字列)かどうかを判断して、メッセージボックスを表示させます。

Sub Ifステートメントを使った条件分岐()

If ThisWorkbook.Worksheets(1).Range("A1").Value = "" Then
MsgBox "セルA1は空白です。"
Else
MsgBox "セルA1は値が入力されています。"
End If

End Sub


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

ExcelVBAの基礎知識

マクロ記録で記録できない命令

何かと便利なマクロ記録ですが、記録できないものもあります。
ステートメント(オブジェクトに影響しない命令)は記録できません。

また、一般機能同様、VBAでも関数が使用できます。
一般機能でセルに関数を書いた場合は記録できますが、
VBAにしかない関数は記録できません。

ExcelVBAの基礎知識

メソッド・プロパティの調べ方

最初のうちは「こういう動作をさせたいけど、どんなメソッド・プロパティを使ったらいいかわからない」という事が多々あると思います。

その時は、まずマクロ記録で動作を記録してみましょう。

Excelのメソッドやプロパティ名は英語なので、マクロ記録をすればたいてい、どのメソッドがどんな動作をするのかが見当つくと思います。

そうしたら、次はヘルプでそのメソッドを引数がどんなものがあるか、詳しく調べます。

はじめは面倒かもしれませんが、慣れるうちにだんだん覚えていき、
調べる量も減っていきますよ。

<<前の10件  .. 3 4 5 6 7..  次の10件>>


Powered by Seesaa
×

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