- ベストアンサー
EXCELでのIFの構文について
EXCEL2002を使っています。IFの構文で長い式の条件を与えるとします。(式Aとします)例えば式Aの結果が0のときは空白を、そうでなければ式Aの結果を出したいのです。その場合=if(式A=0,"",式A)で結果は出せるのですが、式Aがダラダラ長くてFALSEの部分をなにか簡単なもので代用できないかお尋ねしたいのです。一度他のセルに式Aをおいて、そのセルを参照させれば、簡単な式にはできるのですが、できればダイレクトにやりたいのです。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
セルの書式設定→、ユーザー定義 [#,###]にすれば、 0の場合は、空白に見えます。(値は0のままですが) 「ツール」→「オプション」→「表示タグ」の「ゼロ値」のチェックをはずせば、 全てのセルの0の値を空白にします。(値は0のままです) =TEXT(式A,"#,###")としてもできると思いますが、 どれも値は0で見た目のみ空白にしているだけです・・・ 値自体空白にしたいのでしょうか?
その他の回答 (3)
- dejiji-
- ベストアンサー率38% (327/858)
>できればダイレクトに ifの場合どうしても組み合わせたりすることが多いので長くなりやすいですね。(私もそうですが) 私のやり方が参考になれば。やはり、別セル(作業セル)を使います。これは式Aが長くなると、修正が必要になったときには、非常に複雑なため修正が困難になってきます。 別セルに式を入れ出来るだけシンプルにして、IF構文もシンプルにする。 作業セルは人に見せるものではないので、完成したら非表示にしてしまう。 これで、出来た表は(最終的に見える式)は簡単になる。 こんなやり方ですが、参考になれば。
- nishi6
- ベストアンサー率67% (869/1280)
『0の表示』だけなら書式で対処するのが簡単でしょう。 =if(式A=0,"",式A)としてしまうと、次に数値として使えなくなる場合があります。 >式Aがダラダラ長くてFALSEの部分をなにか簡単なもので代用できないかお尋ねしたいのです。 下のような表計算を考えてみます。 A B C D E F G H 1_____1____10___100__1000____1111__1111____1111__1111 2_____2____20___200__2000____2222__________2222______ 3_____3____30___300__3000____3333__3333____3333__3333 4_____4____40___400__4000____4444__________4444______ 5_____5____50___500__5000____5555__5555____5555__5555 6_____6____60___600__6000____6666__________6666______ E列(E1):=A1+B1+C1+D1 F列(F1):=IF(MOD(A1+B1+C1+D1,2)=0,"",A1+B1+C1+D1) 1行目を選択して、メニューから、挿入→名前→定義で 名前に Shiki 参照範囲に =!$A1+!$B1+!$C1+!$D1 を入力します。 ※この参照範囲は範囲名Shikiを使ったセルと同一行のA~D列の加算を意味します。 G列(G1):=Shiki H列(H1):=IF(MOD(Shiki,2)=0,"",Shiki) ※両式を下にコピーします。 とすれば、E、F列の値と同じになるはずです。 同じ式が多量にあると見やすくなり効果がある場合があります。(Excel2000です) 次に、質問の意味とは違うかもしれませんが、ユーザー定義関数を使えばすっきり書ける場合が多くあります。 作った本人には分かりやすいでしょう。(他の人が見て・・・?) 次のような式は =IF(A1+A3+A6+A7+A8+A9+A10<100,"",A1+A3+A6+A7+A8+A9+A10) ↓ ユーザー定義関数で下のように書くことができます。(ユーザー定義関数の作り方によります) =myCalc1(A1+A3+A6+A7+A8+A9+A10+B4) 'ユーザー定義関数例-1 Function myCalc1(myformula As String) Dim Work Work = Evaluate(myformula) myCalc1 = IIf(Work < 100, "", Work) End Function もう1つ例です。 G2:J11のG列でB2を検索し、見つかれば、H、I列を結合した文字列を帰り値にします。 =IF(ISNA(VLOOKUP(B2,G2:J11,1,FALSE)),"",VLOOKUP(B2,G2:J11,2,FALSE)&VLOOKUP(B2,G2:J11,3,FALSE)) ↓ =myVlookup1(B2,G2:J11) 'ユーザー定義関数例-2 Function myVlookup1(Rng As Range, searchRng As Range) Dim vL1 As Variant, vL2 As Variant, vL3 As Variant vL1 = Application.VLookup(Rng, searchRng, 1, False) vL2 = Application.VLookup(Rng, searchRng, 2, False) vL3 = Application.VLookup(Rng, searchRng, 3, False) myVlookup1 = IIf(IsError(vL1), "", vL2 & vL3) End Function
- imogasi
- ベストアンサー率27% (4737/17069)
私も、式は長くなりがちで、何かシンボル(記号など)で置換えできればと思うことがあります。しかし現状では無いようです。別セルに式の一部をセットしその「値」を使うしか方法がないと思います。でも可視性が悪くなりますね。また文字列としてあるセルに入れておいて、式の一部の表現に文字列として取りこむことも出来ないようです。&&A=’IF(・・・・)’で=ISNA(&&A) なんてね。第4世代のプログラム言語を少数見ていた経験からも、上記が出来ないものは多いです。プログラマ的 発想への対応になるので、エクセルが対応してくれる実現は遠いのでは。入力の手間は長い部分は式文字列を別セルにおいてコピー&ペーストで対処するとか。