- ベストアンサー
月末を動的に表示、非表示にする
エクセルで、年、月を入力するとその月の日付が動的に表示されるものを作っています。 月末の問題で、31日の日もあれば30日の日もあるため、 DATE(YEAR(年),MONTH(月)+1,1)-1で月末を求め、IF文で制御しようと、 IF((DATE(YEAR(年),MONTH(月)+1,1)-1)=31,"31","")という式を入れているのですが、 30日の月も、31日の月も日が表示がされません。 どこに問題があるのでしょうか。かなり切羽詰っています。 エクセルの関数は苦手のため、 お詳しい方がいらっしゃいましたらご回答お願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#5の方式で使用されるなら、曜日は下記の形式となります。 ・29日の曜日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,29))=29,TEXT(DATE($A$1,$B$1,29),"aaa"),"") ・30日の曜日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,30))=30,TEXT(DATE($A$1,$B$1,30),"aaa"),"") ・31日の曜日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,31))=31,TEXT(DATE($A$1,$B$1,31),"aaa"),"") 本当は実際のExcelデータがあればもっと簡潔に書けるのかもしれませんが、イメージが正確に伝わらないと回答も正確に出来ないので、このような回答にさせて頂きます。
その他の回答 (6)
- hige_082
- ベストアンサー率50% (379/747)
saburo0さん横から失礼します もっと勉強してください =IF((DATE(YEAR(年),MONTH(月)+1,1)-1)=31,"31","") =TEXT(A5,"aaa") はご自分で考えたのですか? ご自分で考えたのであれば、saburo0さんの回答された =IF(DAY(DATE($A$1,$B$1,29))=29,"29","") の意味や修正部分も分かると思うのですが・・・・・ =TEXT(A5,"aaa")は隣のセルだと思うので =IF(DAY(DATE($A$1,$B$1,29))=29,DATE($A$1,$B$1,29),"") でよいと思います
お礼
回答ありがとうございます >もっと勉強してください かなり切羽詰っていて、自分でも色々調べてはいたのですが、 不愉快な気分にさせてしまって申し訳ありません。 最初は周りの人に聞いていたのですが、もういなくなってしまって。。。 とりあえず解決はできそうです。ありがとうございました。
- saburo0
- ベストアンサー率35% (76/216)
#1です。 A1セルに「2008」などの年、B1セルに「2」などの月が数値で入っているものとします。 ・29日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,29))=29,"29","") ・30日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,30))=30,"30","") ・31日を表示するセルの式 =IF(DAY(DATE($A$1,$B$1,31))=31,"31","") これではいかがでしょうか。
お礼
度々回答してくださりありがとうございます! おかげさまで、日付(数字)の表示はうまく行ったのですが、 その横のセルに、曜日がTEXT(A3,"aaa")のように入っており、 日付だけでは今度は曜日がおかしくなってしまいました。。。。 それでもとても参考になりました。 saburo0さん、本当にありがとうございます。 もし、分かったら曜日の表示のアドバイスもいただけたら幸いです。 saburo0さんには本当に感謝しています。
補足
因みに、シートの構成としては、A5にDATE(年,月,1)と入力し、その後は、 A5+1とオートフィルで入力をしています。 日付の横にはTEXT(A5,"aaa")のようにして、曜日の月、火、水などを表示しています。
- zap35
- ベストアンサー率44% (1383/3079)
>かなり切羽詰っています。 お困りのことはよくわかりますが、どんなシート構成かわからないので、一般的なヒントしか回答しかできません。 サンプルになりますがA1に年(2008など)、A2に月(2など)を入力して、適当なセルに以下の式を入力して下方向にコピーしてください =IF(DATE($A$1,$A$2,ROW(Z1))<=DATE($A$1,$A$2+1,0),DATE($A$1,$A$2,ROW(Z1)),"") 月末日より後ろは空白になりますよ
お礼
回答していただきありがとうございます。 シート構成としては、15行まで行った後、右側に16行表示する構成となっています 1 |16 2 |17 ・ |・ ・ |・ 15 |30 |31 1列に収まってないので難しい部分もあります。 でもとても参考になりました! ありがとうございます!
- imogasi
- ベストアンサー率27% (4737/17069)
>動的に表示されるものを・・・ の意味がわかりません。こんな質問で「動的」と表現した質問を見たことが無い。かっこ良いが、意味のはっきりしない用語を質問には 使わないこと。 どの月でも、同じ1-31行の(指定月の)出るに日付を表示するとき、月末を越えた行は空白にしたいということですか。 小の月には、31行目に式は入れるが、空白を表示したいとか言う意味か。 それなら ーー 例データ A1 2008 B1 6 A3 に=DATE($A$1,$B$1,ROW()-2) 28日まで式を複写 29日該当の A31に =IF(DATE($A$1,$B$1,ROW()-2)>EOMONTH(DATE($A$1,$B$1,1),0),"",DATE($A$1,$B$1,ROW()-2)) と入れる。 A33まで式を複写 結果 2008 6 2008/6/1 2008/6/2 2008/6/3 ・・・ 2008/6/28 2008/6/29 2008/6/30 EOMONTHはアドイン関数なので(わからなければWEB照会すること) 注意のこと。質問に出ている月末を求める式で置き換えても可。 ーーー 質問の意味を誤解していたら、上記回答は無視してください。
お礼
回答ありがとうございます。 動的にというのは31行の項目に、31日ある月は31日まで数字を埋めて、 30日の月は30行目まで数字を埋め、残りの1行を空白にし、 29日の月は29行目までを数字で埋め、残りの2行を空白にしたいという意味でした。説明不足ですいませんでした。
- kuma56
- ベストアンサー率31% (1423/4527)
式 DATE(YEAR(年),MONTH(月)+1,1)-1 は、シリアル値で算出するから、セルの表示形式がどうなっているのか分からないけど、値としては 39691 の様に5桁の数値になっているはずです。 それを 式 IF((DATE(YEAR(年),MONTH(月)+1,1)-1)=31,"31","") と入れても、5桁なので2桁である 31 とは認識されないと思いますよ。 だから、"30日の月も、31日の月も日が表示がされません。"になっているのではありませんか? たとえば、 IF((DATE(YEAR(年),MONTH(月)+1,1)-1)=(DATE(YEAR(年),MONTH(月),31))=,"31","") こんな式なら何とかなりませんか??
お礼
回答していただきありがとうございます。 試しにやってみましたがうまくできませんでした。。。 でもとても参考になりました!!!! ありがとうございました!!!
- saburo0
- ベストアンサー率35% (76/216)
このような式になるのではないのでしょうか? =IF(DAY(DATE(2008,7,1)-1)=31,"31","") → 空白 =IF(DAY(DATE(2008,8,1)-1)=31,"31","") → 「31」
お礼
回答していただきありがとうございます。 今月の月末が31日あるのか30日あるのかを判定して(又は月のように29日あるのか)、31行あるセルに日付を入力したいと思っています。 31日ある月は31行目まで、30日ある月は31行目を空白に、29日の月は 30、31行目を空白にしたいのです。 IF(DAY(DATE(2008,7,1)-1)=31,"31","") の月の7は1を引かなくてもいいのでしょうか。 やってみましたが、1月ずれてしまっています。また、1月や2月の表示がうまくいきませんでした。。。 でもとても参考になりました!! ありがとうございます!!!
お礼
saburo0さん、本当にありがとうございます。 何とか解決できそうです。 これでやっと終われそうです。 saburo0には本当にお世話になりました! ありがとうございました!!