VBA技術解説
実は奥が深いIfステートメント

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
最終更新日:2020-05-17

実は奥が深いIfステートメント


プログラムと言うものは、
条件により処理を分ける。
これにつきます。


つまり、この条件が一番問題となります。
そして、その記述をするものが、
Ifステートメントになります。

IFステートメントの基本

まずはIFステートメントの基本を確認しましょう。

If 条件式 Then
  '条件式が真(True)の場合の処理
Else
  '条件式が偽(False)の場合の処理
End If

条件式は、 真(True)か偽(False)を評価する数式または文字列式を指定します。
例えば、



If A = B Then
  'A = B の場合の処理
Else
  'A <> B の場合の処理
End If

ここでの、A = Bは、真(True)か偽(False)を返します。
その結果が、
TrueならThen以下を処理します。
FalseならElse以下を処理します。

IFステートメントの詳細については以下を参照してください。
第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 の応用

IFステートメントのいろいろな書き方

以下のように、ブール型変数(Boolean)の判定を考えてみましょう。
・データ型 ・変数の使い方 ・変数名の規則 ・良く使われる変数名 ・自動型変換、暗黙の型変換 ・変数宣言の必要性 ・Dim変数宣言のまとめ

Dim A As Boolean
'・・・
If A = True Then
  A = True の場合の処理
Else
  A = False の場合の処理
End If

特に問題はなさそうですが、

If A = True Then

実はこれは、無駄な記述とも言えます。
もっと省略して書くことができます。
AはTrueかFalseな訳ですから、

If A Then

これだけでも良いのです。
例えば、よくあるのは



If IsNumeric(A) = True Then

IsNumericは、True/Falseを返す関数です。
つまり、IsNumeric(A)は真(True)か偽(False)しか返しませんので、

 If IsNumeric(A) Then

これだけで良い事になります。
もちろん、 = True を書いても問題ないですし、
むしろ、初心者には= True を書いた方が解り易いかもしれません。

では、否定形、つまり数値以外の場合はどうでしょうか。

If IsNumeric(A) <> True Then

これでも良いのですが、
<> True
これは
= False
ですね。

If IsNumeric(A) = False Then

Not演算子 を使って、

If Not IsNumeric(A) Then

このように書いた方が、英文っぽくて格好よくいかもしれません(笑)
上記の場合は、どちらを書いても良いと思います。
むしろ無理に否定形にしないで、

If IsNumeric(A) Then
Else
  '・・・
End If

このようにElseに記述した方が理解しやすい場合も多いです。
例えば、
条件式が複雑な場合に無理に否定形を作ろうとして、かえって間違った条件式にしてしまう事もありえます。

ようは、同じ条件の書き方でも、何通りも書き方があるという点です。
では、どのような書き方が良いかというと、

読みやすい
解り易い


これにつきます。
そして、読みやすい・解り易い 、これは人により違ってきますし、
何より、単純にVBA記述だけでは何が良いかは断定できない場合も多いものです。
その条件が出てきた背景や、VBAを共有する人たちの共通認識等々、これらによって変わってくるものです。
つまり、読みやすい・解り易い 、これらは時と場合によって変わってきます。

まずは、自身にとってにとって、読みやすい・解り易い、これが一番良いでしょう。
そして次には、VBAを共有する人たちにとって、読みやすい・解り易い、そのようなVBAを書くようにしていきましょう。



同じテーマ「マクロVBA技術解説」の記事

プログラミングの基本~ロジックの組み立て
実は奥が深いIfステートメント
論理積(And)論理和(Or)と真(True)偽(False)の判定
If条件式のいろいろな書き方:TrueとFalseの判定とは
VBAでの括弧()の使い方、括弧が必要な場合
VBAにおけるピリオドとカンマとスペースの使い方
変数とプロシージャーの命名について
文字列置換の基本と応用(Replace)
データクレンジングと名寄せ
ForとIfのネストこそがVBAの要点


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

TOROW関数(配列を横1行の配列にして返す)|エクセル入門(2022-10-31)
TOCOL関数(配列を縦1列の配列にして返す)|エクセル入門(2022-10-31)
CHOOSECOLS関数(配列から複数の指定された列を返す)|エクセル入門(2022-10-29)
CHOOSEROWS関数(配列から複数の指定された行を返す)|エクセル入門(2022-10-29)
WorksheetFunctionの効率的な使い方とスピル新関数の利用|VBA入門(2022-10-27)
VSTACK関数(配列を縦方向に順に追加・結合)|エクセル入門(2022-10-25)
HSTACK関数(配列を横方向に順に追加・結合)|エクセル入門(2022-10-25)
LAMBDA以降の新関数の問題と解説(配列操作関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題集|エクセル入門(2022-10-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.エクセルVBAでのシート指定方法|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




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


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



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