• ベストアンサー

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

教えてください。現在パソコン教室に通いはじめて2ヶ月の初心者が会社で万年暦を作ることになりました。関数で10年先の日にちを入れても祝日が自動にはいるようにしたいのですがどうしてもうまくいきません。 できないのでここのサイトやいろいろ検索してシート2に10年分の祝日を書きだして(A列に西暦/月/日、B列に祝日(元旦とか))祭日一覧と名前をつけて祝日表示して提出したら「これじゃだめ」と怒られてしまい祝日も関数で求めろと(涙) とりあえずA列に日付(セルの書式設定でyyyy/mm/ddの表示にしてあります) B列は曜日=TEXT(A1,"aaa") C列に祝日表示をしたくて空けてあります。 春分、秋分の日は計算が必要なので I列に西暦 J列に春分の日の計算式 =DATE(I2,3,INT(20.8431+0.242194*(I2-1980)-INT((I2-1980)/4))) K列に秋分の日の計算式 =DATE(I2,9,INT(23.2488+0.242194*(I2-1980)-INT((I2-1980)/4))) の表を作りました あとはF列に固定の祝日の日付けG列に元旦とかの項目 を書きました。 ここで祝日を表示させる前に問題が・・ 1つは固定の祝日の日付を入れると勝手に2006年の西暦が入ってしまいます。これでは次の年になったら条件が違ってきて表示されなくなってしまうんです。 2つ目は第○月曜日とかの祝日です。これを求める関数がまったくわかりません(汗) 3つ目は振り替え休日と祝日と祝日の間が休みになる国民の祝日です。これもいろいろとサイトをみて関数を入れてみるのですがうまく表示できません この問題を1週間以上悩んでもできず「まだできないの」みたいな雰囲気になってここにいる皆様の知恵をお借りしようと投稿しました。うまく説明できてないかもしれませんがわかる方どうぞ教えてくださいよろしくお願いします!!!

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

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

1.DATE関数を使えばいいのでは? 年だけセルを参照させて(春分・秋分はI2=年で計算してますよね。それと同じです。) =DATE(年,月,日)+(WEEKDAY(DATE(年,月,日))=1) ※月と日は固定なので数値を直打ちして年だけ別セルを参照、後半は振り替え休日の設定(日曜なら1日ずらす) 2.第1月曜日 =DATE(年,月,8-WEEKDAY(DATE(年,月,7),2)) ※第2なら8を15に変えればOK 3.現状では9月の敬老の日(第3月曜日)と秋分の日ですよね。2009年に発生するようですが... (5月4日は前後の日付が固定されているので除外します。) =IF(秋分の日-敬老の日=2,敬老の日+1,"") ※要は敬老の日の翌々日が秋分の日なら敬老の日の翌日は休みとなります

tiksisnb
質問者

お礼

詳しい関数まで教えていただきありがとうございます。やってみます。

その他の回答 (7)

noname#204879
noname#204879
回答No.8

No.7ですが、自分でも調べました。 国民の休日が「敬老の日」(9月第3月曜)と秋分の日の間にも発生する年(2099年まで)は、次のように結構あることが判明しました。 2009/2015/2026/2032/2037/2043/2049/2054/2060/2071/2077/2088/2094/2099 私の思い込みで失礼なことを申し上げていました。済みませんでした。

tiksisnb
質問者

お礼

お返事が遅くなってすみませんでした。私も9月の連休のことはぜんぜん知らなく今回はいい勉強になりました。国民の祝日が現れたら5連休ですね!

noname#204879
noname#204879
回答No.7

[No.3回答に対するお礼]に対する質問、 国民の休日が「敬老の日」(9月第3月曜)と秋分の日の間にも発生する年とは何年のことですか? 参考のためにぜひ教えてください。

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

昔作ったユーザー定義関数ですけどの使い回しですが、参考になりますか。 春分・秋分の日の計算は置き換えて下さい。 使い方: =isHoliday(年,月,日) で祝日名が入ります。 関数バージョンも作ったことがあるのですが、かなり補助セルを使いますので、ちょっとここでアップできません。 ---------------------------------------------------------------- Function monthDay(y, m) Dim d(12) d(1) = 31 d(2) = 28 d(3) = 31 d(4) = 30 d(5) = 31 d(6) = 30 d(7) = 31 d(8) = 31 d(9) = 30 d(10) = 31 d(11) = 30 d(12) = 31 If isLeapYear(y) Then d(2) = d(2) + 1 monthDay = d(m) End Function Function isLeapYear(y) isLeapYear = _ (y Mod 400 = 0) Or _ ((y Mod 4 = 0) And (y Mod 100 <> 0)) End Function Function weekDayDate(y, m, week, youbi) 'y年m月の第week週のyoubiの日を"nn/nn"の形で返す Dim d Dim count Dim find count = 0 For d = 1 To monthDay(y, m) If youbi = Weekday(DateSerial(y, m, d)) Then count = count + 1 If count = week Then find = True Exit For End If Next If find Then weekDayDate = Trim(CStr(m)) & "/" & Trim(CStr(d)) End If End Function Function isHoliday(y, m, d) As String Dim n Dim dateWk Dim Holiday(15), Holiday_Name(15) Holiday(1) = "1/1": Holiday_Name(1) = "元日" Holiday(2) = "1/15": Holiday_Name(2) = "成人の日" Holiday(3) = "2/11": Holiday_Name(3) = "建国記念の日" Holiday(4) = "3/20": Holiday_Name(4) = "春分の日" Holiday(5) = "4/29": Holiday_Name(5) = "みどりの日" Holiday(6) = "5/3": Holiday_Name(6) = "憲法記念日" Holiday(7) = "5/4": Holiday_Name(7) = "国民の休日" Holiday(8) = "5/5": Holiday_Name(8) = "こどもの日" Holiday(9) = "7/20": Holiday_Name(9) = "海の日" Holiday(10) = "9/15": Holiday_Name(10) = "敬老の日" Holiday(11) = "9/23": Holiday_Name(11) = "秋分の日" Holiday(12) = "10/10": Holiday_Name(12) = "体育の日" Holiday(13) = "11/3": Holiday_Name(13) = "文化の日" Holiday(14) = "11/23": Holiday_Name(14) = "勤労感謝の日" Holiday(15) = "12/23": Holiday_Name(15) = "天皇誕生日" ' isHoliday = "" If y >= 2000 Then '西暦2000年から Holiday(2) = weekDayDate(y, 1, 2, vbMonday) '成人の日は、第2週の月曜 Holiday(12) = weekDayDate(y, 10, 2, vbMonday) '体育の日は、第2週の月曜 End If If y >= 2004 Then Holiday(9) = weekDayDate(y, 7, 3, vbMonday) '2003年から第3週月曜 End If If y >= 2004 Then Holiday(10) = weekDayDate(y, 9, 3, vbMonday) '2004年から第3週月曜 End If If y >= 2007 Then Holiday_Name(5) = "昭和の日" '2007年から第3週月曜 End If Holiday(4) = "3/" & Trim(CStr(Int(0.24242 * y - Int(y / 4) + 35.84))) '春分の日 Holiday(11) = "9/" & Trim(CStr(Int(0.24204 * y - Int(y / 4) + 39.01))) '秋分の日 dateWk = DateSerial(y, m, d) ' 土曜日曜の判別 ' If weekday(dateWk) = vbSunday Or weekday(dateWk) = vbSaturday Then ' isHoliday = "休日" ' Exit Function ' End If ' 祭日 For n = 1 To 15 If Holiday(n) = Trim(CStr(Month(dateWk))) & "/" & Trim(CStr(Day(dateWk))) Then ' isHoliday = True isHoliday = Holiday_Name(n) Exit Function End If Next dateWk = dateWk - 1 ' 振替え休日 For n = 1 To 15 If Holiday(n) = Trim(CStr(Month(dateWk))) & "/" & Trim(CStr(Day(dateWk))) And _ Weekday(dateWk) = vbSunday Then ' isHoliday = True isHoliday = "振替休日" Exit Function End If Next isHoliday = "" End Function

tiksisnb
質問者

お礼

すごい!こんなに詳しくありがとうございます。でも難しそう(汗)がんばってみます。ここに投稿してよかったです。

回答No.5

> 固定の祝日の日付を入れると勝手に > 2006年の西暦が入ってしまいます。 日付形式で入れてはいけません。[年が省略されている日付形式]に 見える入力があった時に今年のことだと見なすのは仕様です。月と 日を分けてリストを作り、=date(I2,月,日)で使いましょう。

tiksisnb
質問者

お礼

なるほど。ありがとうございます。それは年と月と日を別のセルに書くってことですか?

noname#204879
noname#204879
回答No.3

》 3つ目は振り替え休日と祝日と祝日の間が休みにな 》 る国民の祝日 「祝日と祝日の間が休みになる国民の」“休日”になり得る日は5月4日だけだと思います。それが「祝日と祝日の間」にならない場合は、その日が土または日曜のときだけ。何れにしてもその日は「休日」としたら如何かと。

tiksisnb
質問者

お礼

ありがとうございます。調べたら国民の祝日は9月の敬老の日と秋分の日の間にも発生する年があるのでやっぱり計算式が必要になるんです。。。

noname#204879
noname#204879
回答No.2

》 2つ目は第○月曜日とかの祝日 「第n曜日を求める」方法が下に示すURLに載っています。

参考URL:
http://www2.odn.ne.jp/excel/waza/function.html#SEC36
tiksisnb
質問者

お礼

ありがとうございます。やってみます

  • 245689731
  • ベストアンサー率22% (76/341)
回答No.1

こちらのサイトが参考になるかと思います

参考URL:
http://www.h3.dion.ne.jp/~sakatsu/
tiksisnb
質問者

お礼

ありがとうございます。参考になりました

関連するQ&A

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

    何度もすみません。 教えて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つほど質問したいのですがかなり長文になってしまいましたのでまた質問させていただきますがどうぞ皆様よろしくお願いします。

  • カレンダーの祝日表示

    いつもお世話になっています。 最後の質問をさせてください。 A列に西暦入りの日付け B列に曜日 C列に祝日 M列(たて)に2100年までの西暦 3行目(よこ)に元旦、成人の日などの祝日名、祝日名の下に計算した祝日が2100年まで入っている祝日表を作りました C列にこの表を参照して祝日名を表示させる関数を教えてください。どうぞよろしくお願いします。 HLOOKUPでやったら一番上の2006年しか検索されませんでした。(涙)

  • 国民の祝日を知りたい。

    excelの練習でカレンダーを作っています。何とか四苦八苦して関数を組み合わせて年を入れれば日にちが入るようにしたのですが、どうせなら休日も設定してみたくなりました。そこで現時点でのの祝日の入り方が分かるサイトなどがありましたら教えてください。ハッピーマンデーなどがあってややこしいです。あと春分の日と秋分の日の法則も知りたいです。

  • 春分の日・秋分の日の算出方法について

    お世話になります。 春分の日・秋分の日の1980年から2100までは 次の式で求められるそうです。 <春分の日> int(20.8431 + 0.242194 * ( year - 1980)) - int((year - 1980)/4) <秋分の日> int(23.2488 + 0.242194 * ( year - 1980)) - int((year - 1980)/ 4) ※int:例えば、int(2,3)で算出した結果は、2の3乗の「8」となります。     また、算出した結果が6.325のように小数点     になった場合、この数値を超えない最大の整数の「6」となります。 ※year:該当する西暦年 このような計算で、春分の日・秋分の日が算出されるのですが、なぜこのような計算でもとめられるかご存知の方が いれば教えていただけるでしょうか。 例えば、数式の中の「0.242194」の意味とか、公式の意味についてです。 よろしくお願いします。

  • 春分の日・秋分の日の算出方法について教えて下さい

    お世話になります。 春分の日・秋分の日の1980年から2100までは 次の式で求められるそうです。 <春分の日> int(20.8431 + 0.242194 * ( year - 1980)) - int((year - 1980)/4) <秋分の日> int(23.2488 + 0.242194 * ( year - 1980)) - int((year - 1980)/ 4) ※int:例えば、int(2,3)で算出した結果は、2の3乗の「8」となります。     また、算出した結果が6.325のように小数点     になった場合、この数値を超えない最大の整数の「6」となります。 ※year:該当する西暦年 このような計算で、春分の日・秋分の日が算出されるのですが、なぜこのような計算でもとめられるかご存知の方が いれば教えていただけるでしょうか。 例えば、数式の中の「0.242194」の意味とか、公式の意味についてです。 よろしくお願いします。

  • 春分・秋分の日のもとめ方

    以前の質問で祝祭日のもとめ方を『エクセル技道場』に掲載されていると教えていただいたのですが、その中で A1に2001(年)を入力するとB1にその年の春分・秋分の日が表示される。 B1に 春分の日は=DATE(A1,3,INT(20.8431+0.242194*(A1-1980)-INT((A1-1980)/4))) 秋分の日は=DATE(A1,9,INT(23.2488+0.242194*(A1-1980)-INT((A1-1980)/4))) となるそうなのですが、なぜこのような計算式なるのでしょうか? ちなみにこの式は1980年から2099年に適用されるとのことです。

  • 1.春分の日と秋分の日は祝日になっていますが、なぜ夏至と冬至は平日なの

    1.春分の日と秋分の日は祝日になっていますが、なぜ夏至と冬至は平日なのでしょうか? 2.上の様に春分の日と秋分の日が祝日となっていますが、毎年日にち、又は曜日が決まっているのでしょうか?

  • 祝日一覧表から祝日名を引用(関数を使って)

    エクセルで「A1~B20に祝日の一覧表があり、 同シートのD1~D28まで2/1~2/28の日付が入っています。 その右隣E列、●●にB3・▲▲にB4の祝日名を 関数を使って表示させたい」のです。 ・・A・・・ ・・B・・        1 1/1  元旦 2 1/8  成人の日 3 2/11  建国記念の日 4 2/12  振替休日 5   ・・D・・・ ・・E・・ 1  2/1 2  2/2 ・  ・ 9  2/9 10 2/10 11 2/11  ●● 12 2/12  ▲▲ 13 2/13 ご存知の方、教えてください。 よろしくお願いします。

  • エクセル2000で祝日を表示させたいのですが・・・。

    シート1に予定表、シート2に1年間の祝祭日の表を作成しています。 シート1はC3セルに西暦の2000、D3セルに月の12と表示させています。後は以下のように表示しています。 A   B   C  5 日  曜  備考  6 21  日 7 22  月 8 23  火 天皇誕生日 9 ・  ・ 10 ・  ・ 11 ・  ・ シート2はA列に2002/1/1、B列に元旦というように1年間の祝日の表を作成してます。 VLOOKUPを使って作成しようと思っているのですが上手くいきません。シート2の表の作成の仕方も普通に2002/1/1と入れてしまったら2003年になった場合は使えないので何か別の入力の仕方があるのかなとも思っています。 日にちはA6+1というかたちで表示させております。 教えて下さい。おねがいします。

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

    エクセル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なら成人の日。 といった感じです。 このやり方を教えていただけないでしょうか。 よろしくお願い致します。

専門家に質問してみよう