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

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
最終更新日:2018-10-19

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


エクセルでは、他の列の値によって計算式を変えたりすることが多々あります、


つまり、条件により処理を分けるということです、

シートではIF関数を使いますが、マクロVBAでもIfなのですが書き方が違います。

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

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

単価が、税込み単価と、税抜き単価が混在している表になります。

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

という計算になります。

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

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

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

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

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

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

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

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

ここは理屈はあまり必要としません。
ステップインF8で、どのように動いているかを確認してください。
必ず、ステップインF8で確認してください。
こんなのステップインF8じゃなくても分かるよ、と言いたいかもしれませんが、必ずステップインF8で確認してください。
こういう些細な事の経験の積み重ねが、後々に生きてくるのです。
そういう経験なしに、上達はあり得ないのです。
最後に練習問題を掲載しています、ぜひ取り組んでください。

■Ifの書き方

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について

書籍やネットでは真っ先に紹介している場合を見かけますが、むしろ、後回しにして覚えた方がよいです。

それでも、やはり気になる方も多いと思うので、どういうものかだけ紹介しておきます。

多分岐になる場合があります。
多分岐とは、
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)が上手く書けないという場合がほとんどなのです。


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


※※※ 練習問題 ※※※

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

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

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

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

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

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

改行方法について
VBAコードがあまり横に長くなってしまうと見づらくなります。
そういう時は、改行して書くことが出来ます。
半角スペースに続けて_(アンダーバー)を書くことで、続きを次の行に書けます。
この改行方法も含めて、実際に上の画像を見ながら書いてみて下さい。

※VBAコードの掲載方法について

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


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

条件分岐(IF)
ある条件の時だけ処理したい事もあれば、条件によって処理内容を変更したい事もあります。条件により処理を分岐させたい場合に使うのが、Ifステートメントです。VBAマクロで自動化する場合の多くは、条件により処理を変えつつ一定回数繰り返すという事です。

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

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

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

実は奥が深いIfステートメント
プログラムと言うものは、条件により処理する これにつきます。つまり、この条件が一番問題となります。そして、その記述をするものが、Ifステートメントになります。If条件式Then 条件式が真(True)の場合の処理 Else 条件式が偽(False)の場合の処理 EndIf 条件式は、真(True)か偽(False)を評価する数式または文字列式を指定します。




同じテーマ「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,Barders,Interior)


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

SQL関数と演算子|SQL入門(12月1日)
データの取得:集約集計、並べ替え(DISTINKT,GROUP BY,ORDER BY)|SQL入門(11月30日)
データの取得:条件指定(SELECT,WHERE)|SQL入門(11月29日)
データの挿入:バルクインサート|SQL入門(11月28日)
データの挿入(INSERT)と全削除|SQL入門(11月26日)
テーブル名変更と列追加(ALTER TABLE)とテーブル自動作成|SQL入門(11月25日)
テーブルの作成/削除(CREATE TABLE,DROP TABLE)|SQL入門(11月24日)
データベースに接続/切断|SQL入門(11月23日)
SQLiteのインストール|SQL入門(11月22日)
SQL入門:VBAでデータベースを使う|エクセルの神髄(11月22日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.マクロって何?VBAって何?|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • セルの値によって計算を変える(Ifステートメント)

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


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



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