よくわかる Microsoft Office Excel演習問題集 の Lesson36「カレンダー」、標準解答集は具体的な手順しか載っていないので、「目的」等を補完してみた。
§1.入力
■ 入力
- 西暦、月、曜日を入力
- 西暦は“2010”,月は“3”としよう。(カレンダーなので前向きに‥‥)
- 曜日ナンバーを入力
- テキスト47ページの図のように、セルB4に“曜日ナンバー”、5行目に1〜7 までの番号を入力する。これは「曜日」のコードに相当する。
- 4,5行目は、最終的には「非表示」にする。(テキスト46ページの図は、3行目の次は6となっている)
■ 1週目の日付
※ 関数の説明(ヘルプより)
- IF(論理式,真の場合,偽の場合)
- 「論理式」とは条件式のこと。
- 「真の場合」とは、条件式に一致した時に行うことを記述する。
- 「偽の場合」とは、条件式に一致しなかった時に行うことを記述する。
- WEEKDAY(シリアル値,種類)
- 「シリアル値」とは、1900年1月1日からの経過日数。2010/03/01 は 40,238となる。
- 「種類」を省略すると、1 (日曜) 〜 7 (土曜) となる。
- DATE(年,月,日)
例えば、- “=date(2010,2,29)” と入力すると、2010/3/1 となる。
- “=date(2010,3,0)” と入力すると、2010/2/28 となる。
- “=date(2012,3,0)” と入力すると、2012/2/29 となる。
- セルB8に次を入力する。(解答集rの下の※)
=IF(B5 >= WEEKDAY(DATE(B2,B3,1)), B5 - WEEKDAY(DATE(B2,B3,1)) +1, "") - セルB2には 2010、セルB3 には 3 が入っているとすれば、次のようになる。
=IF(B5 >= WEEKDAY("2010/3/1"), B5 - WEEKDAY("2010/3/1") + 1, "") - セルB5は 1、2010/3/1 は月曜日である Weekday は 2 となり‥‥
=IF(1 >= 2, 1 - 2 + 1, "")
即ち、IF 条件式は 偽 となり、セルB5は "" (空)となる。
- セルB2には 2010、セルB3 には 3 が入っているとすれば、次のようになる。
- セルC8にセルB8の式をコピーすると
=IF(C5 >= WEEKDAY(DATE(C2,C3,1)), C5 - WEEKDAY(DATE(C2,C3,1)) +1, "") となり、#Value! これは、値がおかしいため。正しくは、=IF(C5 >= WEEKDAY(DATE(B2,B3,1)), C5 - WEEKDAY(DATE(B2,B3,1)) +1, "") Date関数の引数は変えてはいけないので、セルB8の式を絶対参照に変える。=IF(B5>=WEEKDAY(DATE($B$2,$B$3,1)),B5- WEEKDAY(DATE($B$2,$B$3,1))+1,"") 標準解答集では“$”が余計に付いているが、これは考え方を明確にするためである。- セルC5は 2、2010/3/1 は月曜日である Weekday は 2 となり‥‥
=IF(2 >= 2, 2 - 2 + 1, "")
即ち、IF 条件式は 真 となり、セルC5は 1 となる。
- セルC5は 2、2010/3/1 は月曜日である Weekday は 2 となり‥‥
■ 2〜4週目の日付
- 日曜日の日付は前の週の土曜日の日付+1
- 月〜土曜日の日付は、前日の日付+1
§4. 5〜6週目の日付
通常、1ヶ月は5週あるが、2009年2月は4週、2010年1月は6週だった。
なお、標準解答集の考え方では2月が4週しかない時エラーになるので、ここでは エラーにならない方法 で行う。
- セルB12
「1週前(セルB11)+7」の月と、カレンダー月(セルB3)が同じであれば、1週前(セルB11)+7 とする。=IF(MONTH(DATE(B2,B3,B11+7))=B3,B11+7,"") - セルC12〜H12
セルB12の式を絶対参照に変えておく必要がある。=IF(MONTH(DATE($B$2,$B$3,B11+7))=$B$3,B11+7,"") その後、コピーすればよい。 - セルB13
「2週前(セルB11)+14」の月と、カレンダー月(セルB3)が同じであれば、2週前(セルB11)+14 とする。=IF(MONTH(DATE(B2,B3,B11+14))=B3,B11+14,"") - セルC13〜H13
セルB13の式を絶対参照に変えてコピーする。
ヒント
- セル内での改行は、[Alt]+[Enter]です。
- セルの入力確定は[Enter]です。この時、カーソルの位置は問いません。
- [Ctrl]+[Enter]で入力を確定するとカーソルが移動しません。
(本来の目的とは使い方が異なるので注意してお使いください) - [改-1]シートで、セルB12をセルB13にコピペすると、式の内容が変わります。全く同じ式をコピペすることはできません。(たぶん)
以下は私が行っている方法です。- コピー元の式を選択し、コピー(Ctrl+C)します。
- メモ帳を起動し‥‥
- 貼り付け(Ctrl+V)ます。
- 全て選択(Ctrl+A)します。
- 切り取り(Ctrl+X)ます。
- メモ帳を閉じます。
- 後からでもよい。
- メモ帳にデータを残さないで閉じると、「変更を保存しますか?」が出ない。
- Excelに戻り、貼り付けるセルを選択し、貼り付け(Ctrl+V)ます。
§2.Excelに予定が入力出来るようにする
Lesson36は、印刷して、「予定は手書き」が基本です。印刷する時にわかっている予定は「予め入力」しておけるようにした方がいいのではないでしょうか?
そのためには工夫が必要です。「日」と同じセルに入力すると、何かの弾みで「日」を消してしまうことがあるでしょうから‥‥
■ 予定入力行を作る
日付行の下に予定行を挿入します。
- 第1週の日付の下の行(9行目)を行選択します。
- 選択した行を右クリックし、
- [挿入]をクリックします。
- 同様に、第2週の日付の下の行(11行目)を行選択し、
- [挿入]をクリックします。
- 以下、これを繰り返します。
§3.シートを保護する
「カレンダー年」「カレンダー月」「予定入力欄」以外は選択(=変更)できないようにします。Excel演習問題集では、第3章 Lesson41の「ロックの解除」と「シートの保護」の方法です。
§1. 入力するセルを全て選択する
- セルB2(カレンダー年)をクリックする。
- セルB3(カレンダー月)を Ctrl+クリックする。
- セルB9〜H9を Ctrl+ドラッグする。
- セルB11〜H11を Ctrl+ドラッグする。
- セルB13〜H13を Ctrl+ドラッグする。
- セルB15〜H15を Ctrl+ドラッグする。
- セルB17〜H17を Ctrl+ドラッグする。
- セルB19〜H19を Ctrl+ドラッグする。
- [書式]メニューをクリックし、
- [セル]をクリックする。
- [保護]タブを選択し、
- 「ロック」のチェックを外す。
- [OK]をクリックする。
- [ツール]メニューをクリックし、
- [保護]をポイント、
- [シートの保護]をクリックする。
- 【シートの保護】ダイアログボックスで
- 「シートとロックされたセルの内容を保護する」にチェックを入れる。(入っているはず)
- 「ロックされたセル範囲の選択」のチェックを外す。
- 「ロックされていないセル範囲の選択」にチェックを入れる。(入っているはず)
- 上記以外はチェックを外す。(入っていないはず)
- [OK]をクリックする。
§4.より実用的にするためのヒント
- 予定入力欄を消去する マクロ を作る*1
- マクロの作成: [ツール]メニュー ⇒[マクロ]⇒[新しいマクロの記録]
- マクロの実行: [ツール]メニュー ⇒[マクロ]⇒[マクロ]⇒ マクロを選択 ⇒[実行]
- マクロの削除: [ツール]メニュー ⇒[マクロ]⇒[マクロ]⇒ マクロを選択 ⇒[削除]で削除できるが、それでも Excelを開いた時【セキュリティ警告】は出る からややこしい。
- シートの
- コピー: 可能
- 名前の変更: 可能
- セル内の改行は[Alt]+[Enter]
- 毎週の予定の一括入力
エラーが出るものの次の方法が使えます。- セルG9〜G17 を選択する。
- “13:00 パソコン”と入力し、確定は[Ctrl]+[Enter]で行う。
- 警告が出るので、[OK]をクリックする。
§5.サンプルデータ
「まりふのひと の SkyDrive」よりダウンロードできます。
- ファイル名: Excel演習問題集(Lesson36)カレンダー.xls
- [標準解答]シート
「よくわかる Microsoft Office Excel 演習問題集」のサンプルデータそのものです。 - [改-1]シート
上記の手順で、式を入力した(標準解答集とは、第5〜6週が異なる)直後のものです。 - [改-2]シート
実用性を加味して、予定の入力行を別にした完成品です。 - [改-完成]シート
完成度を上げるため、入力するセル以外は触れないよう([ツール]メニュー ⇒)[保護]したものです。
- [標準解答]シート