- ベストアンサー
EXCELのIF関数で値を表示する方法
- EXCELのIF関数を使って、特定の条件に基づいて値を表示する方法について説明します。
- 質問文章では、9つのセルに1~15の数が入っており、その値と同じ列の数字の下の値を別のセルに表示したいという要望があります。
- しかし、試してもうまく表示されないという問題が発生しています。良い解決策を持つ方のアドバイスをお待ちしています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
A5セルには次の式を入力してJ5セルまで横方向にドラッグコピーします。 =IF(A3="","",IF(COUNTIF($A1:$J1,A3)=0,"",INDEX($A2:$J2,MATCH(A3,$A1:$J1,0))))
その他の回答 (5)
- Nouble
- ベストアンサー率18% (330/1783)
少し解説を =IF(SUMPRODUCT(($A$1:$J$1=A$3)+0)<1,"",OFFSET($A$2,0,MATCH(TRUE(),INDEX($A$1:$J$1=A$3,,),0)-1,1,1)) ですが、 まずは SUMPRODUCT(($A$1:$J$1=A$3)+0)<1 からいきます。 ($A$1:$J$1=A$3) は A1:J1の範囲にA3と同じ物があるか1つ1つ確認させています 回答は同じな場合TRUE、違う場合FALSEです お示し頂いた例になぞらえると A1はA3と同じではないのでFALSE B1はA3と同じなのでTRUE C1はA3と同じではないのでFALSE D1はA3と同じではないのでFALSE ……… …… … … … J1はA3と同じではないのでFALSE となります。 実際の値としては {FALSE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE,FLSE,FALSE,FALSE} です。 ところで、 Excelでは FALSEは0に、TRUEは1に置換される作用があります。 また 0+0は0,1+0は1,0*1は0,1*1は1ですから 従って {false,true,false}+0 は、 {0,1,0} に、置換されます。 ($A$1:$J$1=A$3)+0 は、 {0,1,0,0,0,0,0,0,0,0} と、成るわけです。 本来の使い方ではないですが、 =SUMPRODUCT({0,1,0,0,0,0,0,0,0,0}) と、した場合 SUMPRODUCTは此等の総和を計算してくれます。 回答はこの場合「1」ですね。 総じていえば 「TRUE」が1つ以上あれば SUMPRODUCTは1以上を返します。 SUMPRODUCT(($A$1:$J$1=A$3)+0)<1 とすれば、一致しているものが無いか調べられるわけです。 さて、後半部分の OFFSET($A$2,0,MATCH(TRUE(),INDEX($A$1:$J$1=A$3,,),0)-1,1,1) ですが、 OFFSETについてはヘルプやネットをご参照ください 単純な物です。 MATCH(TRUE(),INDEX($A$1:$J$1=A$3,,),0) ですが、 キモは $A$1:$J$1=A$3 です。 先程の説明通り、 {FALSE,TRUE,FASE,…} Excelがよこす答えはこうですね。 所で Excelでは「FALSE」より「TRUE」の方が大きい と、いうことになっています。 「TRUE」をMATCHに探させているとき MATCHはTRUEが出た時点でそれ以降の検索を止めます。 従って MATCHにとって =MATCH(TRUE,{FALSE,TRUE,False,False,False,False},0) =MATCH(TRUE,{FALSE,TRUE},0) この双方は 「TRUE」の時点以降を見ないので 同じ扱いとなります。 つまり どちらも昇順に並んでいることになるわけです。 因みにExcelのよこす回答は「2」ですね。 如何でしょうか? お役に立てていたならば幸いです。
- Nouble
- ベストアンサー率18% (330/1783)
私もHLOOKUPと思ったのですが先行回答があるようで、… 滝汗 しかも、よく見ると昇順とも限らないようで… ならば… と、OFFSETを使ってみます。 =IF(SUMPRODUCT(($A$1:$J$1=A$3)+0)<1,"",OFFSET($A$2,0,MATCH(TRUE(),INDEX($A$1:$J$1=A$3,,),0)-1,1,1)) これだと順不同でも、いやいやそもそも値そのものが無くても平気ですね。 A5に入力後 J5までフィル、又はコピーください。 如何でしょうか? お役に立てていたならば幸いです。
お礼
本当に、本当に申し訳ありません。頭がチンプンカンになってしまいました。頭を冷やしてから再度挑戦してみます。皆さん、ありがとうございました
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! すでに回答は出ていますので、参考程度で・・・ =IF(COUNTIF($A1:$J1,A3),HLOOKUP(A3,$A1:$J2,2,0),"") という数式を入れ列方向にオートフィルでコピーでもOKだと思います。m(_ _)m
お礼
ありがとうございます。みなさんは、どんな勉強をしているのですかね? これからは、勉強の仕方を勉強します。
ISERROR 又はIFEROOR使用出来ますが、バージョンにより利用制限があります。IEERRRORは2007以降でも利用可 2003以下のバージョン A5=IF(ISERROR(HLOOKUP(A3,$A$1:$J$2,2,0)),"",HLOOKUP(A3,$A$1:$J$2,2,0)) 2007以降のバージョン A5=IFERROR(HLOOKUP(A3,$A$1:$J$2,2,0),"") 質問時は使用しているソフトのバージョン記載は必須ですので、今後は記載下さいね。
お礼
申しわけありませんでした。 やはり、これも難しそうです。 勉強します。
- ts3m-ickw
- ベストアンサー率43% (1248/2897)
IF関数だと面倒すぎますね。HLOOKUP関数を使うべきです。 A5=HLOOKUP(A3,A1:J2,2,FALSE) B5=HLOOKUP(B3,A1:J2,2,FALSE) C5=HLOOKUP(C3,A1:J2,2,FALSE) : : J5=HLOOKUP(J3,A1:J2,2,FALSE) のように入力すればOKです。ただし該当する値が無いセルは「#N/A」ってエラー表示になりますが。
お礼
ありがとうございます。私なりになんとか出来た?? ように思うのですが でも、少し違うような感じです。 関数の初歩の勉強が足りないようです。急ぎすぎですね!
お礼
申しわけありません。64歳EXCEL勉強中のものにつき理解できないことが・・・ 勉強します。