- ベストアンサー
エクセルで毎月第一木曜日の日付のみを表示したい
毎月の第一木曜日のみを表示した表を作りたいのですができるでしょうか? 2006年度ですと 4/6 5/4 : 12/7 といった具合にです。 縦に表示させて、年度が替われば最初の4月のみの入力で一年分の第一木曜日が表示されるようにしたいのです。 ちなみに作るのは毎月の担当者表なので、日付の右側に氏名を入力します。 祝日は考慮する必要はありません。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
関数で 第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で余りを取ってます。 大丈夫と思いますが、チェックしてください。
その他の回答 (6)
- prairie-gentian
- ベストアンサー率30% (39/128)
#3です。たびたびすみません。 #6で、「A3=D2+28+7*(MONTH(D2)=MONTH(D2+28))」の式の中の「D2」は「A2」と読み替えてください。試しに造ったシートの式をそのまま貼り付けていましたので・・・。
お礼
何度もありがとうございます。 数式が短くて素敵なのですが、 私がやるとなぜかA3の計算結果が「38841」となってしまいます。 表示形式が間違っているのでしょうか?
- prairie-gentian
- ベストアンサー率30% (39/128)
#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)
A1=2006 として4月~3月の第1木曜日でいいのでしょうか? A2=DATE($A$1,ROW(A4),8-WEEKDAY(DATE($A$1,ROW(A4),3))) これでA2が2006/4/6になります。 後はこれを下方にコピーしてください。
お礼
試したところ、#1さんと同様の結果が得られました。 答えはひとつではないんだなぁと感心いたします。 数式が短くてスマートですね。 ご回答ありがとうございました。
- prairie-gentian
- ベストアンサー率30% (39/128)
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)
関数は解りません。 マクロなら。 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
お礼
ご回答をいただいておいて、申し訳ないのですが マクロではなく関数での方法を知りたかったのです。 条件の説明が足りずにすみませんでした。 それでもご回答くださったことに感謝します。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
例えば、 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セルの年度の部分を変更すればいいです。
お礼
早々のご回答をありがとうございました。 自分としては4月の日付を変更することで 次年度にも使いたかったのですが、 A1の「2006」の部分をタイトルとして用いれば 応用できそうです。
お礼
まさに私が求めていた方法でした。 これで次年度からは四月の訂正のみで 新たな表が作成できます。 ご回答ありがとうございました。
補足
#1さん、#4さんの方法でも応用できることに気づいたのですが 質問にて「最初の4月のみの入力で」とさせていただいていたので それに合致した回答をくださった#5さんにポイントを発行させていただき、これにて質問を締切らせていただきます。 それぞれの関数の内容にどのような意味があるのか 素人の私ではわからないのですが、 いろんな方法があることに感心いたしました。 みなさんありがとうございました。