- ベストアンサー
Excelで日付を自動表示させたい
特定のセルにある日付を入力しすると 表の日付欄がその入力した日付で月単位に 連続に表示する方法を教えて下さい。 <例> 開始月日 7月15日 日付 7月15日 8月15日 9月15日 ・ ・ ・ という形です。また同様に月末日での指定方法も教えて下さい。 宜しくお願いします。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#4です ##アドバイスを一つ 私が良く使う方法ですが 月末日を99日とします。 <例:月末以外> 開始月日 2005年 4月 30日 日付 4月30日 5月30日 6月30日 7月30日 ・ ・ ・ <例:月末> 開始月日 2005年 4月 99日 日付 4月30日 5月31日 6月30日 7月31日 ・ ・ ・ これなら、 開始年がC1(表示形式:0"年") 開始月がD1(表示形式:0"月") 開始日がE1(表示形式:0"日") に入力されているとして 日付を A4 A5 A6 A7 ・ ・ に表示するとして A4 =if(E1<>99,DATE(C1,D1+ROW()-4,E1),DATE(C1,D1+ROW()-3,0)) A5 =if(E1<>99,DATE(C1,D1+ROW()-4,E1),DATE(C1,D1+ROW()-3,0)) 上記の場合 開始日が 2005年 1月 30日 の翌月は2005/3/2になります(仕様です) 他の日を表示するのかは仕様次第です。
その他の回答 (11)
補足要求 日付 7月15日 8月15日 9月15日 ・ ・ ・ この日付は何に使用するのですか? また、月末の場合は?
- zenjee
- ベストアンサー率47% (50/106)
#10の補足回答です。 A1の日付が例えば1月30日とした場合、2月だけは28日(閏年は29日)となってよいのであれば、次の計算式をA2に入力し、あと下方向にコピーすればOKです。 「=IF(TEXT(A$1+1,"m")<>TEXT(A$1,"m"),EOMONTH(A1,1),IF(TEXT(A1,"d")<>TEXT(A$1,"d"),EDATE(A1,1)+TEXT(A$1,"d")-TEXT(A1,"d"),EDATE(A1,1)))」 (A1に2008年1月30日、又は2008年1月31日と入力して試してみてください。) 注:2月30日とか2月31日などと表示するのは無意味という前提ですから念のため。
- zenjee
- ベストアンサー率47% (50/106)
#9の補足ですが、 どうしても一つの関数で表したい場合は、 A1に最初の日付が入るとして、 A2に「=IF(TEXT(A$1,"m")<>TEXT(A$1+1,"m"),EOMONTH(A1,1),EDATE(A1,1))」 という計算式を入力し、あと下方向にコピーすれば良いと思います。 文章で説明すると、 A1の日付の「月」("m")がA1の翌日(A1+1)の「月」("m")と異なる場合はA1は月末ということになるから「EOMONTH(A1,1)」を、 同じ場合は月末でないから「EDATE(A1,1))」を選択する訳です。 ただし断っておきますが、A1の日が30日とか29日の場合は、2月30日とか31日という日はあり得ないし、またうるう年以外は2月29日もあり得ないので、この場合は答えが出ようもないことを付記しておきおきます。
- zenjee
- ベストアンサー率47% (50/106)
月末以外の日と月末とを同時にIF関数を使って一発で表わす計算式を作るとなるとかなり面倒なので、両者を必要に応じて使い分ける方がより簡単だと思いますがいかがでしょうか。 つまりスタートの日が月末の場合は、A1が仮に2月28日として、 A2に「=EOMONTH(A1,1)」と入力し、あと下方向へコピーする。 月末でない場合A1が4月15日として、A2に「=EDATE(A1,1)」と入力、同様に下方向にコピーすれば簡単でしょう。 (表示形式は「○月○日」とします。) 余計なことですが、後者「EDATE(A1,1)」の場合、A1が3月31日である場合は、当然のことながら翌月以降は○月30日になりますし、2月29日の場合は翌年2月以降は○月28日になりますので念のため。
#7 ですが A4へは =IF($E$1<>99,DATE($C$1,$D$1+ROW()-4,$E$1),DATE($C$1,$D$1+ROW()-3,0)) と入力し、下方向へコピーでも可能です
#4です >2006/01/31 とした場合、 >つまり末日を指定すると(←この1行は後述) >翌月も末日にしたいです。 1月のケースは分かっています。 それより、補足要求のとおり 2008/01/30と入力された場合の翌月 と 2005/04/30と入力された場合の翌月が いつになるのかということです。 >つまり末日を指定すると とありますが、 2005/4/30 と入力された場合 これを 「月末日」と判定するのか 「30日」と判定するのかによって 翌月が 2005/05/31 か 2005/05/30 か 変わってきます。 もし「月末日」と判定する場合 毎月30日という一覧は作成できませんね。 入力された日付が月末かどうかの自動判定は 出来ないということです。 ##どこかに月末日フラグをつけるべきでしょうね。
- imogasi
- ベストアンサー率27% (4737/17069)
原理から考える説明をします。 (1)エクセルでは日付けを1900年初からの連続日数で値として持ってます。2005/7/15と入れると/が1つないし2つあるので、エクセルは日付と解釈し、38548と値をいれます(日付シリアル値といいます) (2)(1)の値から、書式を適用し、カレンダ算式を使って平成15年7月15日など割り出します。 (3)この方式の利点は何日後を計算しやすいことです。また何日から何日の間隔が引き算ですむことです。 ●本件は開始日は(A1セルにあるとして)38548として1日づつ増やすのは、+1すればよいことが、(1)からわかります。 =(直前のセルの値)+1とすればよい。 これは式を複写することで簡単に実現します。 ●月単位とは当月末日までということでしょうから、月末日で複写か表示をやめることをどうするか考えないといけない。 ●これは(1)から数量的に考えればよくて、月末日より大きければやめればよいです。ただし式の複写をやめる行を人間がそのつど判断したくなければ、式に組み込んで、最大31日分用意しないといけません。 ●C1には=A1 C2には=IF(MONTH($A$1+ROW()-1)<>MONTH($A$1),"",$A$1+ROW()-1) と入れて下方向に式を複写します。 直前の値C1などを使ってなくて、ROW()を使ったのは、8月以後を空白するのがうまくいかなかったからです。 ●月末は(2)の世界の話なのですが、月を+1した来月の前日ですから =DATE(YEAR(A1),MONTH(A1)+1,1)-1で(日付シリアル値が)求まります・
補足要求です 2008/01/30 と 入力された場合 翌月は 2008/02/28 ですか? 2008/02/29 ですか? また 2005/04/30 と入力された場合 翌月は 2005/05/30 ですか? 2005/05/31 ですか? それによって回答が変わってくると思います
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
最初のセルに、指定日付があるとして (つまり開始月日がC1なら、A1に=C1とかしてある) 次のセルから =DATE(YEAR(A1),MONTH(A1)+1,DAY(A1)) としてしたにコピーします。 同じように、最初のセル(B1)に、指定月末日があるとすると =DATE(YEAR(B1),MONTH(B1)+2,0) を下に(B2以下に)コピーします。 月による年の繰り上がりをやってませんので、いい加減な方法ですので注意
- Poer
- ベストアンサー率45% (72/157)
ご質問の趣旨に合っているかどうかという点で、さほど自身はありませんが、開始月日をB1のセルに入力するとして、日付欄の最初のセルに以下の数式を入力すれば、月末日を越えない結果(例えばB1に「1/31」を入力しても、2月は28日どまり)が出てきます。後はこの数式を必要な行数だけ縦にコピーするだけです。 =IF(B$1="","",IF(MONTH(DATE(YEAR(B$1),MONTH(B$1)+ROW(A1),DAY(B$1)))=MONTH(DATE(,MONTH(B$1)+ROW(A2),)),DATE(YEAR(B$1),MONTH(B$1)+ROW(A1),DAY(B$1)),DATE(YEAR(B$1),MONTH(B$1)+ROW(A2),))) ※日付の表示方法はセルの表示形式で調整してください。
- 1
- 2
補足
なるほど。 2006/01/31 とした場合、つまり末日を指定すると 翌月も末日にしたいです。 とうぜん閏年にも対応したいです。 それ以外の日であれば、同日にしたいです。 これで宜しいでしょうか。