• ベストアンサー

エクセルで毎月第一木曜日の日付のみを表示したい

毎月の第一木曜日のみを表示した表を作りたいのですができるでしょうか? 2006年度ですと 4/6 5/4 : 12/7 といった具合にです。 縦に表示させて、年度が替われば最初の4月のみの入力で一年分の第一木曜日が表示されるようにしたいのです。 ちなみに作るのは毎月の担当者表なので、日付の右側に氏名を入力します。 祝日は考慮する必要はありません。

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

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

関数で 第2行目に4月を出すとして =DATE(2006,ROW()+2,1)+MOD(12-(WEEKDAY(DATE(2006,ROW()+2,1))),7)これを下方向に式を複写する。 2006/4/6 2006/5/4 2006/6/1 2006/7/6 2006/8/3 2006/9/7 2006/10/5 2006/11/2 2006/12/7 2007/1/4 2007/2/1 各月の一日の曜日コードを捉え、木曜=5との差を補正して います。月初が、木曜を越えるばあい、超えない場合があるので12にして、MODで余りを取ってます。 大丈夫と思いますが、チェックしてください。

haruharuharuna
質問者

お礼

まさに私が求めていた方法でした。 これで次年度からは四月の訂正のみで 新たな表が作成できます。 ご回答ありがとうございました。

haruharuharuna
質問者

補足

#1さん、#4さんの方法でも応用できることに気づいたのですが 質問にて「最初の4月のみの入力で」とさせていただいていたので それに合致した回答をくださった#5さんにポイントを発行させていただき、これにて質問を締切らせていただきます。 それぞれの関数の内容にどのような意味があるのか 素人の私ではわからないのですが、 いろんな方法があることに感心いたしました。 みなさんありがとうございました。

その他の回答 (6)

回答No.7

#3です。たびたびすみません。 #6で、「A3=D2+28+7*(MONTH(D2)=MONTH(D2+28))」の式の中の「D2」は「A2」と読み替えてください。試しに造ったシートの式をそのまま貼り付けていましたので・・・。

haruharuharuna
質問者

お礼

何度もありがとうございます。 数式が短くて素敵なのですが、 私がやるとなぜかA3の計算結果が「38841」となってしまいます。 表示形式が間違っているのでしょうか?

回答No.6

#3です。「最初の4月のみの入力で」というのを読み損ねていましたので、少し簡単な式を考えてみました。 A2 4/6 A3=D2+28+7*(MONTH(D2)=MONTH(D2+28)) あとは、以下コピーしてください。式の意味は、「4週間後が同じ月だったら、その7日後を出す」です。2月が一番短くて、28日ですのでちょうど4週間になります。翌月の最初の木曜日は、4週間後か、5週間後のいずれかですので、その判断をさせています。

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

A1=2006 として4月~3月の第1木曜日でいいのでしょうか? A2=DATE($A$1,ROW(A4),8-WEEKDAY(DATE($A$1,ROW(A4),3))) これでA2が2006/4/6になります。 後はこれを下方にコピーしてください。

haruharuharuna
質問者

お礼

試したところ、#1さんと同様の結果が得られました。 答えはひとつではないんだなぁと感心いたします。 数式が短くてスマートですね。 ご回答ありがとうございました。

回答No.3

A2 1/5 A3 2/2 A4 3/2 . . . のように表示するとしますと、 =DATE(2006,ROW()-1,CHOOSE(WEEKDAY(DATE(2006,ROW()-1,1),2),4,3,2,1,7,6,5)) を、A2~A13に入れてやればよろしいようで・・・。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

関数は解りません。 マクロなら。 Sub First_Thursday() Dim y As Integer, m As Integer, d As Integer Dim cnt As Integer '開始年度 y = Application.InputBox("開始年度は?", "年度", Year(Date), Type:=1) If y > 0 Then   m = 4 ' 開始月   cnt = 2 '値を入れる開始行   Do While m < 16     For d = 1 To 7       If Weekday(DateSerial(y, m, d)) = 5 Then '5が木曜        Range("A" & cnt).Value = DateSerial(y, m, d)        cnt = cnt + 1        Exit For       End If     Next d     m = m + 1   Loop End If End Sub

haruharuharuna
質問者

お礼

ご回答をいただいておいて、申し訳ないのですが マクロではなく関数での方法を知りたかったのです。 条件の説明が足りずにすみませんでした。 それでもご回答くださったことに感謝します。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

例えば、 A1 =2006 とA1に年度を入れます A2に =DATE($A$1,4+ROWS($A$2:A2)-1,1)+MOD(7-WEEKDAY(DATE($A$1,4+ROWS($A$2:A2)-1,1))+5,7) と入力して、セルの書式設定を日付(3/14を選んで) 以下下方向に11ヶ月分コピーします 2007年度からは、A1セルの年度の部分を変更すればいいです。

haruharuharuna
質問者

お礼

早々のご回答をありがとうございました。 自分としては4月の日付を変更することで 次年度にも使いたかったのですが、 A1の「2006」の部分をタイトルとして用いれば 応用できそうです。

関連するQ&A