• ベストアンサー

エクセルを使ったカレンダーの作り方

エクセル2000を使って、年間カレンダー(1月から12月まで全て1枚の中に入っているカレンダー)を作りたいと思います。作り方を教えてください。土日の色を変えたり、絵を入れたものを作りたいのですが。

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

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

おはようございます。 imogasiさんのプログラム拝見しました。 最終日の確認を >月末 = DateSerial(y, m + 1, 1) - 1 >月末日 = Day(月末) とされてますね! 今まで気が付きませんでした。(なさけない) 私の >'月末の日付取得 >For j = 31 To 28 Step -1 >If (IsDate(wk_year & "/" & i & "/" & j)) Then >max_day = j >Exit For >End If >Next j 部分は max_day = day(DateSerial(wk_year, j + 1, 1) - 1) で1行に置き換えられます。 参考になりました。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

ご参考に祝日を表示していないカレンダーのプログラムを載せます。土日色づけ。まず最小限短くを心がけました。祝日を表示するといかに長くなるか分かります。各月を下に増やし、年間カレンダーにするのは、下記の行を示すlをコントロールすれば、少しの変更で出来ます。 Sub cal01() y = InputBox("何年分?") m = InputBox("何月分?") l=1 Cells(l, 2) = y & "/" & m Cells(l, 3) = "月カレンダー " a = "日月火水木金土" '------- For i = 1 To 7 Cells(l+1, i) = Mid(a, i, 1) Next i 月末 = DateSerial(y, m + 1, 1) - 1 月末日 = Day(月末) l = 3 '---- For i = 1 To 月末日 日 = DateSerial(y, m, i) '---日曜 If Weekday(日) = 1 Then l = l + 1 Cells(l, Weekday(日)).Interior.ColorIndex = 6 End If '---土曜 If Weekday(日) = 7 Then Cells(l, Weekday(日)).Interior.ColorIndex = 7 End If '--- Cells(l, Weekday(日)) = i Next i '------編集(フォント・罫線・列幅など設定。省略) End Sub

rosimov
質問者

お礼

ご回答ありがとうございます。参考にさせていただきます。

回答No.5

マクロでということなので、プログラムを書きます。 分からない部分等ありましたら、補足で質問してください。 (1)まずシート名[祝日]を作りA1セルに **************この下から************** 月,日,週,曜日,(1:月曜日) 1,1,,,正月 1,,2,1,成人の日 2,11,,,建国記念日 3,21,,,春分の日 4,29,,,みどりの日 5,3,,,憲法記念日 5,4,,,国民の休日 5,5,,,子供の日 7,20,,,海の日 9,15,,,敬老の日 9,23,,,秋分の日 10,,2,1,体育の日 11,3,,,文化の日 11,23,,,勤労感謝の日 12,23,,,天皇誕生日 **************この上まで************** をコピーし、「データ」→「区切り位置」→「カンマやタブなどの・・・」オプションボタンがチェックされているのを確認し →「次へ」→「カンマ」チェックボックスをチェックし→「完了」 これは祝日のデータが変更される事を考慮し、シートに作りました。 春分の日、秋分の日は、日が変動するので注意してください(ここでは固定になっています) 春分、秋分の式は探せばあると思いますが、国が決めた日が優先されるそうなので 私には、どうしようもありません。 だいたいこの日あたりだと思います。 (2)標準モジュールへ Sub カレンダー作成() wk_year = Range("A1") 'シートチェック For Each sh In Sheets If (sh.Name = wk_year & "年") Then MsgBox wk_year & "年は既に作成されています。" & Chr(13) & "再度作成する場合は、シートを削除してください" Exit Sub End If Next sh 'シート作成 Sheets.Add ActiveSheet.Name = wk_year & "年" '月タイトル表示セル monthcell = Array("A4", "I4", "Q4", "A14", "I14", "Q14", "A24", "I24", "Q24", "A34", "I34", "Q34") '月ごとの日曜日の表示セル daycell = Array("A5", "I5", "Q5", "A15", "I15", "Q15", "A25", "I25", "Q25", "A35", "I35", "Q35") For i = 1 To 12 '月分 '月末の日付取得 For j = 31 To 28 Step -1 If (IsDate(wk_year & "/" & i & "/" & j)) Then max_day = j Exit For End If Next j '月初めの曜日取得 wk_week = Weekday(wk_year & "/" & i & "/1") '月表示 Range(monthcell(i - 1)) = StrConv(i, vbWide) & "月" '曜日表示 For j = 1 To 7 With Range(daycell(i - 1)).Offset(0, j - 1) .Value = Choose(j, "日", "月", "火", "水", "木", "金", "土") .HorizontalAlignment = xlCenter .ColumnWidth = 3 Select Case j - 1 Case 0 '日曜日 .Font.ColorIndex = 3 '赤 Case 6 '土曜日 .Font.ColorIndex = 5 '青 End Select End With Next j '日表示 offsetrow = 1 offsetcol = wk_week - 1 For j = 1 To max_day With Range(daycell(i - 1)).Offset(offsetrow, offsetcol) .Value = j Select Case offsetcol Case 0 '日曜日 .Font.ColorIndex = 3 '赤 Case 6 '土曜日 .Font.ColorIndex = 5 '青 Case Else If (hurikae = 1) Then .Font.ColorIndex = 3 '赤 Else .Font.ColorIndex = 0 '黒 End If End Select '祝日チェック hurikae = 0 '振替休日用フラグ For k = 2 To Worksheets("祝日").Cells(Rows.Count, 1).End(xlUp).Row If (i = Worksheets("祝日").Cells(k, 1)) Then If (Worksheets("祝日").Cells(k, 2) <> "") Then '日付指定 If (j = Worksheets("祝日").Cells(k, 2)) Then If (offsetcol = 0) Then hurikae = 1 Else .Font.ColorIndex = 3 '赤 End If Exit For End If Else '曜日指定 If ((wk_week > Worksheets("祝日").Cells(k, 4) And _ offsetrow = Worksheets("祝日").Cells(k, 3) + 1) Or _ (wk_week <= Worksheets("祝日").Cells(k, 4) And _ offsetrow = Worksheets("祝日").Cells(k, 3) + 1)) Then If (offsetcol = Worksheets("祝日").Cells(k, 4)) Then .Font.ColorIndex = 3 '赤 Exit For End If End If End If ElseIf (i < Worksheets("祝日").Cells(k, 1)) Then Exit For End If Next k End With If (offsetcol = 6) Then offsetrow = offsetrow + 1 offsetcol = 0 Else offsetcol = offsetcol + 1 End If Next j Next i End Sub を貼り付けてください。 (3)Sheet1(他のシートでも構いません) ボタンを貼り付けてマクロ名「カレンダー作成」を選択し、「OK」を押す。 (4)A1セルに年(例:2003)を入力しボタンを押す。 以上で1つのシートに3×4のカレンダーができると思います。 なるべく変更しそうな個所にはコメントを入れましたが、修正したい時に、わからない部分は、質問してください。 もっと、スマートに書ける方もいるかもしれませんが、参考にしてみてください。

rosimov
質問者

お礼

とても詳しいご回答ありがとうございます。さっそくやってみます。

回答No.4

No.4のものです。 (1)の方法で http://www.benri.com/calendar/2003.html のようなカレンダーをコピー、形式を選択して貼り付けでもできます。

回答No.3

どのように作りたいのでしょう? (1)すべて手作業で、色の変更や図の挿入の仕方を教えて欲しい。 (2)関数で作るようにしたい(指定セルに年を入れると内容が変化する。) (3)マクロで処理する。(指定セルに年を入れ、ボタンを押すとカレンダーが作成される (2)はNo.2の方のホームページを参照してもできると思います。    ただ、祝日などは、手作業になるような気がしますが    (中には、1998年固定のものや、1-2-3で作成した物もありましたが) (3)は作ってみました。    といっても祝日を考慮に入れて土日の色を変えたシンプルなものです。    絵は手作業で入れて頂かないといけませんが・・・ もし、マクロでということでしたら教えてください。

rosimov
質問者

補足

ご回答ありがとうございます。(3)のマクロで作ってみたいと思います。よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2
noname#3361
noname#3361
回答No.1

適当な枠を作って数字を入れるだけでできますよ。 色はフォントの色を変えるだけです。 絵を入れたければ図の挿入でできます。 質問があまりに漠然なのですが,要は手作業で作成する手間は有りますが,何も難しいことはないですよ。 (カレンダー作成ソフトのような手軽さを期待しているのならちょっとExcelでは無理です。)

rosimov
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

専門家に質問してみよう