- ベストアンサー
Excelでカレンダーを作成。日にちを自動的に・・・
Excel2000でカレンダーを作成中なのですが質問です。 Sheet1に2006年1月、Sheet2に2月・・・とシートごとにひと月。 日にちはB列、曜日を右隣のC列に縦に入力。 E2に○月と月の数字を入力したたけで、B/C列の日付け・曜日を自動的に入力させる方法はありますか? 出来れば、土曜日の日にち・曜日を紺・日曜日はピンクと書式の色を変えたいので、その作業も自動的にしてくれると大変ありがたいのです。 ヘルプやサイト検索などしてみましたが、よく分かりませんでした・・・。 出来れば夕方までには完成させたいです。 お時間のある方、宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
illey0001さん、こんにちわ。 常に今年しか見ないのであれば別ですが、そうでないのなら、西暦(年)を入れるセルも必要です。 さて、仮に西暦をD2のセルに、1日をB1、2日をB2・・・31日をB31のセルに入れるとすれば、セルB1には =IF(MONTH(DATE($D$2,$E$2,ROW(A1)))=$E$2,ROW(A1),"")、セルC1には =IF(B1="","",CHOOSE(WEEKDAY(DATE($D$2,$E$2,B1)),"日","月","火","水","木","金","土")) と入れます。 仮に1日を1行目でなく2行目にしたいのであれば、B2のセルに =IF(MONTH(DATE($D$2,$E$2,ROW(A1)ー1))=$E$2,ROW(A1)-1,"")、セルC1には =IF(B2="","",CHOOSE(WEEKDAY(DATE($D$2,$E$2,B2)),"日","月","火","水","木","金","土")) とします。西暦を入れるセルを作りたくない(今年の分が見られればよい)のであれば、 上の$D$2をYEAR(TODAY())とおきかえてやればOKです。 一番上の式の説明をします。 ROW(A1)というのは、セルA1が何行目かを返します。当然1行目だから1が帰ってきます。 1行目の数式を2行目以降にドラッグしてコピーしていく際に連続した数字を作成するのに便利です。 4、6、9、11月には30日が、2月には28日以降が無いのでこれを判別するIF文を入れています。 DATE関数は、年・月・日をまとめる関数、MONTH関数は、その日が何月であるかを示す関数です。 DATE関数に2005年4月31日と入力すると、Excel内では2005年5月1日と解釈されるので、 MONTH(DATE(2005,4,31)=5となります。これがセルE2に入った値(4)と異なるので、この月には 31日が無いことが分かります。IF文で31日の有無を確認して、無ければ表示しないようにしています。 2番目の式の説明をします。 CHOOSE関数は、ある条件式に対して、1ならA、2ならB、2ならC・・・を返す関数です。 WEEKDAY関数が、日曜日~土曜日を1~7の数字で返す関数なので、上の式を利用します。 隣で日付の有無の確認をしているので、IF文の条件に利用し、余計な曜日が表示されないようにします。 これが終わったら、条件付書式の設定です。 セルB1(1日の書かれたセル)を選択して、書式(O)-条件付書式(D)を選択してください。 条件1(1)の下、「セルの値が」とかかれた部分を「数式が」に変更してください。 隣の入力欄が1つになりますので、そこに、=C1="土" と記入してください("="が2回入ります)。 右の、書式(F)ボタンをクリックして、フォントの色を紺にしてください。 下に「追加(A)」ボタンがあるので、これをクリックすると条件2(2)が登場しますので、 上と同様に、「数式が」「=C1="日"」として、フォントの色をピンクにして下さい。 これでOKを押して条件付書式を確定します。 C1(曜日のかかれたセル)であれば、条件付書式が以下のようになります。 条件1(1):「セルの値が」「次の値に等しい」「="土"」 条件2(2):「セルの値が」「次の値に等しい」「="日"」 B1、C1の値と書式の設定が終わったら、マウスでB1、C1の2列をまとめて選択した後、 選択範囲の右下をつまんで31行目までドラッグしてください。以上で完成です。
その他の回答 (5)
- alba0910
- ベストアンサー率29% (12/41)
カレンダー部分の作成 1. E2のセル:「10/1」と入力、表示形式をユーザー定義で、【m"月"】に変える。表示は「10月」となる。 2. 日にちを入れるB列先頭セル(仮にB3とする):「=E2」と入力 3. B4セル:「=$B3+1」と入力、下までドラッグ 4. C3セル:「=B3」と入力、表示形式をユーザー定義で、【aaa】に変える。曜日が表示される。 次に条件付書式の設定 1. 作成した範囲を選択 2. 書式⇒条件付書式 3. 条件1:「数式が」「=WEEKDAY($C3)=7」、書式:フォントの色を濃い青(紺はありません。) 4. 追加をクリック 5. 条件2:「数式が」「=WEEKDAY($C3)=1」、書式:フォントの色をピンクに設定 以上です。
- takkuni
- ベストアンサー率24% (166/676)
「恐らく、次の月を作成するには、シート自体をコピーして月だけ変えればOKだった気がします。」ということなら多分1月分のシートを作り、年月日を入れたら隣のセルに =weekday(セル番地)という関数を入れておいたのではないでしょうか。次月を作成する場合は前月のシートをそのままコピーして、該当月1日を入力しセルを選択し、右下のカーソルを当てると+に変わるので右ドラッグで該当付きの日にちになるまで連続データとしてコピーします。曜日の関数はそのままで自動的に変わります。このようなやり方ではなかったでしょうか。
- kenta58e2
- ベストアンサー率74% (2483/3311)
もっと気の利いた方法もあるかもしれませんが、私が使っている方法をご紹介しますのでご参考になれば・・・ 月を入れる「E2」には、単に月の数字を入れるだけを前提に、 ・B列の最初のセルには式『=DATE(2006,E2,1)』 もちろん、この式だと西暦2006年専用になります。 この式ではB列に日付シリアル値が入りますから、 「日」の数字だけ表示したい時はセルの書式を変更 して、日だけ表示するようにして下さい。 ・C列の曜日は、漢字1文字表示で良いなら 式『=MID("日月火水木金土",WEEKDAY(B2,1),1)』 WEEKDAY(セル,1)で、セルのシリアル値に対応した曜日 が数字(日曜日=1~土曜日=7)で返されますので、 その数字に該当する曜日の文字をMID関数で切出します。 (この例ではB2セルに日付が入っている前提です) また、曜日によって書式を変えるには、「条件付き書式」 の機能を使えば割と簡単です。メニューでは「書式(O)」の 下にありますから、一度見てみて下さい。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
E2は月だけだとダメです。年も入れないと曜日や閏年の処理が出来 ません。一番スマートなのは、シート名を「2006年1月」という風に しちゃって、 E2: =datevalue(mid(cell("filename", $A$1), find("]",cell("filename", $A$1),1)+1,30)) 書式: ggge"年"m"月" とする手口だと思います。 日付は毎月必ず28日まではあるので、数字を1から直接入れちゃって も大丈夫。曜日は1日が=E2で以下1ずつ足して行って、書式をaaaに しておけばオッケー。 問題は29日から31日なんだけど、これは29日だったら C32: =if(month(E2)<>month(C31+1),"",C31+1) B32: =if(C32="","",day(C32)) のようにしておくと、小の月には勝手に消えます。 土日の色は、「条件付き書式」で「数式が」 =weekday($C5)=1 で日曜日の書式を設定出来るので、試してみて下さい。
- okazariY
- ベストアンサー率18% (19/102)
1,2と入力してセル選択後十字カーソルでずらす。→31日まで。 曜日を月~日まで入力し書式設定し、同作業。 他の月も同じ。 手帳から祝日の設定。 10分もあればできる作業です。
お礼
早速のご回答ありがとうございます。 説明不足で申し訳ありません。 そのようにSheet毎に作業する方法ではなく、月の入力だけで済むようにしたいのです。 確かに大した作業量ではないのですが、以前の会社でそのようなファイルを見たことがあったような気がするのですが、記憶も曖昧で作成方法が分からず質問してみました。 恐らく、次の月を作成するには、シート自体をコピーして月だけ変えればOKだった気がします。 こんな曖昧な説明で恐縮ですが、もし分かる方がいらっしゃいましたらアドバイスお願い致します。
お礼
皆さんご親切にありがとうございます! まとめてのお礼で申し訳ありません。 仕事の予定が変わってしまって…少し遅くなりましたが、皆さんが教えて下さった方法を、とりあえず全て試してみました。matsu_junさんの教えて下さった方法で出来ました!丁寧でとても分かり易かったです。でも、思っていたより、とても複雑ですね…。これではいくら試してみても、私では出来ないはずです…。 私の知識不足で、他の方が教えて下さった方法ではエラーになってしまったり、うまく表示出来なかったりしてしまいました…でも、皆さんがご親切に教えて下さった方法の中に、これから勉強するのに参考になる説明が沢山ありましたので、これから時間のある時に、みなさんの回答を参考に勉強し直して、自分のやりやすい方法を覚えたいと思います。 みなさん本当にありがとうございました。