すべてのカテゴリ » インターネット・パソコン » ソフトウェア » ソフトウェア全般

質問

終了

エクセルのIF文を使う際の条件分岐について質問させてください。


A1の値が「1」で
B1の値が「空白」でない場合

という条件式を書いて

真の場合:「C1」-「D1」と計算せよ
偽の場合:「D1」-「C1」と計算せよ

と書きたいのですが、
どのように表現したらよいかわからず困っております。



IF=A1=1,C1-D1,D1-C1

まではわかるのですが、

A1の値が「1」で
B1の値が「空白」でない場合

の書き方がわからないのです。
基本的な質問で申し訳ないのですが、
検索してもよい答えを見つけられなかったので
よろしくお願いいたします。

  • 質問者:たんぽぽ
  • 質問日時:2009-01-28 11:51:24
  • 0

並び替え:

=IF(ISNUMBER(B1), IF(AND(A1=1, NOT(OR(ISBLANK(B1), B1=""))), (C1-D1),(D1-C1)), 0)

こんな感じで良いのではないかと思います。このままだと非常に見辛いので核心の部分を抜き出すと…

AND(A1=1, NOT(OR(ISBLANK(B1), B1="")))

となります。これを

AND(A1=1,
   NOT(OR(ISBLANK(B1),
       B1=""
     )
   )
)

等とメモ帳等に書き出して、見易くする為に関数毎に段差(インデント)をつけて書くと、解かり易くなると思います。複雑にカラむ場合はセルを分けて計算しても良いですよ。その方が論理構造が解かり易くなります。

例えばC1セルに『NOT(OR(ISBLANK(B1),B1=""))』とか入れておくと、C1セルにはB1セルが空白かどうかの判定の結果が入るので

AND(A1=1, C1)

と先程の数式が非常にスッキリします。この式をD1に入れておくと、最初の式は

=IF(ISNUMBER(B1), IF(D1, (C1-D1),(D1-C1)), 0)

ここまで綺麗になります。

ちなみにISBLANKはセルが完全な空白(何も入っていない)かどうかを判断する関数です。場合に拠っては半角空白で消しちゃう人もいそうなので『B1=" "』を付け加えておくとエラーに強い式になりますネ。

また質問を読むとB1が数値で無い可能性が高そうなので、数値かどうかを判断しないと後の数式でエラーになるので最初のIFで判定していて数値で無い場合はゼロとするようにしています。

===補足===
返信有難うございました。プログラマではないのに既にしかも自然にインデント付けを実行されていらしたとは流石です。

以下余談ですが…エラー対処を真面目にすると結構手間が掛かるので私も見栄えの欲しいもの以外はほったらかしが多いですけどね(笑。Excelで作り込んで行くと計算シートと表示シートとごちゃごちゃになって来る事も多いので、最近は入力用シートと表示用シートと計算用シートを最初から別々に作る事が多くなりました。

その様にすると先の例の様に余分にセルを使って本来の計算式を見易く作ることも出来ますし、計算の都合で表示を犠牲にしたり表示の為に計算がゴチャゴチャする事もなくなるので将来複雑になる可能性の高そうなブックほど、最初から分離するようにしています。

頑張ってください。

この回答の満足度
  
参考になりました。回答ありがとうございました。
お礼コメント

高度な条件式ですね。
ええっと、どうなっているんだろう?と自分の書いた式を点検していると
自然にインデントをつけていました。プログラマーさんがこのように表記する理由が
ちょっとだけわかった気がしました。

数値でないところにエラーがでるのも、実用面では困らないものの
なんでだろう?と不思議に思ってました。参考にしてみます。
くわしく説明していただいて、ほんとうにありがとうございます!

匿名さんのでいいと思います。

もしくは
=IF(A1=1,IF(B1<>"",C1-D1,D1-C1))
とか

すいません括弧をひとつ忘れてたので再度書き込みしました

===補足===
A1が1じゃない場合がある場合
匿名さんと同じ計算をする式の場合
=IF(A1=1,IF(B1<>"",C1-D1,D1-C1),D1-C1)
となります。

この回答の満足度
  
参考になりました。回答ありがとうございました。
お礼コメント

いろんな書き方があるんですね。
たしかに、「A1が1じゃない場合がある場合」もでてきそうなので
参考にさせていただきます。補足までていねいにつけていただいて
ありがとうございます!

IF(AND(A1=1,B1<>""),C1-D1,D1-C1) ですね。
AND を使えばいいです。

  • 回答者:匿名 (質問から11分後)
  • 1
この回答の満足度
  
参考になりました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る