- ベストアンサー
エクセル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というかたちで表示させております。 教えて下さい。おねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
以前に参考URLで同様の説明をしましたが、改めて掲載させていただきます。参考になれば幸いです。 祝休日の表示方法についてご説明します。 エクセルでの祝日認識は、いつが祝日になるかを入力して認識させなければなりません。とても面倒です。 以下、祝日・振り替え休日、国民の休日に関するデータの入力方法について説明します。 とても長くなります。 宿休日の定義は、平成15年より、1月1日、1月第2月曜、2月11日、春分日、4月29日、5月3日、5月5日、7月第3月曜、9月第3月曜、秋分日、10月第2月曜、11月3日、11月23日、12月23日です。 上記日付が日曜に該当する場合、元旦振替休日、成人の日振替休日、建国記念の日振替休日、春分の日振替休日、みどりの日振替休日、憲法記念日振替休日、こどもの日振替休日、海の日振替休日、敬老の日振替休日、秋分の日振替休日、体育の日振替休日、文化の日振替休日、勤労感謝の日振替休日、天皇誕生日振替休日が出てきます。 憲法記念日の翌日が火~金、秋分の日が第3週の水曜日である場合の前日の2つに該当すると、国民の休日が現れます。 さて、計算式です。sheet2等のワークシートを、以下のように書き換えます。 A1に西暦年に該当する4桁の数値が入力(シート1のC3セルを参照させてもよい)されており、上記祝休日がA6以降のA列に順に入っているものとします。 最初に祝日です。順番に、 =DATE($A$1,1,1) =DATE($A$1,1,14-WEEKDAY(DATE($A$1,1,0),3)) =DATE($A$1,2,11) 春分の日は、その年で日付が異なるので、1851~2150年まで対応可能な簡易計算式を載せます。 =DATE($A$1,3,INT(IF(AND($A$1>=1851,$A$1<1900),19.8277,IF($A$1<1980,20.8357,IF($A$1<2100,20.8431,IF($A$1<2151,21.851,""))))+0.242194*($A$1-1980)-INT(($A$1-IF(AND($A$1>=1851,$A$1<1980),1983,IF($A$1<2151,1980,"")))/4))) =DATE($A$1,4,29) =DATE($A$1,5,3) =DATE($A$1,5,5) =DATE($A$1,7,21-WEEKDAY(DATE($A$1,7,0),3)) =DATE($A$1,9,21-WEEKDAY(DATE($A$1,9,0),3)) 秋分の日も、春分の日と同様の処理です。 =DATE($A$1,9,INT(IF(AND($A$1>=1851,$A$1<1900),22.2588,IF($A$1<1980,23.2588,IF($A$1<2100,23.2488,IF($A$1<2151,24.2488,""))))+0.242194*($A$1-1980)-INT(($A$1-IF(AND($A$1>=1851,$A$1<1980),1983,IF($A$1<2151,1980,"")))/4))) =DATE($A$1,10,14-WEEKDAY(DATE($A$1,10,0),3)) =DATE($A$1,11,3) =DATE($A$1,11,23) =DATE($A$1,12,23) 次に振り替え休日です。 =IF(WEEKDAY(A6)=1,A6+1,"") =IF(WEEKDAY(A9)=1,A9+1,"") =IF(WEEKDAY(A10)=1,A10+1,"") =IF(WEEKDAY(A11)=1,A11+1,"") =IF(WEEKDAY(A12)=1,A12+1,"") =IF(WEEKDAY(A13)=1,A13+1,"") =IF(WEEKDAY(A14)=1,A14+1,"") =IF(WEEKDAY(A15)=1,A15+1,"") =IF(WEEKDAY(A16)=1,A16+1,"") =IF(WEEKDAY(A17)=1,A17+1,"") =IF(WEEKDAY(A18)=1,A18+1,"") =IF(WEEKDAY(A19)=1,A19+1,"") =IF(WEEKDAY(A20)=1,A20+1,"") =IF(WEEKDAY(A21)=1,A21+1,"") 国民の休日です。 =IF(WEEKDAY(DATE($A$1,5,3),3)<5,DATE($A$1,5,4),"") =IF(WEEKDAY($A$17,3)=2,$A$17-1,"") 以上でその年の祝休日を表すことができました。翌年の祝休日は、上記式の$A$1に、+1をすることで対処できます。 各式の右列に、該当する祝祭日名を入れておきましょう。 それらの一覧表の範囲に名前を付けます。例えば"祝休日一覧表"などと。名前の設定方法は説明しません。 シート1のC6セルに、=VLOOKUP(DATE($C$3,$D$3,A6),祝休日一覧表,2,FALSE)と入れます。月末までこの式をコピー&ペーストします。 これで、備考の欄に、該当する祝祭日が表示されるはずです。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
色々事情があるのでしょうが、 (1)日付はA列など1つのセルに2004/8/1などといれるべきです。曜日は隣の列に出すなら、=TEXT(A1,"aaa")、同じA列に出すなら書式設定でユーザー設定でyyyy/m/d(aaa)で出せます。 >VLOOKUPを使って作成しようと思っているのですが上手くいきません--->下記をやって見てください。 (2)祝日はB列に出すとして Sheet2に祝日一覧表を作って A列 B列 C列 日付 祝日 祝日名 2004/1/1 祝 元旦 2004/7/19 祝 海の日 2004/7/24 記念 会社創立記念日 ・・・ 6月までとその後を、手抜きして略してますが、祝日以外も自由に入れられます。 Sheet1のA1に2004/7/1といれ、下に第31行まで+ハンドルを引っ張ります。 Shhet1のB1に =IF(ISERROR(VLOOKUP(A1,Sheet2!$A$1:$C$20,2,FALSE)),TEXT(A1,"aaa"),VLOOKUP(A1,Sheet2!$A$1:$C$20,2,FALSE)) といれ、B31まで複写します。 7/19は祝、7/24は記念と出ます。 7/19は月 祝と出すことも、式を少し変えると出来ます。 C1には、=IF(ISERROR(VLOOKUP(A1,Sheet2!$A$1:$C$20,2,FALSE)),"",VLOOKUP(A1,Sheet2!$A$1:$C$20,3,FALSE))といれてC31まで複写します。 7/19は海の日、7/24は会社創立記念日と出ます。 $A$1:$C$20の20は年間祝日数で調節のこと。
お礼
ありがとうございました。できました。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 日付の先頭(A6)に、 =DATE(C3,D3,21) と入力します。(21日から始まる場合) そして、A7に、 =A6+1 と入力して、下の行へコピーします。 そして、A6~のセルの表示形式を、ユーザー定義で、 「d」 にしましょう。 また、B列の曜日ですが、B6に、 =A6 と入力して、下の行へコピーし、セルの表示形式を、ユーザー定義で、 「aaa」 にしましょう。 A列の日付を、上記のようにすれば、VLOOKUP関数で出来るでしょう。 なお、シート2の祝日一覧は、現状どおり年月日で入力しておいた方がいいです。 そして、各年ごとに個別に追加する、または入力し直すほ方がいいでしょう。 No.1の方の言う通り、祝日なんてころころ変わりますから。
補足
ありがとうございます。上記でできました。 月が変わるとその月の祝日が表示できるような方法ってありますか?ご存知でしたら教えて下さい。お願いします。
- mshr1962
- ベストアンサー率39% (7417/18945)
例えば A1に2002(年)といれます。 A2=DATE($A$1,1,1) B2に元旦と入力 可変の休日の場合 成人の日=DATE($A$1,1,15-WEEKDAY(DATE($A$1,1,1),3)) 春分の日=DATE($A$1,3,INT(20.69115+($A$1-2000)*0.2421904-INT(($A$1-2000)/4))) 海の日=DATE($A$1,7,22-WEEKDAY(DATE($A$1,7,1),3)) 敬老の日=DATE($A$1,9,22-WEEKDAY(DATE($A$1,9,1),3)) 秋分の日=DATE($A$1,9,INT(23.09+($A$1-2000)*0.2421904-INT(($A$1-2000)/4))) 体育の日=DATE($A$1,10,15-WEEKDAY(DATE($A$1,10,1),3)) A1の年度を変えれば他の年度にも対応できます。 これなら
お礼
ありがとうございました。できました。
- popesyu
- ベストアンサー率36% (1782/4883)
祝日に関してはその特性上(現在は第○曜日が××の日なんて設定もされますから)全日分予めデータを作っておくしかありません。2002年も2003年も2004年も同様に作っておくということです。勿論全ての祝日の出し方を予め計算で出すようにしておけば一つのテーブルを使いまわすということも可能ですが、この辺は法律にあわせてころころ変わりますから。その都度作り直すのも面倒でしょうし。 エクセルでは限界がありますのでアクセスでやった方がよいかもしれません。 で セルのデータが表示上は日にちでも実際は日付型のデータが入っているならVlookUPでも可能かと思いますが。単純に日にちの部分だけ入れているのなら、VllokUPの際に何らかの方法で日付を生成する必要があるかと思います。 20というだけではVlookUPでは検索できませんので、 他のセルを参照させて"2003/12/20"までする必要があるということです。 それよりはデータは日付で入れるようにして、書式設定で見た目だけ日付しか表示させないようにしておく方が楽かとも思います。
お礼
ありがとうございました。できました。
お礼
ありがとうございます。大変よく分かりできました。初心者のため理解するまで時間がかかりますがこれからも質問させていただきますので教えてもらえたら幸いです。