VBA再入門
セルの値によって計算を変える(Ifステートメント)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-08-26 最終更新日:2020-09-30

第7回.セルの値によって計算を変える(Ifステートメント)


エクセルでは、他の列の値によって計算式を変えたりすることが多々あります。
つまり、条件により処理を分けるということです。


ワークシートではIF関数を使いますが、
マクロVBAでも、IfIfと書くのですが、その後の書き方が違ってきます。

Ifの説明用のサンプル

以下の表を使いましょう。

エクセル マクロVBA 実行結果

単価が、税込み単価と、税抜き単価が混在している表になります。
C列に単価が税込みか税抜きかの区分が入っています。

単価が税込なら、単価×数量
単価が税抜きなら、単価×数量×1.08

このようにして税込み金額を求めるという計算になります。

消費税の端数に関しては、今回は無視します。
端数処理には、関数が必要になりますので、関数は今後説明します。

まずは、全て税込みとして計算する場合、

エクセル マクロVBA サンプルコード

では、今度は、全て税抜きとして計算する場合、

エクセル マクロ サンプルコード

税込み、税抜きの計算はできたので、
後は、C列の税込/税抜を判断して、計算を切り替えればよいという事です。

マクロVBAでのIfの使い方

処理を分けるには、
Ifを使います。
用語としてはIfステートメントと言います。
条件により、処理を分けることが出来ます。

エクセル マクロ サンプルコード

ここは理屈はあまり必要としません。
ステップインF8で、どのように動いているかを確認してください。
必ず、ステップインF8で確認してください。
「こんなのステップインF8じゃなくても分かるよ」
と言いたいかもしれませんが、必ずステップインF8で確認してください。

こういう些細な事の経験の積み重ねが、後々に生きてくるのです。
そういう経験なしに、上達はあり得ないのです。
最後に練習問題を掲載していますので、ぜひ取り組んでください。

Ifステートメントの書き方

真(True)と偽(false)の両方があるとき
If 条件式 Then
  真(True)の場合の処理
Else
  偽(False)の場合の処理
End If


偽(False)の場合の処理を書かない場合
If 条件式 Then
  真(True)の場合の処理
Else
End If

↓ 通常は、Elseも省略します。
If 条件式 Then
  真(True)の場合の処理
End If


真(True)の場合の処理を書かない場合
If 条件式 Then
Else
  偽(False)の場合の処理
End If


・真(True)の場合とは、
 条件式の結果が正しい場合の事です。
・偽(False)の場合とは
 条件式の結果が間違っている場合の事です。

If Cells(1, 1) = 100 Then
この時、
A1セルに100が入っていれば真(True)
A1セルに100が入っていなければ偽(False)


真(True)の場合の処理、偽(False)の場合の処理には、
それぞれ複数行の命令(処理)を書けます。

Ifのネスト(入れ子)

Ifネスト(入れ子)することが出来ます。
つまり、Ifの中にさらにIfを入れることが出来るという事です。

If 条件式1 Then
  If 条件式2 Then
    条件式1が真、かつ、条件式2が真
  Else
    条件式1が真、かつ、条件式2が偽
  End If
Else
  If 条件式2 Then
    条件式1が偽、かつ、条件式2が真
  Else
    条件式1が偽、かつ、条件式2が偽
  End If
End If


AndとOr

シートでは、AND関数OR関数がありますが、
マクロVBAでは、AndやOrは論理演算子と言います。

And演算子
論理積と言い、「かつ」という事です。
Andの前後の条件が、同時に満たされたときが真(True)となります。
If 条件1 And 条件2 Then
このように使います。
If Cells(i, 3) = "税込" And Cells(i, 1) > 100 Then
これは、Cells(i, 3)が"税込" かつ Cells(i, 1)が100より大きい場合

Or演算子
論理和と言い、「または」という事です。
Orの前後の条件の、片方または両方が満たされたときが真(True)となります。
If 条件1 Or 条件2 Then
このように使います。
If Cells(i, 3) = "税込" Or Cells(i, 1) > 100 Then
これは、Cells(i, 3)が"税込" または Cells(i, 1)が100より大きい場合

ElseIfとSelect Caseについて

書籍やネットでは真っ先に紹介している場合を見かけますが、むしろ、後回しにして覚えた方がよいでしょう。
それでも、やはり気になる方も多いと思うので、どういうものかだけ紹介しておきます。

VBAでの条件分岐が、多分岐になる場合があります。
多分岐とは、
1なら・・・
2なら・・・
3なら・・・
というように、多岐に処理を分岐する場合です。

このような場合は、
Ifでは、ElseIfを使った書き方になります。

また、Select Caseを使う書き方もあります。
ElseIfはコードが少し読みずらくなりますので、むしろSelect Caseを使った方が良いです。
Select Caseを使うと、記述が簡潔になりますし、使えると非常に便利なものです。
ただし、基本はIfなので、これをしっかりとマスターしてから、Select Caseを勉強してください。

少なくとも、覚えるのはこのシリーズを終えてからでも遅くはありません。
今は、そういうものがあるという事だけ知っていれば十分です。

マクロVBAは、プログラミングです

プログラミングは、
繰り返し(For)と条件分岐(If)で全体の流れを作りつつ、関数・機能を使い処理を書く
という事です。

書籍やネットの情報のほとんどは、関数・機能について書かれています。
もちろん、関数・機能を知らなければマクロVBAを書き進めることはできませんが、それだけでは書けないのです。

そして、プログラミングの本質・品質は、繰り返し(For)と条件分岐(If)で決まるものです。
前回までのForと今回のIfが、プログラミングの基礎であり、最重要かつ最優先にマスターすべきことです。
これらをマスターする良い方法は・・・

とにかく書いて、とにかく実行する

これしかありません。
とにかく書いて、納得するまで何度でもスッテプインF8で実行してください。
結局、マクロVBAが覚えられないという人の多くは
この繰り返し(For)と条件分岐(If)が上手く書けないという場合がほとんどなのです。

関数・機能については、今後説明していきますが、
関数は、シートの関数とセットで覚えるようにします。
機能は、手作業で使うエクセルの機能とセットで覚えるようにします。
これらは、何回か後の回に詳しく説明します。

Ifステートメントの練習問題

エクセル マクロVBA 練習問題

F列に5科目の合計を出力します。
G列に"合格"と"不合格"を判定して出力します。
・合格の条件
 合計が350点以上、かつ、英語・数学・国語の3教科は全て70点以上である事

エクセル マクロ サンプルコード

エクセル マクロ サンプルコード

上記のどちらでも動作は同じです。
両方書いてみて下さい。
Ifの書き方はいろいろあり、どれが良いとは一概に言えません。
どのような書き方が良いかというと・・・
あなたにとってわかり易い書き方が一番良いのです。

書き写しで構いません。
しかし、必ずステップインF8で実行して、しっかりと確認してください。

※VBAコードの掲載方法について
画像で掲載していますが、
それは、実際にご自身でタイピングして覚えてもらいたいからです。
自分でタイピングもしないで、読むだけでVBAを覚えられるなどとは考えないことです、それは無理というものです。

改行方法について

VBAコードがあまり横に長くなってしまうと見づらくなります。
そういう時は、改行して書くことが出来ます。

半角スペースに続けて_(アンダーバー)を書くことで、続きを次の行に書けます。
この改行方法も含めて、実際に上の画像を見ながら書いてみて下さい。

ExcelマクロVBA入門等の対応ページ

第20回.条件分岐(If)
・Ifステートメントの構文 ・IFステートメントの条件式 ・Ifステートメントの使用例文 ・Ifステートメントのネスト(入れ子) ・サイト内のIfステートメント参考ページ ・最後に

第21回.条件分岐(ElseIf)
前回のIFステートメントでは、真か偽の二択でした。今回は、もっと多くの分岐が必要な、Ifステートメントで多肢条件分岐の場合の書き方です。ステートメントとしては、Ifステートメントです。IfステートメントのElseIfの構文 If条件式1Then 条件式1が真の処理 [ElseIf条件式2Then 条件式2が真の処理…

第22回.条件分岐(Select Case)
・Select Caseステートメントの構文 ・Select Case の例文 ・Select Case の応用

第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。

Ifステートメントは、プログラムの根幹であり極めて重要です。
習得の過程で、以下の記事も是非ご参考にお読みください。

素直なプログラミング
プログラムを作る場合、「可読性」「保守性」等々に気を配る必要がありますが、まずは、素直なコードを書くことでしょう。テクニックに走ったりせず、頭に浮かんだ事をそのままコーディングしていく事も重要です。頭に浮かんだ事が、今の自分のスキルレベルなのですが、スキルが上がれば、頭に浮かぶ事も、少しずつ変化してきます。

IF文の整理と論理的思考
論理的思考でIf文を整理することについて、簡単な例で解説していきます。無駄な条件が入っていたり、条件が重複しているプログラム程理解しずらい物はありません。問題です。以下のマクロについて、気が付いたことを指摘して下さい。

条件式のいろいろな書き方
If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…

実は奥が深いIfステートメント
プログラムと言うものは、条件により処理を分ける。これにつきます。つまり、この条件が一番問題となります。そして、その記述をするものが、Ifステートメントになります。IFステートメントの基本 まずはIFステートメントの基本を確認しましょう。



同じテーマ「マクロVBA再入門」の記事

第4回.セルの値を使って計算する(四則演算)
第5回.同じ計算を行数分繰り返す(For~Next)
第6回.表の先頭から最終行まで繰り返す(ForとEnd(xlUp).Row)
第7回.セルの値によって計算を変える(Ifステートメント)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)


新着記事NEW ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ