あるカレンダーがありまして、それを指定期間分、自動作成するVBA(Excel)を作りたいと思っています。

まずひとつは1~末日まで日数がありまして、それの特定の日(たとえば、日曜や○週目)のみにセルに色づけするというプログラムを作りたいと思っています。

もうひとつは普通にカレンダーを自動で作りたいんですが、アルゴリズムがよくわかっていません。両方とも手順について詳しく教えていただけると助かります。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

(1)特定の日を色付け


土曜日の例
A1:B1に2003と9をいれる。
Sub test03()
s = DateSerial(Cells(1, 1), Cells(1, 2), 1)
e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1
j = 2
For i = s To e
If Weekday(i) = 7 Then
Cells(j, 1).Interior.ColorIndex = 6
End If
Cells(j, 1) = j - 1
j = j + 1
Next i
End Sub
(3)普通にカレンダーを自動で作りたいんですが
Sub test04()
s = DateSerial(Cells(1, 1), Cells(1, 2), 1)
e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1
i = 2
For k = s To e
w = Weekday(k)
Cells(i, w) = k - s + 1
If w = 7 Then
i = i + 1
End If
Next k
End Sub
説明をすっきりさせるため、12月の次ぎが年を+1、1月にすべきを考慮してませんが、組みこんでください。
If Cells(1, 2) = 12 Then
e = DateSerial(Cells(1, 1) + 1, 1, 1) - 1
Else
e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1
End Ifのように。
(2)○週目)のみにセルに色づけするという
WEEKNUM関数がワークシート関数で使えないので
工夫した。
Sub test05()
s = DateSerial(Cells(1, 1), Cells(1, 2), 1)
If Cells(1, 2) = 12 Then
e = DateSerial(Cells(1, 1) + 1, 1, 1) - 1
Else
e = DateSerial(Cells(1, 1), Cells(1, 2) + 1, 1) - 1
End If
i = 2
wn = 1
For k = s To e
w = Weekday(k)
Cells(i, 1) = k - s + 1
i = i + 1
If w = 7 Then
wn = wn + 1
End If
If wn = 3 Then
Cells(i, 1).Interior.ColorIndex = 6
End If
Next k
End Sub
    • good
    • 0
この回答へのお礼

大変な作業をありがとうございました。ばっちりできそうなんですが、検証してわからない点があれば、もう一度お聞きしたいと思うのでしばらくお待ちいただけますか。

お礼日時:2003/09/13 00:14

こことか参考になるかと。



参考URL:http://www.h3.dion.ne.jp/~sakatsu/
    • good
    • 0

1について


1~末日までのセルをループをかましてその都度判定すれば良いかなと。
具体的にはこんな感じ。
---
For Each C In Range("A1:A30")
If Weekday(C) = 1 Then
Range(C.Address).Interior.ColorIndex = 45
End If
Next C
---
A1からA30に日付があって、それを一つずつWeekday関数
でチェック。1の値が返ってきた(つまりは日曜日)セルのみオレンジ色にしています。
○週ということであれば、Weekday関数で返って来る値をカウントすれば何週かが判定できるでしょう。

2について
わざわざ一から作らなくても、既存の機能なりアドインを使えばいいんじゃないかなと思いますが。勉強がてらにやりたいということであれば別ですが。
アクセスやVBが既に入っていればカレンダーコントロールが付いてきてますし、それが無くてもフリーのアドインは幾らでもあります。

参考URL:http://www.google.com/search?num=50&lr=lang_ja&q=カレンダーコントロール エクセル アドイン
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

QEXCELで作ったカレンダー(縦6マス×横7マス:カレンダーシート)の表の中から、隣のシート(スケジ

EXCELで作ったカレンダー(縦6マス×横7マス:カレンダーシート)の表の中から、隣のシート(スケジュールシート)にある横並びのカレンダーへ該当する予定内容を転記したいです。

1日は固定の場所になく、表の中にランダムに置かれ(大体は1~2行目にはあるが、確実ではないです)そこからカレンダーのような書き方で表があるところまで入力されます。

なるべくシンプルな数式でと思っているのですが、なかなかうまくいきません。

翌月以降も日付を直して使いたいです。
わかりにくくて申し訳ありませんが、もしよい数式があればどうかご教授頂ければと思います。
よろしくお願いいたします。

Aベストアンサー

7列でもいいとのことですので、Aを日曜、Fを土曜とします。
(式を加工すればどの曜日から始まるのであっても修正はできます)
WEEKDAY(日付となるセルなり式)とすれば、その日付の曜日が日=1~土=7という数字になります。
前回のものと合わせて具体的な式を書いてみましょう。

※スケジュールシートのB1には1日と書かれていますが、ここにはその月の初めの日付(この場合2017年3月1日)を入力し、書式によって日付のみ表示するようにしてください。
もしくは、どこかに年と月を入力するセルを作り、そのセルによって日付を取得しましょう。
(A1に年、A2に月があるとすれば、B1=DATE(A1,A2,1)とします)
日付でないと曜日が分からないからです。
C1以降はC1=B1+1というように、左のセル+1日で表示できます。
2月などの月末で31日までない部分を空白として表示する場合は、
C1の式を=IF(B1="","",IF(DAY(B1+1)=1,"",B1+1))としましょう。
これであれば、左のセルの次の日の日付が1日であった場合に空白、違っていれば左のセルの次の日を表示させることができ、左のセルが空白であれば空白となります。
(2月28日の次の日が3月1日なら、1日なので空白となり、その右のセルは左側のセルが空白なのでやはり空白となります)
C1の式を必要なだけ(31日まで?)コピーしてください。

なお無いとは思いますが、カレンダーシートの日付の下にある予定の部分には、数字のみの入力はないものとします。(日付の検索に予定の欄がヒットしないように)


WEEKDAY(B1)でB1の曜日を数字に変えて、
ADDRESS(1,WEEKDAY(B1),4)でその曜日の1行目のセル番地(日曜ならA1、土曜ならG1)を取得。
A~G列つまりアルファベット1文字と分かっているので、
LEFT(ADDRESS(1,WEEKDAY(B1),4),1)でその列のアルファベットを取得。
INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1))で、カレンダーシートのその曜日の列全体を指定できます。

カレンダーの方は1日と書かずに1と書いていますが、数字の1が入っているのか、2017年3月1日と入っているのか分からないです。
よってカレンダーのセルに年月日のデータで入っている場合、
MATCH(B1,INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)
日にちの数字だけの場合、
MATCH(DAY(B1),INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)
とします。これで、その列の中でB1に一致する日のセルが何番目にあるかを取得します。

これによって該当するセルの列と行が分かったので、その1つ下のセルのデータをINDIRECTによって取得します。


※※まとめです。※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

カレンダーが年月日なら
=INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&MATCH(B1,INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)+1)

カレンダーが日にちの数字だけなら
=INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&MATCH(DAY(B1),INDIRECT("カレンダー!"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)&":"&LEFT(ADDRESS(1,WEEKDAY(B1),4),1)),FALSE)+1)

をスケジュールシートのB2に入れる。
必要なだけコピーする。B1が1日なら31日はAF1です。

スケジュールシートのB1は年月日データを入れる。
年月を別のセルで指定する場合は、
B1=DATE(A1,A2,1) (A1,A2はそれぞれ年、月、を入力するセルを指定)
とする。

C1=IF(B1="","",IF(DAY(B1+1)=1,"",B1+1))
として、必要なだけコピーする。

7列でもいいとのことですので、Aを日曜、Fを土曜とします。
(式を加工すればどの曜日から始まるのであっても修正はできます)
WEEKDAY(日付となるセルなり式)とすれば、その日付の曜日が日=1~土=7という数字になります。
前回のものと合わせて具体的な式を書いてみましょう。

※スケジュールシートのB1には1日と書かれていますが、ここにはその月の初めの日付(この場合2017年3月1日)を入力し、書式によって日付のみ表示するようにしてください。
もしくは、どこかに年と月を入力するセルを作り、そのセルに...続きを読む

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

Qエクセルで作るカレンダー

よろしくお願いします。
エクセル2002を使っています。
一枚の用紙に1月から12月までが載ったカレンダーを
作りたいと思っています。

おおよそのデザインは以下の
http://www.benri.com/calendar/2003.html
と同じ様にしたいと思っています。

ただ、可能であれば年数を入力しただけで月の日付が表示されるように
したいと思っています。
この場合、どのような数式をどのように使えばよろしいのでしょうか?


よろしくお願いします。

Aベストアンサー

hero-yasuさんのイメージする(最終的な)カレンダーとは、
まったく違いますが、少しは参考になると思います。

参考URL:http://www.eva.hi-ho.ne.jp/ohtake/excel/calender2.htm

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

QExcelで作る出勤管理表/カレンダー

はじめてこちらで質問させて頂きますsansian3と申します、
どうぞ宜しくお願い致します。

私は現在、150人規模の会社で総務人事を担当しており、給与計算をしています。
今までのペーパーによるやり取りに限界を感じ、Excel2003を利用して
従業員の出勤管理を行いたいと思っております。

具体的には、タイムカードを無くす事が主な目的なのですが、
私の会社は営業が中心で、正社員とパートで定休日がバラバラ、
そして年間休日制(合計92日)でカレンダーとの連動を取るのがとても難しい会社です。

休日パターンにつきましては、

Aパターン…水曜定休・第1.3火曜隔週
Bパターン…水曜定休・第2.4火曜隔週
Cパターン…日曜定休・第1.3土曜隔週
Dパターン…日曜定休・第2.4土曜隔週
Eパターン…月曜定休・第1.3火曜隔週

...以下、Sまで全19パターン。

カレンダー年度は4月開始~3月終わり、
出勤タイムカードの締め日は、毎月16日開始~15日締め。

GW・夏期休暇・年末年始連続休暇有り、
毎年パターン毎の休日割り振りは、
上記の19パターンを基準として作成しています。

尚、セルに社員番号を入れると、Excelの社員マスターからVLOOKUP関数で
氏名・所属・休日パターンが出てくるようにはなっています。


このとっても問題だらけの状況下で私が作成したいExcelの出金管理なのですが…

1.A4縦、列に項目(日にち・曜日・残業時間・有休等勤怠)
行に日付・曜日(4/16水・4/17木・4/18金...)

2.処理年月を入力すると、日付と曜日が自動的に変わる

3.社員番号を入れると、その社員の休日パターンの定休日(年間休日日)行が
赤く塗りつぶされる

上記の作成したExcelデータをサーバーにアップして、
従業員150人がダウンロードして各々が処理月と社員番号を打ち
印刷する流れを考えております。

以上です、私の知識不足でどうしても解決が出来ません、
ご教授宜しくお願い致します!

はじめてこちらで質問させて頂きますsansian3と申します、
どうぞ宜しくお願い致します。

私は現在、150人規模の会社で総務人事を担当しており、給与計算をしています。
今までのペーパーによるやり取りに限界を感じ、Excel2003を利用して
従業員の出勤管理を行いたいと思っております。

具体的には、タイムカードを無くす事が主な目的なのですが、
私の会社は営業が中心で、正社員とパートで定休日がバラバラ、
そして年間休日制(合計92日)でカレンダーとの連動を取るのがとても難しい会社です。

...続きを読む

Aベストアンサー

「各自印刷をして、手書をする」という運用を前提にしてアドバイスさせていただきます

> 1.A4縦、列に項目(日にち・曜日・残業時間・有休等勤怠)行に日付・曜日(4/16水・4/17木・4/18金...)

列は問題なくつくれますよね
行は日付と曜日なので、
案1・・・A列に日付、B列に数式「=text(A1,"aaa")」を入れる
案2・・・A列に日付、A列のセルの書式設定-表示形式をユーザー設定で「m/d aaa」に変更する

> 2.処理年月を入力すると、日付と曜日が自動的に変わる
処理年月は、締日の年月でしょうか?開始の年月でしょうか?
仮に締日の年月を前提に
年のセルと月のセルを別にしたほうがわかりやすいと思います
開始日のセルに「=date(年のセル,月のセル-1,15)
開始日以降のセルは、「=上のセル+1」で31行作成します
29行目、30行目、31行目のセルに条件付書式を設定します
29行目:数式が=(DAY(29行目のセル)>15)・・・フォント:白、塗潰し:白
30行目:数式が=(DAY(30行目のセル)>15)・・・フォント:白、塗潰し:白
31行目:数式が=(DAY(31行目のセル)>15)・・・フォント:白、塗潰し:白

> 3.社員番号を入れると、その社員の休日パターンの定休日(年間休日日)行が赤く塗りつぶされる
別のシート(仮称:社員番号一覧)に社員番号と休日パターンの表を作成する(休日はパターンはA,bではなく、1,2の数字にしておく。つまりA->1、B->2・・・として登録しておく)
更に別のシート(仮称:カレンダー)に行は日付(1年分)、列には休日パターンの表を作成し、休日パターンごとに休日の日に1を設定しておく
社員番号を入力した際に、vlookupを使用して「社員番号一覧」から休日パターンを取得するようにする
日付の1行目~28行目まで条件付書式の設定
数式が「=(vlookup(日付のセル,カレンダーの範囲,取得した休日パターン+1,false)=1)」
を設定する
日付の29行目以降は、2.で設定した条件付書式に追加で
数式が「=(vlookup(日付のセル,カレンダーの範囲,取得した休日パターン+1,false)=1)」

おおまかにこんな感じでいいのではないでしょうか

「各自印刷をして、手書をする」という運用を前提にしてアドバイスさせていただきます

> 1.A4縦、列に項目(日にち・曜日・残業時間・有休等勤怠)行に日付・曜日(4/16水・4/17木・4/18金...)

列は問題なくつくれますよね
行は日付と曜日なので、
案1・・・A列に日付、B列に数式「=text(A1,"aaa")」を入れる
案2・・・A列に日付、A列のセルの書式設定-表示形式をユーザー設定で「m/d aaa」に変更する

> 2.処理年月を入力すると、日付と曜日が自動的に変わる
処理年月は、締日の年月でしょうか?開...続きを読む

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

Qエクセルで作る万年カレンダーで使う関数について(パート2)

再び質問させて頂きます。エクセルで万年カレンダーを作ろうと、解説のホームページを見ているのですが、分からない部分があります。

〔表示例〕

  2005/9/19 敬老の日
  (      ) 国民の休日
  2005/9/23 秋分の日
  (      ) 振替休日


〔解説1〕

※振替休日・・・ 日曜日と祝日が重なったとき
※国民の休日 ・・・祝日と祝日に挟まれた平日

※振替休日と国民の休日が重なったときは、振替休日とする。



〔解説2〕

(敬老の日と秋分の日)
敬老の日が月曜日に固定されているので、秋分の日の曜日により国民の休日となる可能性があります。

(計算式)
・両祝日間が2日間であることから判定
    =IF(B21-B19=2,B19+1,"")
・秋分の日が必ず水曜日になることから判定
    =IF(WEEKDAY(B21)=4,B19+1,"")



解説の内容が、全体的にいまいち分かりません。(^^;
祝日同士が3日間の開きがあるのに、”国民の休日”が発生したりするのでしょうか? もしできたら、具体的にカレンダーの曜日まわりを含めて例を挙げて教えて頂けると助かります。
分かる方、ぜひよろしくお願いいたします。

再び質問させて頂きます。エクセルで万年カレンダーを作ろうと、解説のホームページを見ているのですが、分からない部分があります。

〔表示例〕

  2005/9/19 敬老の日
  (      ) 国民の休日
  2005/9/23 秋分の日
  (      ) 振替休日


〔解説1〕

※振替休日・・・ 日曜日と祝日が重なったとき
※国民の休日 ・・・祝日と祝日に挟まれた平日

※振替休日と国民の休日が重なったときは、振替休日とする。



〔解説2〕

(敬老の日と秋分の日)
敬老の日...続きを読む

Aベストアンサー

祝日同士が3日間の開きがあるなら、「国民の休日」は発生しませんよ。
〔解説1〕の上にある〔表示例〕は
2005年の場合、敬老の日の9/19(月)、秋分の日は9/23(金)であり、
「国民の休日」と「振替休日」の左が(    )になっているのは
2005年にはどちらも発生しないという意味では?

次に「国民の休日」が発生する(と思われる)のは2009年です。
2009年の敬老の日は9/19(月)、秋分の日は(計算によると)9/21(水)です。
9/22(火)は『祝日と祝日に挟まれた平日 』なので、
「国民の休日」になると思われます。

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

Q簡素なカレンダーを作りたい

マス目があって、曜日と数字のみの簡素なものです。
色も黒だけです。祝日や○○の日なども、いっさい書きません。
ただ、下に「○○年○月」と表示できて、その年月を変えると、簡単に次の月のカレンダーが表示できるようにしたいのです。
たぶんエクセルを使うんだと思いますが、かじった程度なので、簡単なことから教えて頂けると大変助かります。
宜しくお願いいたします。

Aベストアンサー

エクセルで簡単に作れますよ。
こんなやつ >> http://homepage3.nifty.com/n-tatsumi/cal.htm

まずD1に年(2004)、D3に月(12)と入力します。
一行あけてA5からG5までに、日・月・火・・・と曜日を振って行きます。
(Sun, Mon, Tueなど形式はお好きなように)

第一週目の計算式です。
A6 第一週日曜日
=IF(WEEKDAY(DATE($D$1,$D$3,1))=1,1,"")

B6 第一週月曜日
=IF(ISNUMBER(A6),A6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=2,1,""))

C6 第一週火曜日
=IF(ISNUMBER(B6),B6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=3,1,""))

D6 第一週水曜日
=IF(ISNUMBER(C6),C6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=4,1,""))

E6 第一週木曜日
=IF(ISNUMBER(D6),D6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=5,1,""))

F6 第一週金曜日
=IF(ISNUMBER(E6),E6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=6,1,""))

G6 第一週土曜日
=IF(ISNUMBER(F6),F6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=7,1,""))

以降、
A7 第二週の日曜日 =G6+1
B7 第二週の月曜日 =A7+1
C7 第二週の火曜日 =B7+1
D7 第二週の水曜日 =C7+1
E7 第二週の木曜日 =D7+1
F7 第二週の金曜日 =E7+1
G7 第二週の土曜日 =F7+1
A8 第三週の日曜日 =G7+1
B8 第三週の月曜日 =A8+1
・・・という風に、第四週の土曜日までは前日に+1する計算式を書きます。

第五週は最終週なのですこし違います。
A10 第五週の日曜日
=IF(G9+1<=DAY(DATE($D$1,$D$3+1,1)-1),G9+1,"")

B10 第五週の月曜日
=IF(ISNUMBER(A10),IF(A10+1<=DAY(DATE($D$1,$D$3+1,1)-1),A10+1,""),"")

C10 第五週の火曜日
=IF(ISNUMBER(B10),IF(B10+1<=DAY(DATE($D$1,$D$3+1,1)-1),B10+1,""),"")

D10 第五週の水曜日
=IF(ISNUMBER(C10),IF(C10+1<=DAY(DATE($D$1,$D$3+1,1)-1),C10+1,""),"")

E10 第五週の木曜日
=IF(ISNUMBER(D10),IF(D10+1<=DAY(DATE($D$1,$D$3+1,1)-1),D10+1,""),"")

F10 第五週の金曜日
=IF(ISNUMBER(E10),IF(E10+1<=DAY(DATE($D$1,$D$3+1,1)-1),E10+1,""),"")

G10 第五週の金曜日
=IF(ISNUMBER(F10),IF(F10+1<=DAY(DATE($D$1,$D$3+1,1)-1),F10+1,""),"")

これで、年と月を書き換えると日付が自動表示されるようになります。

あとは週と週の行の間に適当な高さの行を挿入すれば書き込める余白付のカレンダーに、
また別シートのA1からA12までに1~12、B1からB12までにJanuary, Ferbruaryを入力して英文リストを作り、
好きなセルで =VLOOKUP(D3,参照するシート名!A1:B12,2) とすれば、そのセルには英文が表示されます。
色やセルの塗りつぶしをすればちょっとおしゃれなカレンダーの出来上がり!

エクセルで簡単に作れますよ。
こんなやつ >> http://homepage3.nifty.com/n-tatsumi/cal.htm

まずD1に年(2004)、D3に月(12)と入力します。
一行あけてA5からG5までに、日・月・火・・・と曜日を振って行きます。
(Sun, Mon, Tueなど形式はお好きなように)

第一週目の計算式です。
A6 第一週日曜日
=IF(WEEKDAY(DATE($D$1,$D$3,1))=1,1,"")

B6 第一週月曜日
=IF(ISNUMBER(A6),A6+1,IF(WEEKDAY(DATE($D$1,$D$3,1))=2,1,""))

C6 第一週火曜日
=IF(ISNUMBER(B6),B6+1,IF(WEEKDAY(DATE($D$1...続きを読む


人気Q&Aランキング

おすすめ情報