• ベストアンサー

Excelで月を入力すると、日付を自動で表示

Excelで以下を実現したいのですが↓ 手順1:A1セルに「5」と手入力する 手順2:A2~A32セルに、「5/1」~「5/31」までの日付が自動で入力される 手順2を実現する関数を教えて下さい。 A1セルに入力された「5」を読み取り、 5月の日付を自動でA2~A32セルに表示する関数を教えて下さい。 (※5月だけではなく、1月~12月にも対応できる関数で) よろしくお願いします。

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.7

こんにちは 年号もという事ですね。 =IF(MONTH(DATE($A$1,$A$2,ROW()-2))=$A$2,TEXT(DATE($A$1,$A$2,ROW()-2),"m/d"),"") 全角で表示したいのであれば、 =JIS(IF(MONTH(DATE($A$1,$A$2,ROW()-2))=$A$2,TEXT(DATE($A$1,$A$2,ROW()-2),"m/d"),"")) でよろしいかと思います。

noname#4964
質問者

お礼

これで解決しました! ありがとうございました。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

>A2に5/1と入力し”は、”手入力で「2003/5/1」を入力し”ということですよね そうです。2003/5/1と入れるのも、5/1と入れるのも、2003年の時点では「エクセルの上では」同じだから、敢えて5/1と書きました。 >月中日数の31セルほど下へ 日を縦に並べるとして、A2が1日なら、5月なら31日分を引っ張れば、オートフィルで1->2->3->・・ 31が埋まってくれると言うことです。 >小の月」とは何の事でしょうか 2,4、・・月の月末が31日でない月です。 #3の方もこの言葉を使っておられます。私だけの用語ではありません。 >A3に=DATE($A$1,$B$1,ROW()-1)を入れたのですが、そうすると、A3に「2003/5/2」と表示されていますが・・・。 私はA2に5月1日を出す積もりで、上記のようにしました。A3から5月1日を始めるのならROW()-1をROW()-2 にしてください。 >これだと、A2セルに「2003/5/1」を手入力しないといけないんですよね これは上記のことで解決します。 >32行目の処理を消すというのは、どういうことでしょうか? 「31日がない月の場合、31日を消す」という事ですか 簡単な関数式のやり方(例えば#1)だと30日が月末の月の場合、31日まで複写したセルの処理をしなければならないわけです。 そこで不満が出そうだったから、#4の回答を追加しました。だから#4の回答でこの問題は解決しています。 >31日がない月を自動で判断して表示したり、非表示にしたりができると思ってたのですが、できないのでしょうか? #4がそのことを解決しています。 ●私の場合A1に2003と年、B1(A2でなく)に5と月を 入れる例で説明していますので、ご注意下さい。

noname#4964
質問者

お礼

すみません、何度も回答して頂き、大変ありがとうございました。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.5

こんにちは A2セルからA32セルへ =IF(MONTH(DATE(YEAR(TODAY()),$A$1,ROW()-1))=$A$1,TEXT(DATE(YEAR(TODAY()),$A$1,ROW()-1),"m/d"),"") をコピーして下さい。 ちょっと長めになってしまったのは、次の月が出ないようにしています。 また、全角で表示したいのであれば、 =JIS(IF(MONTH(DATE(YEAR(TODAY()),$A$1,ROW()-1))=$A$1,TEXT(DATE(YEAR(TODAY()),$A$1,ROW()-1),"m/d"),"")) を使ってみてください。

noname#4964
質問者

補足

教えて頂いた通りにやると、希望通りのものが出来ました! ありがとうございます! それと・・やはり月だけではなくて、年号も手入力するようにしたいのですが↓ A1セルに、2003 A2セルに、5 A3セル~A33セルに、自動で日付表示 という方法の場合、A3セル~A33セルに入れる式?を 教えて頂けないでしょうか・・。 度々すみませんが、よろしくお願いします!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#1のものです。A1:A32まで複写すると小の月の 32行目の処理に消すとか手作業が必要ですが、そこまで 凝るなら =IF(DATE($A$1,$B$1,ROW()-1)>EOMONTH($A$1&"/"&$B$1&"/1",0),"",DATE($A$1,$B$1,ROW()-1)) と入れます。 但しツール-アドイン-分析ツールにチェックを入れる必要があります。 今年2月も29日以下はブランクになりました。

noname#4964
質問者

補足

度々すみません・・ >小の月の32行目の処理に消すとか手作業が必要ですが すみません・・「小の月」とは何の事でしょうか? 32行目の処理を消すというのは、どういうことでしょうか? 「31日がない月の場合、31日を消す」という事ですか?年月を入れることによって、 31日がない月を自動で判断して表示したり、非表示にしたりができると思ってたのですが、できないのでしょうか?

  • AQUALINE
  • ベストアンサー率33% (18/53)
回答No.3

VBAでやる方法もありますね。 標準モジュールに以下を貼り付けます。一度貼り付けておけばあとから何度でも使えます。 Sub test() Dim i As Integer, m As Integer m = Cells(1.1).Value Range("A2:A32").Select Selection.ClearContents Selection.NumberFormatLocal = "m""月""d""日""" Range("A1").Select Selection.NumberFormatLocal = "G/標準" For i = 3 To 32 Cells(2, 1) = m & "/" & 1 Cells(i, 1) = Cells(i - 1, 1) + 1 Cells(i, 2) = "=Month(A" & i & ")" If (Cells(i, 2)) > m Then Cells(i, 1) = "" Range("B2:B32").ClearContents Exit Sub End If Next i Range("B2:B32").ClearContents End Sub A1セルに1~12の数字を入れた後、このマクロを実行すればその年の指定月のみの日付が自動表示となります。 大の月、小の月、うるう年すべて対応します。

noname#4964
質問者

補足

なるべくマクロは使わずに実現したいのですが、 やはりマクロでやるべき事なのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1です。質問に乗せられて#1を上げましたが、質問の ニーズの場合、A2に5/1と入力し月中日数の31セルほど下へフィルハンドル+を引っ張れば良くて、関数は使わなくて良いと思います。#1及びこの方法とも、5/1のように出すためには、書式-セル-日付-3/4をクリックして書式設定してください。毎月やり直しになる点デメリットですが2ステップですしね。

noname#4964
質問者

補足

度々すみません・・。 >A2に5/1と入力し月中日数の31セルほど下へフィルハンドル+を引っ張れば良くて の”月中日数の31セルほど下へ”とは、どういう意味でしょうか? ”A2に5/1と入力し”は、”手入力で「2003/5/1」を入力し”ということですよね?

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

A1に5と入れる。 A2に式=DATE(2003,$A$1,ROW()-1)と入れる。 A3以下A32まで+ハンドルを出して、下へ引っ張る( 式を複写する)。 1年に一回は2003を変える必要あり。 むしろA1に2003、B1に5と入れ A3に=DATE($A$1,$B$1,ROW()-1)を入れて複写するのが お勧めです。

noname#4964
質問者

補足

A1に2003、B1に5を入れ A3に=DATE($A$1,$B$1,ROW()-1)を入れたのですが、そうすると、 A3に「2003/5/2」と表示されていますが・・・。 「2003/5/2」からではなく、「2003/5/1」から表示させたいんです。 これだと、A2セルに「2003/5/1」を手入力しないといけないんですよね? できれば、手入力するのは、「5」と「2003」だけにしたいのですが。 そんなことって無理なのでしょうか?