これ何て呼びますか Part2

毎月の第一木曜日のみを表示した表を作りたいのですができるでしょうか?
2006年度ですと
4/6
5/4

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

A 回答 (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で余りを取ってます。
大丈夫と思いますが、チェックしてください。

この回答への補足

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

補足日時:2006/04/11 16:32
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/11 16:27

#3です。

たびたびすみません。

#6で、「A3=D2+28+7*(MONTH(D2)=MONTH(D2+28))」の式の中の「D2」は「A2」と読み替えてください。試しに造ったシートの式をそのまま貼り付けていましたので・・・。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/11 16:31

#3です。

「最初の4月のみの入力で」というのを読み損ねていましたので、少し簡単な式を考えてみました。

A2 4/6
A3=D2+28+7*(MONTH(D2)=MONTH(D2+28))

あとは、以下コピーしてください。式の意味は、「4週間後が同じ月だったら、その7日後を出す」です。2月が一番短くて、28日ですのでちょうど4週間になります。翌月の最初の木曜日は、4週間後か、5週間後のいずれかですので、その判断をさせています。
    • good
    • 0

A1=2006 として4月~3月の第1木曜日でいいのでしょうか?


A2=DATE($A$1,ROW(A4),8-WEEKDAY(DATE($A$1,ROW(A4),3)))
これでA2が2006/4/6になります。
後はこれを下方にコピーしてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/11 16:28

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に入れてやればよろしいようで・・・。
    • good
    • 0

関数は解りません。


マクロなら。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/11 16:19

例えば、


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セルの年度の部分を変更すればいいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/11 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報