- ベストアンサー
関数の条件をふやす。
IF(W6="","",IF(W6<=17,"■18歳未満",IF(W6<45>=60,"■45歳以上 □18歳未満","■60歳以上 □18歳未満"))) 上記の数式を書いたのですが セルW6に生年月日を入力してます。 18未満・45以上60未満・60以上を表示させたいのですが 条件を増やす方法がわかりません。どのようにすれば良いでしょうか、 また 別の良い方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
シートのどこかのセルに入力するIF関数の場合で回答してみます。セルA1を判定して、年齢について表示するようにします。 最初にIF関数を書いてしまうと、以下のように書けば、ご希望の判定と表示になります。 =IF(ISNUMBER(A1)=FALSE,"",IF(A1<18,"18歳未満",IF(A1<45,"18歳以上 45歳未満",IF(A1<65,"45歳以上 65歳未満","65歳以上")))) IF関数は、=IF(条件が成立ならA,そうでないならB)のように書くわけですが、「そうでないならB」の部分をまたIF関数にできます。 上記のIF関数では、最初に「ISNUMBER(A1)=FALSE,""」としています。ISNUMBER関数は数字ならTRUE、そうでないならFALSEを返す関数です。セルA1が数字でないなら(空白を含む)FALSEになり、空白("")を表示します。 そうでない場合は、A1に数字があるわけです。またIF関数にして、「IF(A1<18,"18歳未満"」としてありますから、セルA1が18未満なら「18歳未満」と表示します。 ここまでで、セルA1が条件に当てはまっていないなら、セルA1は18以上の数字があると確定している点に注意してみてください。数字でない場合と、18未満である場合は、既に処理してしまっていますから、18以上の数字であることは確実なわけです。 ですので、続いてセルA1が45未満かどうかだけを判定すれば、18歳以上・45歳未満の判定になります。単独では駄目ですが、既に18歳未満は判定済みということが使えるわけです。それが、「IF(A1<45,"18歳以上 45歳未満"」の部分です。 同様にしてIF関数を続けて、「IF(A1<65,"45歳以上 65歳未満"」とA1が65未満という判定だけで45歳以上・65歳未満を判定して表示できます。 ここままで、セルA1がどれにも該当していないとなると、セルA1には65以上の数字があります。ですので、単純に「65歳以上」と表示するよう"65歳以上"とだけ書き、IF関数の数だけカッコを閉じれば出来上がりになります。 IFを重ねて使うときは、左から右へ順次判定されて処理されることを利用して、既に判定した条件を省けることをよく使います。結構便利ですので、いろいろ試してみてください。 P.S. 上記のIF関数では、マイナスの数字をセルA1に入れると「18歳未満」と表示します。それをエラー処理するなら、もう一つIF関数を追加してマイナスを判定すればよいです。例えば以下のようにすると、マイナスの数字なら空白を表示します。 =IF(ISNUMBER(A1)=FALSE,"",IF(A1<0,"",IF(A1<18,"18歳未満",IF(A1<45,"18歳以上 45歳未満",IF(A1<65,"45歳以上 65歳未満","65歳以上")))))
その他の回答 (4)
- bunjii
- ベストアンサー率43% (3589/8249)
>上記の数式を書いたのですが セルW6に生年月日を入力してます。 日付は1900/1/1を1とした経過日数です。 従って、W6セルは生年月日であれば年齢に変換しないとすべてが60歳以上と判定されます。 今日現在の満年齢はDATEDIF関数で算出できます。 DATEDIF(W6,TODAY(),"y") → 今日現在の満年齢 >18未満・45以上60未満・60以上を表示させたいのですが 提示の数式の考え方では18歳から44歳と60歳以上が同じになります。 また、論理式の W6<45>=60 のような比較演算は誤りです。 45>W6<=60 もExcelでは正しい結果を得られません。 AND(W6>=45,W6<60) のように2つの要素を別々に評価します。 IF関数で条件分岐するときは大きい方または小さい方から順次評価すれば以上と未満を同時に評価しなくても目的の結果を得られます。 年齢を計算したセルに"年齢"と言う名前を付けたときは下記のようにIF関数を入れ子構造にすると分かり易いでしょう。 =IF(年齢<18,"18歳未満",IF(年齢<45,"18歳以上、45歳未満",IF(年齢<60,"45歳以上、60歳未満","60歳以上")))
- kagakusuki
- ベストアンサー率51% (2610/5101)
W6セルに入力されているデータは、あくまで生年月日であって、年齢そのものが入力されている訳ではないという事ですね? それでは質問者様が考えておられる「年齢」とは、何年何月何日の時点での年齢の事なのでしょうか? 御質問文内では説明されていないどこかのセルに、基準となる日付が入力されているのでしょうか? それとも、そのExcelファイルを開いたり、再計算が行われた時点での年齢の事なのでしょうか?(要するに、今現在の日付における年齢) もし今日の時点での年齢という事であれば、一例としては次の様な関数となります。 =IF(AND(W6>=1,W6<=TODAY()),LOOKUP(DATEDIF(W6,TODAY(),"y"),{0,18,45,60;"18歳未満","18歳以上45歳未満","45歳以上60歳未満","60歳以上"}),"") 或いは =IF(AND(W6>=1,W6<=TODAY()),CHOOSE(MATCH(DATEDIF(W6,TODAY(),"y"),{0,18,45,60}),"18歳未満","18歳以上45歳未満","45歳以上60歳未満","60歳以上"),"")
- msMike
- ベストアンサー率20% (364/1805)
「"■18歳未満」と「□18歳未満」の違いは何? それから 「■45歳以上 □18歳未満」とは、どういうこと? 「■60歳以上 □18歳未満」とは、どういうこと? yomogi111さん、貴方は外国の方ですか?
補足
日本人ですが 未満、以上は、毎回悩みますね。 ■18歳未満 □18歳未満は 単純に資料がレ点を入れるものだったので 原文を使いました。 分かりにくかったですよね。 ご指摘ありがとうございます。
- shintaro-2
- ベストアンサー率36% (2266/6245)
>18未満・45以上60未満・60以上を表示させたいのですが 条件を増やす方法がわかりません。 矛盾しない条件を入れ子にします。 18,45,60であれば =if(a1<18,”18歳未満”, if(a1>=60,"60歳以上", if(a1>=45,"45以上60歳未満","その他") ) ) となります。 ロジックを理解しやすくするために、改行やスペースを入れているだけで 特に意味はありません。 このような関数の入れ子をネストと呼び エクセル2003までは、7重が限界のはずです。 年齢判定はどこか別のセルでやってください。
お礼
早々の回答とありがとうございます。 無事に作れそうです。
お礼
細かな説明ありがとうございます。 希望の物ができました。ありがとうございます