Excel(エクセル)の操作が楽になる方法と便利な使い方を紹介しています。


menu

Excel(エクセル)が楽で便利になる方法 [あまおとろぐ]

条件によって処理内容を変更したい!分岐したい!Excelマクロ(VBA)のIf文

  • このエントリーをはてなブックマークに追加
[ この記事の内容は Excel2013 でも使えます ]
 
Excelのマクロ(VBA)で、セルの値に対して、
なにかの条件で処理内容を変更させたい場合があります。
 
例えば、
  • セルの値が”Aさん”の場合、隣のセルに○マークを表示する。
  • セルの値が”Aさん”でない場合、隣のセルに×マークを表示する。
  • セルに値が入っていない場合、隣のセルに”入力されていません!”を表示する。
  • セルの値が70以上の場合、隣のセルに”合格です!”を表示する。
など。
 
そんな時、If文を使うと簡単に処理を分けることができますよ。
 
 
この記事では、
  1. If文の使い方(その1:一番簡単なIf文を使いたい)
  2. If文の使い方(その2:条件を満たす・満たさないを一つのIf文で書きたい)
  3. If文の使い方(その3:複数の条件式を組み合わせたい)
  4. If文の使い方(その4:複数の条件を一つのIf文で書きたい)
を紹介していきます。
 
 

スポンサーリンク

If文の使い方(その1:一番簡単なIf文を使いたい)

[書式]
If 条件式 Then
   [条件式を満たす場合に実行される内容]
End If
 
一番基本的な書式ですね。
 
 
例えば、「セルA1の値が”Aさん”の場合、隣のセルB1に○マークを表示する」場合、こんな感じになります。
 
If Cells(1, 1).Value = "Aさん" Then
    Cells(1, 2).Value = "○"
End If
 
セルA1の値は Cells(1, 1).Value 、
セルB1の値は Cells(1, 2).Value で取得や設定ができます。
 
詳しくはこの記事をご覧くださいね。
 
 
 
上の例では Cells(1, 1).Value = “Aさん” の部分が条件式になります。
 
ここでは、= (イコール) を使って、Cell(1, 1)の値と”Aさん”という文字が同じかを比較しています。
文字を比較する場合、” (半角のダブルクォーテーション)で囲む必要があります。
 
 
 
逆に、「セルの値が”Aさん”でない場合、隣のセルに×マークを表示する」はどうなるでしょうか?
 
If Cells(1, 1).Value <> "Aさん" Then
    Cells(1, 2).Value = "×"
End If
 
少し変わりましたね。
条件式が Cells(1, 1).Value <> “Aさん” になってます。
 
ここで、<> という文字は、同じでない(等しくない)という意味になります。
 
ちょっとややこしいですが、「セルの値が”Aさん”でない」という条件を満たしてますので、
If文の内容が実行されることになります。
 
 
 
= や <> のような文字を 演算子 と呼びます。
他にもいろいろありますので、覚えておくと便利ですよ。
 
特に、数値や日付を比較する時、以上や未満といった演算子が活躍します。
 
  • =  同じである(等しい)
  • <>  同じでない(等しくない)
  • <=  以下
  • >=  以上
  • <  より小さい(未満)
  • >  より大きい
 

スポンサーリンク

If文の使い方(その2:条件を満たす・満たさないを一つのIf文で書きたい)

先ほどの例で、
  • セルの値が”Aさん”の場合、隣のセルに○マークを表示する。
  • セルの値が”Aさん”でない場合、隣のセルに×マークを表示する。
の両方を書きたい場合はどうなるでしょうか?
 
 
その1で使ったIf文を単純にくっつけると、こうなります。
 
If Cells(1, 1).Value = "Aさん" Then
    Cells(1, 2).Value = "○"
End If
 
If Cells(1, 1).Value <> "Aさん" Then
    Cells(1, 2).Value = "×"
End If
 
これでも問題ないのですが、ちょっと面倒ですね。
 
そんな時は、Else を使うとすっきりと書けます。
 
 
 
[書式]
If 条件式 Then
   [条件式を満たす場合に実行される内容]
Else
   [条件式を満たさない場合に実行される内容]
End If
 
 
 
書き換えるとこんな感じになります。
途中の2行をElseに置き変えただけですね。
 
If Cells(1, 1).Value = "Aさん" Then
    Cells(1, 2).Value = "○"
Else
    Cells(1, 2).Value = "×"
End If
 
この方法を使えば、条件文を一つだけ書けば良くなります。
 
条件文を変更する場合にも一か所だけで良いので楽ですね。
 
 

If文の使い方(その3:複数の条件式を組み合わせたい)

「If文の使い方その1」では、セルA1の値が”Aさん”の場合、という単純な例を使いました。
 
もう少し複雑な条件の場合、どうしたら良いでしょうか?
 
例えば、
  • セルA1の値が”Aさん”、かつ、セルB1の値が 80以上 の場合。
  • セルA1の値が”Aさん”、または、”Bさん”の場合。
など。
 
そんな時は、複数の条件式を書くことで対応できます。
 
 
 
先ほどの例の場合、それぞれこのように書きます。
 
 
If Cells(1, 1).Value = "Aさん" And Cells(1, 2).Value >= 80 Then
If Cells(1, 1).Value = "Aさん" Or Cells(1, 1).Value = "Bさん" Then
 
 
一つ一つの条件式を And や Or という文字でつないでいますね。
これを論理演算子と呼びます。
 
 
両方の条件を満たす場合は And
いずれかの条件を満たす場合は Or を使います。
(実はもう一つ、Not もあります。Not 以降の結果を反対にするものですが、若干わかりにくいのでここでは使いません)
 
 
ちなみに、条件式は2つ以上つなげることもできますよ。
 
例えば、
  • セルA1の値が”Aさん”、かつ、セルB1の値が 80以上
    または
    セルA2の値が”Bさん”、かつ、セルB2の値が 90以上
の場合はこんな感じです。
 
 
If ( Cells(1, 1).Value = "Aさん" And Cells(1, 2).Value >= 80 ) Or ( Cells(2, 1).Value = "Bさん" And Cells(2, 2).Value >= 90 ) Then
 
 
ちょっと見づらいですが、分割してみると良くわかります。
 
( Cells(1, 1).Value = "Aさん" And Cells(1, 2).Value >= 80 )
Or
( Cells(2, 1).Value = "Bさん" And Cells(2, 2).Value >= 90 )
ですね。
 
 
 
よく見ると、それぞれの条件文をカッコで囲んでいますね。
 
 
実は、「Andの方がOrより先に実行される」という優先順位があるんですが、
カッコで囲んでいる場合は、更に優先して実行されます。
 
条件式が長くなってくると、自分が意図しない順番でAndとOrが解釈される場合があります。
これを防ぐため、カッコで囲んでおくと間違いがありません。
 
 
カッコで囲んだ方が単純に見やすい、という効果もあるので、
囲むことをおすすめします。
 
 

If文の使い方(その4:複数の条件を一つのIf文で書きたい)

最後の使い方です。
 
「If文の使い方その2」では、
条件を満たす場合と満たさない場合を一つのIf文で書きました。
 
 
 
それでは、こんな条件の場合はどう表現できるでしょうか?
  • セルA1の値が 100 の場合、隣のセルB1に”満点”を表示する。
  • セルA1の値が 60以上、100未満 の場合、隣のセルB1に”よくがんばりました”を表示する。
  • セルA1の値が 30以上、60未満 の場合、隣のセルB1に”良い感じですね”を表示する。
  • セルA1の値が 0以上、30未満 の場合、隣のセルB1に”もっとがんばりましょう”を表示する。
とりあえずIf文を4つ使えばできそうですが、面倒ですね。
 
そんな時は、ElseIf を使うと複数の条件をくっつけることができます。
 
 
 
こんな感じになります。
 
If Cells(1, 1).Value = 100 Then
    Cells(1, 2).Value = "満点"
ElseIf Cells(1, 1).Value >= 60 And Cells(1, 1).Value < 100 Then
    Cells(1, 2).Value = "よくがんばりました"
ElseIf Cells(1, 1).Value >= 30 And Cells(1, 1).Value < 60 Then
    Cells(1, 2).Value = "良い感じですね"
ElseIf Cells(1, 1).Value >= 0 And Cells(1, 1).Value < 30 Then
    Cells(1, 2).Value = "もっとがんばりましょう"
Else
    Cells(1, 2).Value = "0~100以外の値でした"
End If

 
If文を複数使うよりもわかりやすくなりました。
 
 
 
よく見ると、一番最後に Else がありますね。
 
ここは、「Elseより上の条件」のどこにも一致しなかった場合、を意味します。
例えば、500や-10を入力すると、 “0~100以外の値でした”と表示されます。
 
これを付けておくと、条件の漏れを防ぐことができますよ。
 
 

まとめ

いかがでしたでしょうか?
 
If文を使うと、条件が複雑で、複数個あった場合でも
簡単で見やすく書くことができます。
 
 
一度、お試しくださいね。
 
スポンサーリンク

  • このエントリーをはてなブックマークに追加

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

だーしゅ
IT関係のお仕事してます。
Excel大好き。

[当ブログについて]

最近のコメント

  • だーしゅ { abcさん、コメントありがとうございます。 この記事で書いている「コピー」は、 ------------------------------------ 既に設定されている「セルやフォントの色」を Excelの「塗りつぶしの色」や「フォントの色」機能に設定する ------------------------------------ という意味で使っています。 なので、コピーした色をはりつけるときは、 リボン上にある「塗りつぶしの色」や「フォントの色」アイコンをクリックすれば良いですよ。 一度お試しくださいね。 } – 3月 26, 7:47 AM
  • abc { コピーした色を張り付ける方法がわからない。 } – 3月 26, 7:17 AM
  • だーしゅ { YUUKO26さん、コメントありがとうございます。 求めていた計算式があって良かったです。 >こちらの式でいう【田】の部分の項目が2つ存在する場合 ですが、COUNTIFS関数を使うと良いです。 COUNTIF関数に「S」が付いただけですが、 複数の項目を扱うことができます。 例えば、 =COUNTIFS(A4,"*田*", A4,"*子*")>0 とすると、「田」と「子」がある場合、TRUEになります。 これを使って、該当がなければ空欄、であれば、 = IF( COUNTIFS(A4,"*田*", A4,"*子*")>0, "○","" ) という感じですね。 式が分かりにくくなった時は、 一度、分解してみると良いですね。 } – 11月 14, 2:00 PM
  • YUUKO26 { 初めまして。まさに求めていた計算式でしたので、感動のあまりコメントさせていただきました! 本当にありがとうございます^^ ちなみに、こちらの式ですが、 こちらの式でいう【田】の部分の項目が2つ存在する場合、どのような式にすればよろしいでしょうか? 詳しく例を申し上げますと、ある列に田と子がある場合は○と示し、該当がなければ空欄としたい。。というかんじです。もしお教えいただけるようであればよろしくお願いします>< } – 11月 14, 8:57 AM
  • だーしゅ { 匿名さん、コメントありがとうございます。 解消されたようで良かったです。 } – 9月 12, 3:45 PM
  • { 長年の疑問が解消しました。ありがとうございます。 } – 9月 05, 5:00 AM