2014-05-20 02:03:30
エクセルで月間のスケジュール表を作ってみます。もともと時給計算のために作ったものの日付部分だけご紹介します。
年と月を入力すれば自動で月末まで日付と曜日を表示してくれるタイプをを作成します。一度作成しておくと万年カレンダーならぬ万年スケジュールが可能です。(図はexcel2013)
セルA3とセルC4に年と月を入力すれば月末の該当日までとその曜日が表示されるようにします。2月なら28日まで表示し29、30、31は表示しません。大の月、小の月、うるう年に対応します。DATE関数とMONTH関数を使いますので関数の説明です。
DATE関数
日付のシリアル値を返します。
DATE(年,月,日)
=DATE(1900,1,1)は1を返しますが、通常セルの表示形式が自動で日付になり1900/1/1 と表示されます。=DATE(2014,5,19)だったらシリアル値は41778と表示されます。1900/1/1から41778日経っているということですね(厳密には1引く?)。2014の代わりにA3とセル参照すれば2014のことですしC4とすれば上の図では3月ですね。2014年3月1日はDATE関数ではDADATE(A4,C4,1)とする事で表せます。セルA4の値を変えれば今年でも来年でも使えます。また、セルC4の値で何月でも表すことが可能です。ここで次の式はいつを表しているかお考えください。
=DATE(2014,2,29)
2014年はうるう年ではありませんので2月29日はありません。2月末の1日次の日なので2014/3/1になります。月末の辻褄が合わなければエクセルの方でよろしく来月にしてくれます。
MONTH関数
月を1から12で返します。
MONTH(シリアル値)
=MONTH("2014/5/1")は五月ですから5が返ってきます。=MONTH(DATE(2014,5,1))の場合はMONTHの中がDATE関数で2014年5月1日ですからもちろん5が返ります。
では=MONTH(DATE(2014,2,29))とうるう年ではない年の2月の29日を指定すると何月とみなすのでしょうか。DATE関数は月末の辻褄が合わないと自動で調整してくれるのでDATE関数内は2014年の3月1日としてくれます。するとMONTH関数は3月とみなし3を返します。
では、実際についたちから作成していきます。セルA5にセルA3の年とセルC3の月の1日をDATE関数で表示します。=DATE($A$3,$C$3,1)と入力します。
自動で日付の形式で表示されます。
セルB5はセルA2の値をそのまま表示するように=A2と入力します。セルA5もセルB5も3月1日と表示されます。
A列は日だけB列は曜日を表示するようにセルの表示形式を設定します。セルA5からセルA35まではユーザー定義でdとします。
同様にセルB5からセルB35まではユーザー定義で省略された曜日のaaaとします。
セルA6は2日なので上のセルに1足せば1日増えます。=A5+1と入力します。セルB6も=A6として隣の値を参照します。この2つのセルをフィルハンドルで28日までコピーします。
29日30日31日はない月とある月があるので少し工夫します。
セルA33は通常の2月はありませんがうるう年はあります。
=DATE(A3,C3,29)にすればセルA3年セルC3月の29日を日付形式で表示します。セルC3が2月なら29日はありませんので3が1日になります。うるう年なら2月29日になります。この関数の答えに対してMONTH関数で月を取得します。
=MONTH(DATE(A3,C3,29))
セルC3が2ならセルA3年の2月の29日は今月か来月かを知りたいという式になります。3が返ったら2月の29日は来月の3月1日と同じことですよということです。この式の答えとセルC2が同じだったら29日は今月で、違う場合は来月となります。
IF関数でどちらかに場合分けします。
=IF(MONTH(DATE(A3,C3,29))=C3,"今月","来月")
同じだったら今月なのでセルの値はその日付を表示します。同じでなければ来月ですからなにも表示しません。上の式の今月の代わりにDATE(A3,C3,29)を、来月の代わりに""で何も表示しなければ月末処理完成です。
=IF(MONTH(DATE(A3,C3,29))=C3,DATE(A3,C3,29),"")
たった3行ですがコピーするときのためにセル参照は絶対参照を使います。そしてそれぞれ29を30と31に変更しておきます。
セルA33 =IF(MONTH(DATE($A$3,$C$3,29))=$C$3,DATE($A$3,$C$3,29),"")
セルA34 =IF(MONTH(DATE($A$3,$C$3,30))=$C$3,DATE($A$3,$C$3,30),"")
セルA35 =IF(MONTH(DATE($A$3,$C$3,31))=$C$3,DATE($A$3,$C$3,31),"")
と数式を入れてください。これで出来上がりです。年月により月末がきちんと表示されます。
もう一つのパターンは条件付き書式に月の比較を使って来月なら白文字にして見えなくするという方法です。
28日までは同じ手順です。29,30,31も同じ手順で日付を入れてしまいます。
条件付き書式(何かの条件によって書式―見え方を変更する)を設定するセルを選択します。月末29,30,31とその曜日のセルA33からセルB35までを範囲選択します。ホームタブのスタイルの条件付き書式をクリックし新しいルールをクリックします。
新しい書式ルールの数式を選択して、書式設定するセルを決定をクリックします。
次の数式を満たす場合に値を書式設定のボックス以下の式を入力します。
=MONTH($A33)<>$C$3
今6つのセルが選択されていますが、アクティブセル(白抜きで表示されている)はA33です。このセルA33にこの数式が適用されます、残りの5つのセルにもこの式をオートフィルでコピーした数式が当てはまります。セルB33にオートフィルでコピーした場合、横向きにドラッグになるので行番号の数値は各々33と3で変わりません。$aと$cは絶対参照なのでこれも変わりません。したがってセルB33にあてはめられる数式は
=MONTH($A33)<>$C$3
全く同じです。そのまま29日の日付により条件が変わります。
セルA34なら下にドラッグなので数値だけが変わります。$A、$C、$3は絶対参照なので変わりません
=MONTH($A34)<>$C$3
セルA34の30日の日付により条件が変わります。あとは同じ要領で考えてみてください。
<>は等しくないという論理演算子です。
セルC3に入力した月と計算で求まった29,30,31の月が等しくなければ文字が見えないように文字の色を白にします。書式をクリックします。
フォントタブの色を白にします。OKボタンで戻っていきます。
どちらも少し面倒かもしれません。条件付き書式がわかっていれば後の方法が簡単かもしれません。条件付き書式で文字色白で見えなくするのよく使うかもしれませんが、後で見直したとき、数式バーに出てきませんので思い出すのが大変かも。また、見えていないだけで存在しますので、計算とかにセルが使用されたら思わぬことになるかもしれません。
私が何度か作ってみて今のところこの2つが比較的簡単な方法かと思います。もちろんほかの方法もたくさんあるでしょう。一度参考に作成してみてください。