【第5回Excelマクロ】if文について【ほぼfor/if文】

今度は、合計金額が1,000以上のものに「〇」をつけていきましょう。

ある条件で処理を分岐させたい時、便利なのが if文になります。

if文について

if文の使い方は以下になります。

If 条件式 Then
    処理
End If

条件式を与えて結果が正しければ処理に移り、正しくなければif文外の次のコードに移ります。

例えば、以下のコードを実行すると合計価格を算出しながら1000以上の場合にセルに「〇」が入力されます。

For i = 2 To 5  '2行目から5行目までループ
    ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value  '各果物の合計価格
    
    If ws.Cells(i, 4).Value >= 1000 Then    '各果物の合計価格が1000以上だった場合
        ws.Cells(i, 5).Value = "〇" '〇と入力
    End If

Next i

この「ws.Cells(i, 4).Value >= 1000」が条件式で、この結果が正しい場合、処理「ws.Cells(i, 5).Value = “〇"」が実行された形になります。逆に条件式を満たさない場合は、この処理は実行されません。

比較演算子

条件式では2つの値を比較して、結果が正しいか・正しくないかを表します。

比較に使う記号(比較演算子)の中でも特によく使うものについて、変数 xとyを比較した時を例にまとめます。

  • x = y → xとyは等しい
  • x >= y → xはy以上
  • x > y → xはyより大きい
  • x <= y → xはy以下
  • x < y → xはyより小さい
  • x <> y → xとyは等しくない

例えば以下のコードを実行すると、条件式が正しいと「True」になり、正しくないと「False」と結果が返ってきます。

MsgBox 5 > 1    'True
MsgBox 5 < 1    'False

if文では条件式が「true」だと処理が実行され、「false」だと処理が実行されずにif文外の次のコードに移行する動きになります。

Like演算子

Like演算子という便利な記号もあります。その中でも特に使うものを紹介します。

  • ? → 任意の1文字
  • # → 任意の1桁の数値(0~9)
  • * → 0文字以上の文字

「?」は文字列の数を調べるときによく使います。

Dim hoge As String
hoge = "もも"
If ws.Cells(i, 1).Value Like "??" Then
    MsgBox "hogeは2文字"
End If

「#」は数字の桁数を調べるときに使います。

Dim hoge As Integer
hoge = 303

If hoge Like "###" Then
    MsgBox "hogeは3桁"
End If

「*」は使い方にコツが要りますが、以下のように使います。

Dim hoge As String
hoge = "ぶどう"

If hoge Like "ぶ*" Then
    MsgBox "文字の先頭が「ぶ」"
End If

If hoge Like "*ぶ*" Then
    MsgBox "文字列内に「ぶ」が入っている"
End If

If hoge Like "*う" Then
    MsgBox "文字の末尾が「う」"
End If

if文のネスト

例えば、合計価格が1,000以上で10,000未満のセルだけに「〇」をつけたい時、if文をネストして使います。

For i = 2 To 5  '2行目から5行目までループ
    ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value  '各果物の合計価格
    
    If ws.Cells(i, 4).Value >= 1000 Then    '各果物の合計価格が1000以上だった場合
        
        If ws.Cells(i, 4).Value < 10000 Then    '各果物の合計価格が10000未満だった場合
            ws.Cells(i, 5).Value = "1000以上10000未満"
        End If
        
    End If
    
Next i

ネストしすぎると見にくくなるので、論理演算子という特殊な文字列を使って書くこともできます。

論理演算子

上のネストをした例ですが、論理演算子の「And」を使うと以下のように書き換えられます。

For i = 2 To 5  '2行目から5行目までループ
    ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value  '各果物の合計価格
    
    If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then    '各果物の合計価格が1000以上10000未満の場合
        
        ws.Cells(i, 5).Value = "1000以上10000未満"
        
    End If
    
Next i

上の例では「And」(かつ)を使いましたが、論理演算子には以下の3つがあります。

  • Andかつ
  • Orまたは
  • Not否定

Andを使った以下の例では、変数 hogeに「ぶ」かつ「う」の両方の文字が入っていると条件式が trueになります。

Dim hoge As String
hoge = "ぶどう"

If hoge Like "*ぶ*" And hoge Like "*う*" Then
    MsgBox "hogeには「ぶ」と「う」が含まれる"
End If

Orを使った以下の例では、変数 hogeに「ぶ」または「う」のどちらかの文字が入っていると条件式が trueになります。

Dim hoge As String
hoge = "ぶどう"

If hoge Like "*り*" Or hoge Like "*う*" Then
    MsgBox "hogeには「り」または「う」が含まれる"
End If

Notを使った以下の例では、変数 hogeが「もも」ではない場合に条件式が trueになります。比較演算子を使うと、「hoge <> “もも"」と条件式を書き換えても結果は同じになります。

Dim hoge As String
hoge = "ぶどう"

If Not hoge = "もも" Then
    MsgBox "hogeはももではない"
End If

ElseIf

条件を複数設定し、それぞれ別の処理をしたい場合があります。そんな時は【ElseIf】を使います。

例えば、「合計価格が1,000以上10,000未満の場合」と「10,000以上の場合」とで処理を分けたい時、以下のように記述できます。

For i = 2 To 5  '2行目から5行目までループ
    ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value  '各果物の合計価格
    
    If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then    '合計価格が1000以上10000未満の場合
        
        ws.Cells(i, 5).Value = "1000以上10000未満"
        
    ElseIf ws.Cells(i, 4).Value >= 10000 Then    'の合計価格が10000以上の場合
        
        ws.Cells(i, 5).Value = "1000以上10000未満"
    
    End If
    
Next i

Else

【Else】を使うと、ifやelseIfの全ての条件に当てはまらない場合、else内の処理が実行されます。

例えば、「合計価格が1,000以上10,000未満の場合」と「10,000以上の場合」とで処理を分け、それ以外の価格は「1000未満」とセルに出力する際、以下のように記述できます。

For i = 2 To 5  '2行目から5行目までループ
    ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value  '各果物の合計価格
    
    If ws.Cells(i, 4).Value >= 1000 And ws.Cells(i, 4).Value < 10000 Then    '合計価格が1000以上10000未満の場合
        
        ws.Cells(i, 5).Value = "1000以上10000未満"
        
    ElseIf ws.Cells(i, 4).Value >= 10000 Then    '合計価格が10000以上の場合
        
        ws.Cells(i, 5).Value = "10000以上"
        
    Else    '上記以外の場合
        
        ws.Cells(i, 5).Value = "1000未満"

    End If
    
Next i

最後に

今回のif文と、前回のfor文とを組みわせることで、今後いろいろな処理ができるようになります。

次回はfor文と相性のいい配列の基本についてまとめようと思います。

ExcelExcelマクロ

Posted by プーレ