- ベストアンサー
エクセルでカレンダーを作りたいのですが。
エクセル2003を使用しています。 次のようなカレンダーを作成したいと思います。 A1に2006などの年、A2、B2~に3/6などの月日、そしてA3、B3~に曜日(月、火…)の入ったカレンダーです。 A1の「年」やA2の「月日」を変更したら自動的に日にち(30日まで31日まで)や曜日が変わるようにするにはどうしたらいいですか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
1年を一行で見られると、項目別に行事進行を記入するのに便利なので、そのようなカレンダーを作成したいのでしょうか? しかし、前述の回答者からもご指摘があったように、日付を横方向に365~6日表示させようとしても、A~IVの256列しかありませんので、ご希望のカレンダーは作成できません。 よって、これも前述ですが、縦方向に日付が進むカレンダーか、月毎に行が繰り上がって1日が最初の列に戻る形式のカレンダーに設計変更せざるを得ないと思います。あくまでも日付表示を直線的に表したいのであれば、縦に表示するように設計変更せざるを得ません。横方向にこだわりたいのであれば、どこかで日付を折り返さないと最終列は9月半ばまでしか作れません。 で、設計変更に同意いただけるのであれば、下記に示す数式等の入力例を参照下さい。長くなります。 日付数式の代入ですが、A1に西暦年の数値を入れ、月日表示の最初のセルには、=date(A1,1,1)と入力します。次の日付を表示したいセルに、=date(A1,1,1)と入れたセル番地をxn番地のセルとして、=xn+1と入力します。その次の日付を表示したいセルにも、同様に前日の日付を示すセル+1とし、後日も同様に入力します。 4年に一度出現する閏年の2/29の処理ですが、縦一列に日付を表示させる設計なら、366日目が1/1なら明示させない、12/31なら明示させる処理を行いましょう。 例えば366日目のセルに、=if(month(xn+1)=1,"",xn+1)としておけば、上記のように閏年により日付が明示されたりされなかったりするはずです。 月毎に横に日付を表示させる設計なら、2月29日を表示できるセルに、=if(month(xn+1)=2,xn+1,"")とでもしておけば閏年なら2/29が表示され、そうでなければ表示されないようになります。 曜日については、並列する隣のセルをそのまま=xnとします。なお、閏年の日付の曜日処理は、対応する曜日表示のセルに、=if(xn="","",xn)としておけば、変な曜日が表示されなくなります。 日付表示セルの書式設定を、メニューの書式からセル、または行、または列のいづれか適する範囲で選択し、表示形式タグの分類を日付で選択、種類で最も好ましい形式を選択してokボタンをクリックします。 曜日表示セルの書式設定は、同様のメニューを選択し、ユーザー定義を選択し、種類のところで選択できる場所の上に、直接書き込める欄があるので、そこにaaaと入力します。okをクリックすると、そこは曜日表示されているはずです。 続いて土日の色を赤色にする技術ですが、エクセル2003にメニュー項目が入っていたかどうか忘れてしまいましたが、条件付書式という項目があれば、最初の日付と対応する曜日が入っているセルを選択し、条件付書式の設定ダイアログでセルがとなっているところをクリックし、数式がに変更します。続いて隣の欄に=weekday(xn,2)>=6と入力し、書式のボタンをクリックして、また書式設定ダイアログが出るので、フォントの変更をしたいのであればフォントタグを開き、色のボタンをクリック、好みの色を選択、パターンの変更をしたいのであれば、パターンタグを開き、パターン色を好みの色に変更してok、okボタンをクリックします。なお、=weekday(xn,2)>=6のxnの部分は、$x$nの絶対参照ですとうまくないので、相対参照になっているか確認してください。 そして祝日処理ですが、これが大変面倒です。エクセルには祝日を自動で認識するシステムや関数はないので、自分で関数をつくって認識させることになります。 別のシートに、以前紹介させていただいた下記参考urlの私の回答欄を見ていただきながら、祝日の日付を自動認識させる関数を入れてください。date関数の年は、西暦年を入力したシートの$A$1を指定します。 日付、曜日の隣に=IF(ISNA(VLOOKUP(A1,sheet2!$a$1:$a$90,1,FALSE)),"","祝日")とでも入力いただき、全てコピペします。日付と曜日のセルに、メニュー書式の条件付書式を選択し、先ほど入れた条件式に、追加ボタンをクリックし、条件2の欄に、数式が、その隣の欄に=xn="祝日"と入力し、上記同様に好みの色に表示されるように設定してください。 祝日判定の列(もしくは行)は、列(もしくは行)全体を選択して、右クリックメニューの表示しないを選択すれば、表面上は見えなくなります。 条件付書式設定した日付と曜日のセル範囲をコピーし、後日を表すセル全てを指定して、形式を選択して貼り付けの書式を選択してokをクリックしてください。条件付書式がそれぞれのセルを参照して対応する色で表示されるようになるはずです。 ということで、まずはカレンダー表示の設計変更をお願いします。その後、私を含め回答者の回答を参考にしながら作成してみてください。 作業が何工程もあり複雑なところもあるので、一つ一つ組み立て、うまくいかなかったら何度も読み直して試行錯誤してみてください。必ず思い通りのカレンダーが作れると思います。頑張ってください。
その他の回答 (5)
- mshr1962
- ベストアンサー率39% (7417/18945)
#2のmshr1962です。 横に1年分だとこうなります。 A2=DATE($A$1,1,COLUMN()) セルの書式設定で表示形式をユーザー定義で「m/d」とする。(「」は不要) A3=IF(A$2="","",TEXT(A$2,"aaa")) >また、土日祝日の色を変えたいのですができますか? 別途、年間の休日(土日を除き、振り替え休日を含む)の表を作成 表の範囲を、「挿入」「名前」「定義」で「祝日」と名前付けする。 A2:A3を選択して「書式」「条件付書式」 「数式が」「=OR(WEEKDAY(A$2,2)>5,COUNTIF(祝日,A$2))」で書式を押して文字やパターンの色を変更
お礼
説明不足で、さらに1年を横に全て表示するという無理な質問にていねいにお答えくださり感謝しております。また不明点があった際にはよろしくお願いします!
[No.2回答に対する補足]に対するコメント、 》 つまり月日はあらかじめ1月から12月まで全て表示します 1年365日だから「A1に年、C2、D2…に3/6という形式の月日」は不可能でしょ? “A1に年、A2、A3、A4、… に月日”の間違いと解釈してOKですか? 回答者泣かせのことは言わないで下さいね。
お礼
すみません。実は100日ほどはいらないので365日全て表示するのではありません。私の説明不足でした。
- imogasi
- ベストアンサー率27% (4737/17069)
A1に年はいいとして #2の補足 A2,B2,C2・と256列しかないのに、 >C2、D2…に3/6という形式の月日、C3、D3…に曜日というカレンダーです。 つまり月日はあらかじめ1月から12月まで全て表示します ーー がどうしてできるのですか。 こういうのはカレンダーと普通言わないのでは。 回答者が誤解するのでは。 ーーー それはともかくA2のセルに=DATE($A$1,1,1)といれ、B2に=A2+1 と入れて横方向に式を複写すればよい。 曜日はA3に=TEXT(A2,"aaa")と入れて横方向に式を複写すればよい。 そういうことかな。
- mshr1962
- ベストアンサー率39% (7417/18945)
A1=2006(年) A2=3(月) B2=IF(DAY(DATE($A$1,$A$2+1,0))>COLUMN()-1,"",DATE($A$1,$A$2,COLUMN()-1)) セルの書式設定で表示形式をユーザー定義で「d」とする。(「」は不要) B3=IF(B$2="","",TEXT(B$2,"aaa")) これでB2:B3の式をAF2:AF3までコピーする。 A1の年と、A2の月を変えれば日付(29,30,31の表示)と曜日が変わります。
補足
回答ありがとうございます。 申し訳ありません、今作成しようとしましたら、私がはじめに質問した表とは少し違っていました。 実際作りたいのは、 A1に年、C2、D2…に3/6という形式の月日、C3、D3…に曜日というカレンダーです。 つまり月日はあらかじめ1月から12月まで全て表示します。そこで、「年」を変えた時に曜日が変わるようにしたいのです。 また、土日祝日の色を変えたいのですができますか? よろしくお願いします
- telescope
- ベストアンサー率54% (1069/1958)
お礼
ていねいなご回答ありがとうございます。実は365日全てでなくてそのうち100日ほどは表示の必要がないので、横でもいいかと思い、当初そうしていました。説明不足でした。ただ、実際横に表示すると不便な点もでてきました。よって、おっしゃるとおり縦に日付を並べていこうと思います。また何か不明な点がありましたらお願いします。