ExcelマクロVBA再入門 | 第7回.セルの値によって計算を変える(ステートメント) | マクロが覚えられないという初心者向けに理屈抜きのやさしい解説



最終更新日:2016-03-29

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


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

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

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

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



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


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

という計算になります。

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

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



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



税込み、税抜きの計算はできたので、
後は、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 条件式 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)が上手く書けないという場合がほとんどなのです。

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


※※※ 練習問題 ※※※



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





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

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

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

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

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





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

第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.ひらがな⇔カタカナの変換|エクセル基本操作



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

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


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

    ↑ PAGE TOP