• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文: EXCELのIF関数についての質問です。)

ExcelのIF関数での年齢計算と条件判断について

このQ&Aのポイント
  • ExcelのIF関数を使って、得点による合格判定や年齢計算を行いたい場合、特定の条件を満たすかどうかを判定するための真偽値が必要です。
  • TRUEは、条件が真であることを示す値であり、年齢計算においては、「今日の月が誕生月よりも大きい」もしくは「誕生月と同じで、今日の日が誕生日以上」である場合に使用されます。
  • TRUEがない場合にエラーが出るのは、IF関数の条件が真偽値を必要とするためであり、条件判断ができないためです。TRUEを削除することはできず、必要な条件判断を正確に記述する必要があります。

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

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

> EXCEL2000を使用していますが、挿入→関数→すべてを表 > 示で確認するのですが、見当たりません。 そこにはありませんよ。これはMS-DOS時代に表計算ソフトの代表格 だったLotus 1-2-3と互換性を持たせるために、内緒で搭載されてい る関数ですから、ヘルプの方で日付/時刻関数一覧を出さないと載っ てません。月数の計算に関してはバグがあるので要注意ですが、年 齢計算くらいには充分使えます。 ちなみにdatedif関数を使わない場合でも、 =year(today())-year(G13)-(text(G13,"mmdd")>text(today(),"mmdd")) くらいにはシンプルになります。同じことをif関数を使って =year(today())-year(G13)-if(text(G13,"mmdd")>text(today(),"mmdd"),1,0) と書くこともできます。日本語で言うと「基本は今年の年-誕生年だ けど誕生日がまだ来てないっぽかったらもう1年引く」ですね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

>この中にあるTRUEの意味がわかりません。 TRUEは条件が真であるという意味なのでこのIF文では不要ですね。 OR(MONTH(TODAY())>MONTH(G13),AND(MONTH(TODAY())=MONTH(G13),DAY(TODAY())>=DAY(G13)) )=TRUE 条件部分は上記の式の部分で OR(現在月が誕生月より後,AND(現在月が誕生月,現在日は誕生日以降))が真 という意味になります。 まあ確かに不要ですね。式を否定して真偽を入れ替えるのにFALSEを使うのならまだわかりますけど... >TRUEはなくてもよいと思い、削除してみましたが、エラーが出ました。 No.1の方の言われるようにTRUEを削除する場合は=も一緒に削除が必要です。 >そうでない場合は年齢は「今日の年」-1-「誕生の年」です。 YEAR(TODAY())-YEAR(G13-1) では言われるような結果になりません。 YEAR(TODAY())-YEAR(G13)-1の間違えでは?

keikaku
質問者

お礼

落ち着いてやり直したらうまくいきました。ありがとうございました 「YEAR(TODAY())-YEAR(G13)-1の間違えでは?」もご指摘のとおりでした。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

久々に見る迂遠な式ですね。削除するなら「TRUE」だけじゃなくて 「=TRUE」ですが、そこは大丈夫ですか。year(G13-1)はもちろん書 き間違いのはずですが。 ちなみに同じ意味の式は、 =datedif(G13,today(),"Y") と書きます。

keikaku
質問者

お礼

ありがとうございました。「datedif」という関数ははじめて見ました。EXCEL2000を使用していますが、挿入→関数→すべてを表示で確認するのですが、見当たりません。こんな便利な関数、どこでお知りになられてんですか?

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

ご質問のように提示された数式は「=TRUE」の部分が無駄な判定式になっています。 もし「=TRUE」を削除してエラーが出るならそれ以外の原因が考えられます。 具体的にどのようなエラーが表示されるのでしょうか? エラーが出る可能性としてはYEAR(G13-1)の部分にあるように思いますが、たとえばG13セルが空白ということはないでしょうか?

keikaku
質問者

お礼

落ち着いてやり直したらうまくいきました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

TRUEを消す: =IF(OR(MONTH(TODAY())>MONTH(G13),AND(MONTH(TODAY())=MONTH(G13),DAY(TODAY())>=DAY(G13))),YEAR(TODAY())-YEAR(G13),YEAR(TODAY())-YEAR(G13-1)) 理解なさっている内容は合ってます。不要な内容です。 >TRUEはなくてもよいと思い、削除してみましたが、エラーが出ました。 単純な編集ミスと思います。落ち着いてもう一度試してみてください。 「=TRUE」を削ります。

keikaku
質問者

お礼

落ち着いてやり直したらうまくいきました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル 日付関数について

     日付関数について先ほども質問した者ですが、再度よろしくおねがいします。  生年月日から学年(例:小6)を表示する式を組みたく、サイトを検索していたら、下記のような式がありました。 =DATE(YEAR(TODAY())-(MONTH(TODAY())<=3)*1,4,1) これは、今日現在で学年を導く基準年の4月1日を表示する式です。(今日2009/1/4現在ならば2008/4/1と表示する式) この式が理解できません。DATEと後の”,4,1”は理解できます。 YEAR(TODAY())は2009 MONTH(TODAY())は1 (MONTH(TODAY())<=3)の意味は? 多分3月までなら2009-1を表示する? だけど2月になったら2009-2 ではおかしい。 あと*1は構文上必要なのか? 以上雑駁ですが、この式を簡単に説明してくださる方、おねがいします。

  • javascriptの関数につきまして

    javascriptの関数につきまして javascriptの関数につきましての質問です。 Daycheck()関数 function Daycheck(year, mon, day){ maxDayOfMonth = Array( 31,29,31,30,31,30,31,31,30,31,30,31 ); if (year < 1901 || 2200 < year) return false; if( mon < 1 || mon > 12 ) return false; if( day < 1 || day > maxDayOfMonth[mon-1] ) return false; if( mon != 2 ) return true; if( day < 29 ) return true; if( ( year % 4 ) == 0 && ( year % 100 ) != 0 ) return true; if( ( year % 400 ) == 0 ) return true; return false; } というサンプルソースを見たのですが、Daycheck()の中のif( mon != 2 ) return true;とは2月以外が選択されていた場合trueを返す。 つまり、2月は選択できないということでしょうか? プログラミングについて詳しい方がいらっしゃりましたらご指導お願いします。 宜しくお願い致します。

  • エクセル 関数 MONTH

    いつも大変御世話になっております。 WindowsXP環境でエクセル2003を使用しています。 C5セル内に以下文字を入力して「test_201111.txt」を表示しています。 ※YEAR(TODAY()):YYYY / MONTH(TODAY()):MM ="test_"&YEAR(TODAY())&""&MONTH(TODAY())&".txt" これは10~12月は関数箇所は表示されるんですが 1~9月はMONTH(TODAY())自体が頭に"0"がつかないので困っています。 これはもうどうしようもないのでしょうか? 1~9月には頭に0をつけたいのです。 マクロを使ったり、他のセルにYYYYMMを記載してそこから日付を読み込ますようなものは 作成せずに、上記関数だけでどうしても解決したいのですが可能でしょうか? もしご存知の方がいらっしゃるようでしたら、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • excel if関数について

    教えて下さい。 今書式を作っていますが、空白の場合表示しない方法がわかりません。 If関数を使えば良いとは分かるのですが、関数の組み合わせかたが間違っているらしく、どうしてもエラーになってしまいます。 作りたい関数は 例 A1 today A2 個人名 A3 誕生日 A4 年齢 というものです。 この時A4セルに誕生日の関数を入れ、もしA3セルが空白ならA4セルも空白にする。 という書式を作りたいと思います。 どんな関数を入れれば良いのかご教示願います!

  • エクセルで、セル内の文字を点滅させるには。

    現在、エクセルで運転免許証の有効期限を管理していす。 L3に =IF(L3="","",IF(L3<=TODAY(),"失効",IF(L3<=DATE(YEAR(TODAY()),MONTH(TODAY()),DAY(TODAY())+15),"間近",""))) この関数を入れて管理していますが、失効 が表示されたらその文字を点滅できればと思っています。 よろしくお願いします。

  • Excelの数式について教えてください

    Excelの数式について教えてください カテ違いでしたらすみません Excelの数式にすいて質問です 福祉サービスの利用にかかわる仕事をしています 受給者証の支給開始日や、サービスの利用期間の管理をするため、表にまとめています セルB…サービス種別(機能訓練、生活訓練) セルG…利用開始日 セルM…経過月数 サービス利用期間 機能訓練…18ヶ月まで 生活訓練…24ヶ月まで 注)利用開始が4月1日からの場合、4月を1ヶ月目とする。利用開始が4月2日の場合、翌月5月を1ヶ月目とする これらを踏まえて、回答をいただきたいです Excelにて経過月数を表示させ、現在何ヶ月経過しているか・また、機能訓練18ヶ月、生活訓練24ヶ月を超えた場合、「終了」と表示させるため、セルMにこの様な数式を入力しています =IF(OR(IF(B2="機能訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>18),IF(B2="生活訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>24)),"終了",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))) しかしこの状態では、セルGに利用開始日が入っていない時、セルMには「1328」と表示されてしまいます そのため、 =IF(G2="","",IF(OR(IF(B2="機能訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>18),IF(B2="生活訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>24)),"終了",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")))) というような式を入れましたが、エラーになります 出来たら新規で入力する列には、値が出ないようにしたいので、空欄にしておきたいのです どこが間違っているのでしょうか? アドバイスいただけるとうれしいです。宜しくお願いします

  • プログラムの内容

    以下のプログラムは答えとして渡されたものなんですが、 コマンド引数を使ったプログラムの流れがよくわかりません。 簡単に解説してくれる方、いませんか? #include <stdio.h> int leapyear(int year){ if(year%400 == 0) return 1; else if(year%4 == 0 && year%100 != 0) return 1; else return 0; } void addmonth(int *day, int *month, int *year){ *day = 1; (*month)++; if(*month > 12) { *month = 1; (*year)++; } } int main(int argc, char *argv[]){ int year, month, day, a=0, max_days; int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(argc < 2) max_days = 10000; else max_days = atoi(argv[1]); printf("今日は西暦何年 何月 何日? "); scanf("%d%d%d",&year,&month,&day); while(a<max_days) { a++; day++; if(month == 2 && leapyear(year)) { if(day > 29) addmonth(&day, &month, &year); } else { if(day > month_days[month-1]) addmonth(&day, &month, &year); } } printf("今日から%d日後は、%d年%d月%d日です。",max_days, year, month, day); }

  • エクセル関数について質問です。

    はじめて投稿します。 エクセルで今日から半年後-1日(と今日から一年-1日)の表示が出来るようにしたいのですが、 どのようにしたら出来ますか? =DATE(YEAR(A1),MONTH(A1)+6-1,DAY(A1-1)) 上記で入力したみましたが、2011/06/01から半年-1は 2011/11/30 となってほしいのに 2011/12/01 となってしまいました。 教えてください。よろしくお願いします。

  • month関数で

    エクセルのことでお伺いします。 today関数で今日の日付を表示することは理解しました。 そしてそこから日付の「月」だけを取り出すのにmonth関数があるというのも理解できました。 そこで取り出した月の整数は1~12までなんですがその取り出した関数に対して数字を1引きたいときに単純に関数から-1の計算式を当てはめると明治33年~とおかしくなってしまいました。正しくするにはどうしたらよいですか? 僕がやったのは 今日の場合 A1に=TODAY()関数をいれ、平成17年4月19日を表示させました。 A2に=MONTH(A1)として4を出しました。 そこの関数に=MONTH(A1)-1で4-1で3を出したかったのです。 シリアル値って言うのが引っかかっているみたいですが よく分かっていないので正しく教えていただける方がいましたら宜しくお願いします。

  • if関数で、aまたはbまたはcという選択できますか

    if関数で、aまたはbまたはcという選択できますか。 ver num=1; if(x=1||x=3||x=5){ console.log("true"); } else{ console.log("folse"); }。 といった書き方はできませんか。 //ダイヤタイプの定義 const diagram = { WeekDay: 1, //平日ダイヤ Holiday: 2, //休日ダイヤ A: 3, //Aダイヤ B: 4, //Bダイヤ C: 5, //Cダイヤ } //ダイヤを判定する function dayJudge(year, month, date, day) { //フラグ(初期値:平日ダイヤ) var diagramFlag = diagram.WeekDay; //土日判定 if(day == 0 || day == 6) { diagramFlag = diagram.Holiday; } //特別な日 if((month == 10 && date == 12)||(month == 11 && date == 3)||(month == 11 && date == 24)) { diagramFlag = diagram.A; } else if(month == 5 && date == 25) { diagramFlag = diagram.B; } else if(month == 5 && date == 30) { diagramFlag = diagram.C; } return diagramFlag; } ができなくて困っています。

専門家に質問してみよう