• ベストアンサー

EXCELでのIFの構文について

EXCEL2002を使っています。IFの構文で長い式の条件を与えるとします。(式Aとします)例えば式Aの結果が0のときは空白を、そうでなければ式Aの結果を出したいのです。その場合=if(式A=0,"",式A)で結果は出せるのですが、式Aがダラダラ長くてFALSEの部分をなにか簡単なもので代用できないかお尋ねしたいのです。一度他のセルに式Aをおいて、そのセルを参照させれば、簡単な式にはできるのですが、できればダイレクトにやりたいのです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

セルの書式設定→、ユーザー定義 [#,###]にすれば、 0の場合は、空白に見えます。(値は0のままですが) 「ツール」→「オプション」→「表示タグ」の「ゼロ値」のチェックをはずせば、 全てのセルの0の値を空白にします。(値は0のままです) =TEXT(式A,"#,###")としてもできると思いますが、 どれも値は0で見た目のみ空白にしているだけです・・・ 値自体空白にしたいのでしょうか?

その他の回答 (3)

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.4

>できればダイレクトに ifの場合どうしても組み合わせたりすることが多いので長くなりやすいですね。(私もそうですが) 私のやり方が参考になれば。やはり、別セル(作業セル)を使います。これは式Aが長くなると、修正が必要になったときには、非常に複雑なため修正が困難になってきます。 別セルに式を入れ出来るだけシンプルにして、IF構文もシンプルにする。 作業セルは人に見せるものではないので、完成したら非表示にしてしまう。 これで、出来た表は(最終的に見える式)は簡単になる。 こんなやり方ですが、参考になれば。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

『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/17068)
回答No.2

私も、式は長くなりがちで、何かシンボル(記号など)で置換えできればと思うことがあります。しかし現状では無いようです。別セルに式の一部をセットしその「値」を使うしか方法がないと思います。でも可視性が悪くなりますね。また文字列としてあるセルに入れておいて、式の一部の表現に文字列として取りこむことも出来ないようです。&&A=’IF(・・・・)’で=ISNA(&&A) なんてね。第4世代のプログラム言語を少数見ていた経験からも、上記が出来ないものは多いです。プログラマ的 発想への対応になるので、エクセルが対応してくれる実現は遠いのでは。入力の手間は長い部分は式文字列を別セルにおいてコピー&ペーストで対処するとか。

関連するQ&A

  • excel if構文 について教えてください。

    別ファイルのセルの内容(テキスト)を反映させたいのですが, そのセルに何も書かれていない場合は空白にしたいと考えています。 =IF('\[example.xls]4月'!C6="","") という式を考えたのですが,リンク先の空白の時には空白で反映されますが,テキストがある場合にはFALTHになってしまいます。 テキストを反映させる方法を教えてください。 よろしくお願いいたします。

  • エクセルのIF文の質問

    お世話になります。 エクセルの条件分岐で、 ・値が0、もしくは空白のときは空白を表示、違ったら値を参照 ・一つ上の行と次の行の値が同じなら空白を表示、違ったら値を参照 という二つのIFを組み合わしたいのですが、どうにもうまくいきません。   A|B|C| 1|あ|い| | 2|あ|0 |う| 3| |0 |う| 例えばこんなデータなら、シート2にその結果を表示させたとして   A|B|C| 1|あ|い| | 2| | |う| 3| | | | こんな感じにしたいのです。 現在、 ・1行目に、空白か0なら空白を表示させる式を入力し IF(OR(A1="",A1=0),"",A1) ・2~データの終わりの行に、上と同じなら空白を表示させる式を入力しています。 IF(A1=A2,"",A2) でもこれをするとなぜかうまくいきません。 A2の値が空白だった時に0が表示してしまいます。 それに、自分の作った計算式もなんかスマートじゃない気がしてなりません。 もっと良い方法はないでしょうか?

  • IF関数について

    IF関数について A列のセルに住所が入力されていて、「中野区」という文字列が含まれているときに「○」そうでない場合は「-」をB列セルに表示させる方法で B列セルに、 =IF(COUNTIF(A1,"*中野区*"),"○","-") を入力すれば良いことがわかりました。 この条件に加えて、A列のセルが空白の場合上の行を参照するという条件を加えたいと思います。 例A3のセルが空白の場合A2を参照しB3に表示させる。 因みに、A2も空白の場合A1を参照する。 って感じにしたいです。 宜しく御願いします。

  • IF関数の入れ子について教えてください

    A1セルが「空」か「A」なら「空」 そうでなければ「ああああ」という結果を期待してB1セルに =IF(A1="","",IF(A1="A"="","ああああ")) という式で入れました。 ところが結果は「FALSE」となります。 なぜでしょうか? ちなみに期待した結果はIFとORの組み合わせで得られましたが、なぜIFのネストがFALSEになったのが気になって寝られません。助けてください。

  • ExcelのIF関数で

    IF関数で質問なんですが、複数条件(アンケートのような物)で、例えばA1:B100の中で、A列が「5」で且つB列が「3」の物を数えなさい。という式で抽出結果を一覧表にしたいのですが、抽出結果が0の場合「0」が表示されてしまい、とても見苦しくなってしまいます。0の場合は空白にしたいのですが悩んだ結果、 =IF(SUM(IF(A1:A100=5,IF(B1:B100=3,1,0),0))=0," ", (SUM(IF(A3:A100=5,IF(B1:B100=3,1,0),0)))) のような長い式になってしまいました。他に良い方法かあるでしょうか? ご教授ください。

  • エクセルVBA If Then 構文でOR条件の場合のVBA記述方法は?

    仮にセル("A1")が空白か Falseの場合は Then 以下のことをする。 と書きたいのですが If Sheets("Sheet1").Range("A1")="" Then ~略 If Sheets("Sheet1").Range("A1")=False Then ~略 と別々に記載する方法しかわかりません。 ワークシート関数のようにIF(OR(A1="",A1=False),~略)というようにまとめて記述するにはどう書けばいいのでしょうか? AND条件の場合も教えてください。よろしくお願いします。

  • EXCEL 偽の場合はセルの内容を変えない

    IF関数を組み合わせて式を作りましたが、条件が合わないときはセルの内容を変えないで欲しいのです。方法がありますか? B2の式=IF($A$1>B1,A1*B1,そのまま)みたいな つまり、FALSEや空白を返すのではなく内容を変えないで欲しいのです 素人の質問ですみません。

  • IF構文の使い方

    皆さんにはいつもお世話になっております。 エクセルVBAでご教授していただきたいことがあります。 1行目は空白行で、B2~CW51がデータがあるセルです。 A列は空白列で、B列(B2以降)にデータがある場合は、ListBox3の文字列を同行のcell(i , "A")に代入したいのですが。 下記のように、if構文を使ってみたのですが、うまくいきません。 Sub テスト_Click() Dim i As Integer With ActiveSheet For i = 2 To 51 If .Cells(i, "B") = "" Then .Cells(i, "A") = "" Else Cells(i, "A") = ListBox3.Value Exit For End If Next End With End Sub よろしくお願いいたします。

  • エクセルでIF関数の論理式に幅がある場合

    A1~A10がデータのタイトル文字を入れる欄で、そのうちひとつでも空白のセルがあればJ11に"データが揃っていません"、とアラートを出したいと思っています。 空白セルがなければとある計算式による答え(仮に"500")を表示させたい。 そこで考えたのが、 IF(AND(A1="",A2="",…A10まで続く),"データが揃っていません",(ある数式の結果500)) なのですが、論理式の部分にA1~A10まで一つづつ式を入れなくても簡単にできる方法はないでしょうか。 何箇所かに応用したいので書き直す部分が少ないほうがミスも少ないと思うんです。 よろしくお願いします。

  • エクセル advancedfilterについて

    エクセルのadvancedfilter機能について質問です。 抽出条件のセルに =IF(A1=X,"",1) のように一定の条件を満たさない場合、 空白セルになる式を入れたところ、フィルタがこのセルを空白と認識してくれる時とない時があります。 現在、 =IF(Search!B7="","",Search!B7) こちらでは認識され =IF(B11,TRUE,"") こちらでは認識されません。 どういった条件でこれらの認識が変わっているんでしょうか? 使用しているExcelは2007と2010です。 よろしくお願いします。

専門家に質問してみよう