*カレンダーの作成 [#b721cef2] 次に、ウィンドウ左下にある、 ワークシートの一覧から 「カレンダー」をクリックしてください。 #ref(Lecture/InfoPrac2004/10th/calendar/ex03.png,nolink,カレンダーのシート) カレンダーの作成と日付/時刻関数の説明をします。 まず、 年と月を、C2セルとE2セルにそれぞれ、「2004」「12」と入力してください。 **第1週の計算 [#n0a05145] 次に、第1週の日付の計算をします。 ここでは、「''その年月の1日が何曜日になるか''」がポイントになります。 ここで使う関数は、 これまで登場したIF関数と、 日付/時刻関数の''DATE''関数、''WEEKDAY''関数です。 :DATE(指定した年月日のシリアル値を返す)| --書式 : DATE(年, 月, 日) --引数 : 年 : 1900〜9999までの数値 --引数 : 月 : 1〜12までの数値 --引数 : 日 : 1〜31までの数値 :WEEKDAY(シリアル値を曜日に変換した結果を返す)| --書式 : WEEKDAY(シリアル値, 種類) --引数 : シリアル値 : 日付や時間のシリアル値 --引数 : 種類 : 戻り値の種類 ---1または省略 : 日曜=1〜土曜=7 ---2の場合 : 月曜=1〜 ---3の場合 : 月曜=0〜 -まず、その年月の1日は、DATE関数を使えば、シリアル値として求めることができます。次の計算式で表すことができます。 = DATE(C2, E2, 1) -次に、その年月の1日が何曜日かは、WEEKDAY関数を使えばわかります。上のDATE関数の結果を使えば、計算式は次のようになります(ここでは種類は1を選択します)。 = WEEKDAY(DATE(C2, E2, 1)) -「2004年12月1日」のシリアル値と曜日の値は、上の2つの計算式を使えば、それぞれ「38322」と「4」(水曜日)となるのがわかります。 これらの式を使って、第1週の計算をしてみましょう。 B5〜H5セルの値も利用します。 正解から紹介すると、B6セルの計算式は次のようになります。 =IF(B5>=WEEKDAY(DATE(C2,E2,1)), B5-WEEKDAY(DATE(C2,E2,1))+1, "") ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ 条件式(A) 真の場合(B) 偽の場合(C) つまり、次のような意味になります。 -その年月の1日の曜日がB5と同じかその後であれば...条件式(A) --B5からその年月の1日の曜日を引き、1を足したものを返す...真の場合(B) --空白「""」を返す...偽の場合(C) わかりにくいので、表にしてみましょう。 「2003年12月」の場合、 「2003年12月1日」は水曜日なので、曜日の値は「4」となります。 |セル|5行目の値(曜日)|5行目の値-WEEKDAYの戻り値|条件式の結果|日付|h |B6 |CENTER:1 |CENTER:-3 |CENTER:偽 | | |C6 |CENTER:2 |CENTER:-2 |CENTER:偽 | | |D6 |CENTER:3 |CENTER:-1 |CENTER:偽 | | |E6 |CENTER:4 |CENTER:0 |CENTER:真 |CENTER:1| |F6 |CENTER:5 |CENTER:1 |CENTER:真 |CENTER:2| |G6 |CENTER:6 |CENTER:2 |CENTER:真 |CENTER:3| |H6 |CENTER:7 |CENTER:3 |CENTER:真 |CENTER:4| つまり、まずセル(B6〜H6)の曜日の値と、その年月の1日の曜日の値を比較します。 もし、セルの曜日の値より1日の曜日の値が小さければ、 そのセルには指定された年月の日付はあらわれないはずです(まだ前の月の日付)。 もし、セルの曜日の値より1日の曜日の値が同じか大きければ、 そのセルには指定された年月の日付があわられます。 セルの日付は、曜日の値を計算したものから求めることができるというわけです。 B6セルの計算式の「C2」と「E2」セルを指定している部分を、 絶対参照の形式に変更してください。 変更できたら、B6セルの計算式をC6〜H6セルにコピーしましょう。 #ref(Lecture/InfoPrac2004/10th/calendar/ex04.png,nolink,第1週) **第2週〜第6週までの計算 [#te36628f] 第1週目は難しい数式を使いましたが、 第2週から第6週は簡単な計算式で求めることができます。 第2週の日曜日の日付は、第1週の土曜日の日付に1を足したものですから、 B7セルの次のような計算式になります。 = H6 + 1 また、第2週の月曜日の日付は、日曜の日付に1を足したものですから、 C7セルの次のような計算式になります。 = B7 + 1 あとは、月曜日の計算式を土曜日のセル(H7)までコピーし、そのあと第2週の計算式全体を第6週までコピーすれば、すべての枠に計算式を入力することができます。 コピーには、マウスを使えば簡単にできます。 #ref(Lecture/InfoPrac2004/10th/calendar/ex05.png,nolink,第2〜第5週) **月末の表示(条件付き書式) [#se8ed7aa] 今のままでは、月末に「32」などの余計な数字が表示されてしまっています。 そこで、「''条件付き書式''」を使って、数値の表示をコントロールします。 条件付き書式とは、普通の書式設定とは違い、セルや計算の値がある条件がときに設定せる書式のことです。 ここで使う関数は、さっき登場したDATE関数と、日付/時刻関数の''DAY''関数です。 -''DAY''(シリアル値に対応した日を1から31までの数字で返す) --書式 : DAY(シリアル値) --引数 : シリアル値 : 日付や時間のシリアル値 -指定された年月の1日は、DATE関数を使えば、シリアル値として求めることができます。次の計算式で表すことができます。 = DATE($C$2, $E$2, 1) -指定された年月の翌月の1日は、指定された月に1を足せばよいだけです。次の計算式で表すことができます。 = DATE($C$2, $E$2+1, 1) -指定された年月の翌月の1日の前日、つまり''指定された年月の最終日''は、''指定された月に1を足し、さらに日から1を引く、つまり0にすればよい''だけです。次の計算式で表すことができます。 = DATE($C$2, $E$2+1, 0) -したがって、指定された年月の最終日の日付は、次の計算式で求められます。 = DAY(DATE($C$2, $E$2+1, 0)) この式を使って、次のように条件付き書式を設定しましょう。 「その月の最終日より大きい数値は、背景と同じ文字色で表示する」という条件にします。 +B10〜H11までのセルを範囲指定 +メニューバーから「書式」→「条件付き書式」を選択 +条件を設定 --中央の条件に「次の値より大きい」をマウスで選択 --右側の入力欄に、次の計算式を入力 = DAY(DATE($C$2, $E$2+1, 0)) #ref(Lecture/InfoPrac2004/10th/calendar/ex06.png,nolink,条件付き書式) +「書式」ボタンをクリック --「フォント」タブをクリック --「色」で背景と同じ色を文字色に設定 --「OK」ボタンをクリック +「OK」ボタンをクリック 設定できると、月の最終日より大きい数字が見えなくなります。ただし、表示されていないわけではないので、セルの塗りつぶしを設定するときには気をつけてください。 **見映えの設定 [#r97acb61] カレンダーを見映えをよくするため、次のような設定をして下さい。 -文字色の設定(日曜日は赤、土曜日は青など) -文字のフォントの設定、大きさの変更 -罫線の太さ、パターン -セルの塗りつぶし &br; &navi2(Lecture/InfoPrac2005/10th,next);進んでください。 ---- #navi2(Lecture/InfoPrac2005/10th,prev,toc,next) |