タイトルは検索用のためぶっきらぼうですが、よろしくお願いします。
以下のように、A列からB列までの日数を求めるのですが、AやBに ””(空白)や #VALUE!エラー が入ることがあるので、IF関数で回避させています。
A B C列
2行 10/1 10/25 =B2-A1+1
(C2は25となる)
↓
=IF(B2="","甲",B2-A1+1)
または
=IF(ISERROR(B2),"乙",B2-A1+1)
ところが、
=IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",IF(B2="","甲",B2-A2+1)))
という複合式なら、甲、乙、丙はきちんと判別されるのに、
=IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
という風に順を変えると、結果は
#VALUE!
になってしまいました。
A B C列
2行 10/1 #VALUE! =IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
(C2は #VALUE! となる。乙にならない)
また、
=IF(OR(B2="",ISERROR(A2),ISERROR(B2)),"",B2-A2+1)
でも、同じように #VALUE!エラーになってします。
関数の順番を変えただけで、なぜ ISERROR が正常に値を返さないのでしょうか?
No.2ベストアンサー
- 回答日時:
エラー値はエラー値であって、論理演算を含めすべての演算ができま
せん。エラーが空白と等しいとかエラーが0より大きいとか、エラー
に1を足すといくつになるかとか、そんなことは意味がないのです。
よって、最初にB2=""という論理演算をさせようとした時点であなた
の負けです。if関数は真偽の判定ができず、エラーを返します。ご執
心のiserror関数は、if関数の判定式がFALSEを返したときにだけ実行
される部分にありますから、if関数の判定式がエラーを返してしまえ
ば実行される機会はありません。
基本的には、#value!エラーなんてものを放置しないで、ちゃんと決
着をつけるものですけどね。
なるほど!
B2=#value!エラー のときは
B2=""という論理演算 は無視してくれるかと思って
深く考えずにIFを連ねていましたが、確かに論理演算させることに無理がありました。
=IF(X99="","",~)
は私のクセみたいなものですが、
=IF(ISERROR(X99),"",ー)
の方を先に持ってくるように意識するべきだということですね。
バリューが入る可能性のあるセル、を使う演算、について、勉強になりました。ありがとうございます。
No.1
- 回答日時:
質問の主旨をどのようにとらえていいのか迷いますが・・・
=IF(COUNT(A2:B2)=2,B2-A2+1,"日付を入れて下さい")
>関数の順番を変えただけで、なぜ ISERROR が正常に値を返さないのでしょうか?
式の順番に計算するからでは?
=IF(B2="","甲",~)
B2=""の論理演算の時点でエラーとなります。
早速のご回答ありがとうございます。
実際には A2 にも B2 にも式を入れてあります。
A B
2行 =IF(E2="","",E2+1) =("2006/"&F2)*1
値は例えば 10/1 10/25 となります。
E2 や F2 が文字列XYZなどの不適切な値だと、上の式により A2 や B2 が #VALUE! となるので、
C2 に 甲や乙や丙の文字または 空白(ヌル)を表示したくて、
=IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
や
=IF(OR(B2="",ISERROR(A2),ISERROR(B2)),"",B2-A2+1)
という式を入れたのです。
IF式P(IF式Q(IF式R、))
の順だと IF式Qはちゃんと働く(つまりこの場合は、B2 が #VALUE! のとき、値”乙”を返す)のに、
IF式R(IF式P(IF式Q、))
の順だと IF式Qはエラー(つまりこの場合は、B2 が #VALUE! のとき、#VALUE! を返す)となる
という現象について尋ねたつもりでした。
説明を省略し過ぎましたが、今回の場合はCOUNTはちょっと都合が悪いです。
>式の順番に計算するからでは?
>=IF(B2="","甲",~)
>B2=""の論理演算の時点でエラーとなります
そうですか? C2に
=IF(B2="","甲",IF(ISERROR(A2),"丙",IF(ISERROR(B2),"乙",B2-A2+1)))
という式を入れている時、
B2に
=("2006/"&F2)*1
という式を入れて、ここが #VALUE! となると、
C2も #VALUE! となりますが、
B2の中身を削除(空白に)すると、
C2はちゃんと”甲”になりますので、
IF式R(この場合はIF(B2="","甲",~ )は論理演算できていると思いますが?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) <追加質問>【Excel関数】特定の文字を別表のリストの文字に変換したい 5 2022/10/23 13:09
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
F9キーを実行するVBスクリ...
-
エクセル関数式=ABSで#VALUE!...
-
マクロで"#N/A"のエラー行を削...
-
ApplicationとWorksheetFunctio...
-
現在、QueryTableが設定されて...
-
Python openpyxlを使用したセル...
-
VBA GoTo Error 処理が上手くい...
-
WindowsでのPythonの挙動について
-
Excel vbaについての質問
-
【VBA】ワークブックを開く時に...
-
UWSCでエラー発生時の対処法に...
-
VBA データ(特定値)のある最...
-
#N/Aの文字を削除するには
-
筆王画面が終了できない
-
実行時エラー'-2147467259(8000...
-
Maximaでのエラーメッセージ
-
IMEの単語登録について
-
paizaで下記コードを提出すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
マクロで"#N/A"のエラー行を削...
-
VBAでfunctionを利用しようとし...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
エクセル関数を教えてください
-
On ErrorでエラーNoが0
-
お助けください!VBAのファイル...
-
VBA データ(特定値)のある最...
-
【VBA】ワークブックを開く時に...
-
インポート時のエラー「データ...
-
実行時エラー'-2147467259(8000...
-
マクロの「SaveAs」でエラーが...
-
WindowsでのPythonの挙動について
-
ApplicationとWorksheetFunctio...
-
Excel vbaについての質問
-
エクセルVBA 「On Error GoTo...
-
Filter関数を用いた結果、何も...
-
ACCESSで値を代入できないとは?
おすすめ情報