OpenOfficeでイベントスケジュール表を作る

いわゆるイベント雑誌やなんかによくある、何月何日から何月何日までこのイベントが開催中ですというスケジュール管理表をOpenOfficeで作ってみました。
数式と構成使用している関数サンプルファイルと参考記事

送信者 OpenOffice

数式と構成

構成

  • 期間開始日は、C列
  • 期間終了日は、D列
  • 日付は、1行目
  • 曜日は、2行目
  • 期間中なら黄色く塗りつぶし、そうでなければ塗りつぶさない
  • 期間中の休日は休の文字を入れる
  • 休日かどうかの判定は、B列に入力されている曜日番号に基づく
  • 日付と曜日を示す一行目と二行目は、日曜日の場合、赤い文字にする

数式

塗りつぶす数式 ●休日かどうかの判定
E3セルを例に説明します。

黄色く塗りつぶすかどうかの設定

条件付きの書式設定で設定します。条件付きの書式設定は、ツールバーの書式>条件付きの書式設定で設定画面が立ち上がります。
設定の条件は、「数式が」にします。
開始日に対しての判定と終了日に対しての判定をしなければいけないので、AND関数を用います。
設定内容は、AND(E$1>=$C3;E$1<=$D3)
これで、E1セルに表示されている日付が開始日以降で終了日以前であれば条件に適合していると判断されます。
ここで注意しなければいけないのは、
一行目の日付を、行をずらさないように相対参照にすること ・・E$1
C列とD列の日付を、列をずらさないように相対参照にすること ・・$C3
この$によって、E3セルをそのままコピーして貼り付けても、参照範囲がずれません。

条件に適合している場合の書式設定は、新しいスタイルをクリックすると書式設定画面が立ち上がります。
ここで、背景タブをクリックして塗りつぶしたい色を選択してOKをクリックします。

休日かどうかの判定

  1. 開始日以降であること E$1>=$C3
  2. 終了日以前であること E$1<=$D3
  3. 休日であること NOT(ISERROR(FIND(WEEKDAY(E$1;1);$B3)))

上の3つの条件を満たした場合に休を付けるので、AND関数で条件を設定します。

休日であるかどうかは、処理対象の日付の曜日番号が、B3セルに含まれているかどうかをWEEKDAY関数で判断します。
FIND(WEEKDAY(E$1;1);$B3)
もしも含まれていなければ、エラーになります。そこで、ISERROR関数でエラーになるかどうかを調べます。
ISERROR(FIND(WEEKDAY(E$1;1);$B3))
エラーでなければ、休日なので条件に適合してるとしたいのでNOT関数でエラーでないことを条件にします。
NOT(ISERROR(FIND(WEEKDAY(E$1;1);$B3)))

上の三点が適合していれば、"休" をつけて、そうでなければ空白にするので、
=IF(AND(E$1>=$C3;E$1<=$D3;NOT(ISERROR(FIND(WEEKDAY(E$1;1);$B3))));"休";"")

ここでも注意しなければいけないのは、開始日が入力されているC列と終了日が入力されているD列を、参照範囲からずらさないために相対参照にすること、判断対象日が入力されている1行目を参照範囲からずらさないために、相対参照にすることです。

使用している関数
関数名:IF関数
書式:=IF(判別式;"A";"B")
何ができる:判別式の結果によって処理を分ける
平たく書くと:=IF(1+1=3;"ええ??";"うそです")で、1+1は3ではないので「うそです」が返される

関数名:AND関数
書式:=AND(判別式1;判別式2)
何ができる:()ないの全ての判別式が真ならTRUEを返す
平たく書くと:=AND(1+1=2;3-3=0)で、いずれも真なのでTRUEが返される =AND(1+1=4;3-3=0)で、1つ真ではないので、FALSEが返される

関数名:NOT関数
書式:=NOT(判別式)
何ができる:判別式の結果が、真でなければTRUEを返す 真であればFALSEを返す
平たく書くと:=NOT(1+1=2)で1+1=2は真なので、FALSEを返す

関数名:ISERROR関数
書式:=ISERROR(判別式)

何ができる:判別式の結果が、エラーならTRUEを返す エラーでなければFALSEを返す
平たく書くと:上のサンプルで=ISERROR(FIND(WEEKDAY(E$1;1);$B3))は、エラーなのでTRUEを返す。=ISERROR(FIND(WEEKDAY(F$1;1);$B4))は、エラーでないのでFALSEを返す

関数名:FIND関数
書式:=FIND(検索文字;検索文字を探す文字列;開始位置)
何ができる:検索文字列内で、開始位置以降に検索文字が見つかれば、何文字目にあるかを返す。なければエラーを返す。開始位置が省略されていれば一文字目から検索する。
平たく書くと:=FIND("L";"LOVE")でLは一文字めにあるので1を返す。
=FIND("O";"LOVE";3)で、Oは2文字目にあるが、3文字目から探すことにしているので、エラーが返される

関数名:WEEKDAY関数
書式:=WEEKDAY(処理対象の日付;種類)
何ができる:処理対象の日付の曜日番号を、種類に合った形で返す
平たく書くと:=WEEKDAY(today();1)で、今日2011年9月25日は日曜日なので1を返す
*種類と番号
種類が1のとき:日曜日を1にして、以降、土曜日を7にする
種類が2のとき:月曜日を1にして、以降、日曜日を7にする
種類が0のとき:月曜日を0にして、以降、日曜日を6にする

サンプルファイルと参考記事
イベントスケジュール表のサンプルファイルは、calc077.odsをダウンロードしてください。
参考記事:
週刊勤務予定表を作ってみました
OpenOfficeで条件付きの書式設定を使ってグラフを作る
絶対参照と相対参照