• ベストアンサー
  • 困ってます

エクセルで毎年、日にちが異なる祝日(成人の日等)の返し方

エクセルでカレンダーを作成しようとしていますが、 つまづいてしまったので、どなたか教えていただけないでしょうか A1セルに指定年月日(例:平成19年1月1日)と 入力したら、該当月の日にちと曜日を表示させ 土日はセルの色を変えるというところまで できたのですが、さらに出勤しない日(国民の祝日)も セルの色を変えたいと思っています。 カレンダーとは別のシートなどに国民の祝日リストを 作成し、条件付き書式でmatch関数を利用して、 国民の祝日リストに合致したセルも色を変えたいのですが、 元旦やこどもの日のように月日が決まっている祝日ではなく 成人の日や海の日など、ある月の第2月曜日という祝日の場合、 A1セルの指定年月日から当該年の成人の日等を返すことは できるのでしょうか? 説明がわかりにくいかもしれませんが、要は、 A1セルが2007/1/1の時に B1セルに当月の第2月曜日を返す C1セルに7月の第2月曜日を返す ということは可能なのでしょうか? よろしくお願い致します。

共感・応援の気持ちを伝えよう!

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

  • ベストアンサー
  • 回答No.4

◆いろんな式がありますが、これを使っています >A1セルが2007/1/1の時に >B1セルに当月の第2月曜日を返す >C1セルに7月の第2月曜日を返す B1=DATE(YEAR(A1),MONTH(A1),7*2-WEEKDAY(DATE(YEAR(A1),MONTH(A1),0),3)) C1=DATE(YEAR(A1),7,7*2-WEEKDAY(DATE(YEAR(A1),7,0),3))

共感・感謝の気持ちを伝えよう!

質問者からのお礼

大変助かりました。 どうもありがとうございました。

その他の回答 (4)

  • 回答No.5
  • Nii
  • ベストアンサー率48% (79/162)

もう回答は出てしまっているようだけど、参考までに 別のシートに祝日を設定する方法じゃない方法でなく、与えられた日付が祝日かどうかを返す非常に見にくいモジュールを^^; 祝日を表示させたいセル =国民の祝日(日付が入ったセル,1) Public Function 国民の祝日(今日 As Date, chk_l As Integer) As String Dim 年 As Long 国民の祝日 = "" 年 = Year(今日) If Format(今日, "yyyymm") < 194807 Then Exit Function End If If Format(今日, "mmdd") = 101 Then 国民の祝日 = "元日" Exit Function End If If 年 < 2000 And Format(今日, "mmdd") = 115 Then 国民の祝日 = "成人の日" Exit Function ElseIf 年 >= 2000 Then If 第一月曜(DateSerial(年, 1, 1)) + 7 = 今日 Then 国民の祝日 = "成人の日" Exit Function End If End If If 年 >= 1966 And Format(今日, "mmdd") = 211 Then 国民の祝日 = "建国記念の日" Exit Function End If If DateSerial(年, 3, Int(0.24242 * 年 - Int(年 / 4) + 35.84)) = 今日 Then 国民の祝日 = "春分の日" Exit Function End If If Format(今日, "mmdd") = 503 Then 国民の祝日 = "憲法記念日" Exit Function End If If Format(今日, "mmdd") = 429 Then If 年 < 1989 Then 国民の祝日 = "天皇誕生日" Exit Function ElseIf 年 >= 1989 And 年 < 2007 Then 国民の祝日 = "みどりの日" Exit Function Else 国民の祝日 = "昭和の日" Exit Function End If End If If 年 >= 2007 And Format(今日, "mmdd") = 504 Then 国民の祝日 = "みどりの日" Exit Function End If If Format(今日, "mmdd") = 505 Then 国民の祝日 = "こどもの日" Exit Function End If If 年 >= 1995 Then If 年 < 2003 And Format(今日, "mmdd") = 720 Then 国民の祝日 = "海の日" Exit Function ElseIf 年 >= 2003 Then If 第一月曜(DateSerial(年, 7, 1)) + 14 = 今日 Then 国民の祝日 = "海の日" Exit Function End If End If End If If 年 >= 1966 Then If 年 < 2003 And Format(今日, "mmdd") = 915 Then 国民の祝日 = "敬老の日" Exit Function ElseIf 年 >= 2003 Then If 第一月曜(DateSerial(年, 9, 1)) + 14 = 今日 Then 国民の祝日 = "敬老の日" Exit Function End If End If End If If DateSerial(年, 9, Int(0.24204 * 年 - Int(年 / 4) + 39.01)) = 今日 Then 国民の祝日 = "秋分の日" Exit Function End If If 年 >= 1966 Then If 年 < 2000 And Format(今日, "mmdd") = 1010 Then 国民の祝日 = "体育の日" Exit Function ElseIf 年 >= 2000 Then If 第一月曜(DateSerial(年, 10, 1)) + 7 = 今日 Then 国民の祝日 = "体育の日" Exit Function End If End If End If If Format(今日, "mmdd") = 1103 Then 国民の祝日 = "文化の日" Exit Function End If If Format(今日, "mmdd") = 1123 Then 国民の祝日 = "勤労感謝の日" Exit Function End If If 年 >= 1989 And Format(今日, "mmdd") = 1223 Then 国民の祝日 = "天皇誕生日" Exit Function End If If 今日 = #4/10/1959# Then 国民の祝日 = "皇太子明仁親王の結婚の儀" Exit Function End If If 今日 = #2/24/1989# Then 国民の祝日 = "昭和天皇の大喪の礼" Exit Function End If If 今日 = #11/12/1990# Then 国民の祝日 = "即位礼正殿の儀" Exit Function End If If 今日 = #6/9/1993# Then 国民の祝日 = "皇太子徳仁親王の結婚の儀 " Exit Function End If If chk_l Then If 今日 > #4/12/1973# Then If Weekday(今日) = 2 Then If Len(国民の祝日(今日 - 1, 0)) Then 国民の祝日 = "振替休日" Exit Function End If ElseIf 年 >= 2005 Then If Weekday(今日) = 3 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 - 2, 0)) Then 国民の祝日 = "振替休日" Exit Function End If End If ElseIf Weekday(今日) = 4 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 - 2, 0)) Then If Len(国民の祝日(今日 - 3, 0)) Then 国民の祝日 = "振替休日" Exit Function End If End If End If End If End If End If If 年 >= 1985 Then If Len(国民の祝日(今日 - 1, 0)) Then If Len(国民の祝日(今日 + 1, 0)) Then 国民の祝日 = "国民の休日" Exit Function End If End If End If End If End Function Public Function 第一月曜(今日 As Date) As Date 今日 = DateSerial(Year(今日), Month(今日), 1) Do Until Weekday(今日) = 2 今日 = 今日 + 1 Loop 第一月曜 = 今日 End Function

参考URL:
http://okwave.jp/qa2417145.html

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#153814
noname#153814

ここに全部書いてあり、私も使わせていただきました。 http://www.eva.hi-ho.ne.jp/ohtake/excel/calender2.htm

共感・感謝の気持ちを伝えよう!

質問者からのお礼

この問題が解決したら振替休日の方法を考えなきゃ いけないと思っていたのですが、すべてこちらのサイトに 載っているようですね どうもありがとうごいざいました。

  • 回答No.2
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんばんは。 こんな風にすれば出来ると思います。 A1: 2007/1/1 B1: =DATE(YEAR($A$1),MONTH($A$1),15)-WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),6)) C1: =DATE(YEAR($A$1),7,22)-WEEKDAY(DATE(YEAR($A$1),7,6))

共感・感謝の気持ちを伝えよう!

  • 回答No.1
noname#39970
noname#39970

対象月の1日の曜日をまず求める 月曜=0 日曜=6 になるようにしておく 第1月曜日まで何日足りないか求める(上の数値曜日を7から引く) 最初に求めた月の1日が月曜でない場合だけ上の値に更に7を足す この値がその月の第2月曜にならないかな?

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセルカレンダーの作り方

    エクセル2003でカレンダーを作成したいです。 作成方法を教えていただきたく投稿いたしました。 祝日カレンダーというシートを作成し、 A5~A50まで日付(2013/01/01と表記) B5~B50まで祝日の名前が入った表を作成しました。           A       B      6  2013/01/01   元旦 7  2013/01/14   成人の日 8  2013/02/11   建国記念の日 9  2013/03/20   春分の日 10 2013/04/29   昭和の日 といった感じです。 別シート「シート1」のE2のセルに 2013/01/01 と日付をいれてあります。 この日付は毎日変わるのですが、そのすぐしたのセルE3のセルに 祝日カレンダーシートに対応している日付がきたら、祝日の名前を表示させたいのです。 1/1なら元旦。1/14なら成人の日。 といった感じです。 このやり方を教えていただけないでしょうか。 よろしくお願い致します。

  • エクセルで万年暦作り(祝日)・・・長文です・・続き

    何度もすみません。 教えてgooのおかげでカレンダーが大体完成してきたのですがまた行き詰ってしまいました。 上司の指示も入り A列に西暦/月/日(セルの設定yyyy/mm/dd)(西暦と月と日を別セルにしたらダメと言われました。dateじゃなくてただの数字になるから??) B列に曜日  =TEXT(A2,"aaa") C列に祝日 D列にコード(休みは01、出勤は11、GWやお盆などの特別休暇になりそうな未定は99) F列に祝日の日にち(西暦2006年が入ってます)(春分、秋分、第○月曜は関数式で求めました) G列に元旦とか成人の日などの祝日名 H列に祝日の日にちと未定コードの日にち(西暦入り) I列にコード番号。祝日に01、未定日に99(セルで文字列設定) FG列は祭日一覧、HI列にコード一覧と名前をつけました(A列の真上のところ) です。 C列にいろいろ調べて関数 =IF(AND(C1<>"",B1="日"),"振替休日",IF(ISERROR(VLOOKUP(A2,祭日一覧,2,0)),"",VLOOKUP(A2,祭日一覧,2,0))) で祝日と振り替え休日が出たのですが 国民の祝日の関数がどうしてもできません 国民の祝日は9月の敬老の日と秋分の日の1箇所だけなので 「もし秋分の日が9月第三水曜日なら前日に国民の祝日としてそうでないときは空白」って関数式かなと考えたのですが・・・=IF( ,"国民の祝日","")とゆう簡単なところしかできていないのでわかる人がいたらどうぞ教えてくださいよろしくお願いします。 あと2つほど質問したいのですがかなり長文になってしまいましたのでまた質問させていただきますがどうぞ皆様よろしくお願いします。

  • 祝日が月曜日になる時とならない時

    お世話になりまーす^ー^ すごい、常識的なことなのかもしれませんが、疑問に思いました。 最近、祝日って何月の第何月曜日になって、土曜・日曜・月曜と3連休になってる事が多いですよね? それが11/3 または11/23はカレンダーを見る限りは祝日は月曜日ではないです。 何故、祝日が月曜になる時とならない時があるんでしょうか??^ー^;;;

  • 1年、祝日が多いと思いますか?少ないと思いますか?

    もうすぐ新しいカレンダーを掛ける時期がやってきます。 また新しい1年が始まりますが、祝日に注目したいと思います。 とりあえず、どんな祝日があるのかを見ますとー 1月1日:元日、1月第2月曜日:成人の日 2月11日:建国記念日 3月20日:春分の日 4月29日:昭和の日 5月3日:憲法記念日、5月4日:みどりの日、5月5日:こどもの日 7月第3月曜日:海の日 9月第3月曜日:敬老の日、9月23日:秋分の日 10月第2月曜日:体育の日 11月3日:文化の日、11月23日:勤労感謝の日 12月23日:天皇誕生日 ・・・ということで、15日(15回)あります。 さてそこで、これだけの祝日、多いと思いますか? ちょうどいいですか? それとも、少ないと思いますか? これを見ると、6月と8月は祝日がありませんが、何か欲しいですか?

  • 22日祝日なのですか

    カレンダーで祝日、日曜は、日にちが赤色になっていますが、何故、22日は祝日なのに、赤色になっていないのですか、22の下に赤文字でなにか、書いています

  • 祝日

    祝日は昔は成人式は1月15日、体育の日は10月10日と決まっていたのですが、 いつから、どのような理由で月曜日になってその年によって日が違うように なったのでしょう?全部の祝日がそうかというと、そうでもないので ルールがわかりません。 またみなさんはそれでいいのでしょうか?子供に言わせると月曜日の授業が 消化できないと言ってますが…

  • エクセルで祝日の表示

    エクセルでセルに 2006/4/1 と打ち込んだらその後 自動で年度カレンダーを作成できるよう関数等を設定しているのですが、 祝日を識別(文字色を変える、パターンの色を変えるなど)させることはできないでしょうか。 現時点では打ち込んだセルを参照し、月日・曜日は表示できています。 どうか教えてください。よろしくお願いします。

  • 月曜日に移動になった祝日

    いくつかの祝日が毎月第○月曜日というふうに変更になりましたが、月曜日に変更された祝日と変更になっていない(○月○日と指定されているもの)祝日はどのような基準で分けられたのでしょうか。

  • 成人の日・・・もしも日にちを変えるとしたら?

    成人の日は今ではハッピーマンデー制で1月の第2月曜日になりましたが、元々は昔の元服の儀が小正月に行われたことに因んで、1月15日となったそうです。 まあ、そんな伝統も大切でしょうけど、私はこの日って以前から何か不自然に感じていました。 で、もし他の日に変えるとしたら、いつがよさそうでしょうか。 ご自由な視点から、こんな日がいいかもしれないという日を考えてみていただきたいのですが・・・ あ、柔らか頭のご提案も大歓迎です。 宜しくお願いします。

  • 日本の祝日について(成人式はいつ?)

    成人の日が今年は1月8日ですが、昔は15日だったと思い ます。なぜ変わったのでしょうか?変わったということ は、もともと15日ということに何も意味が無かったという ことですよね? 祝日というものが起源のあるものである以上、日にちが変 わることがありえるのでしょうか。(1月の第2週の月曜日 が成人の日とかなら日が変わるのもわかりますが) 外国人の友人に日本の祝日の説明をよく求められ、その度 に日本人がばかにされて困っていました(文化の日が明治 天皇誕生記念日ということを知らない日本人がいたり、建 国記念日を知らなかったり。逆に海の日なんていうのがで きたりして)。皆さん日本の祝日についてどう思われます か? 意味の無い休日を増やして皆で一斉に休暇をとるよ りも祝日を減らして(建国記念日と憲法記念日と今の天皇 誕生日ぐらいで良いのではないでしょうか)、代わりに有 給休暇を年20日を義務化するなんてどうでしょう?