事務員手帖

ある法律事務所事務員の日常

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

2007年03月11日 02時47分31秒 | excel
事務員さんは,利息計算や勤怠表などをカレンダー形式で作ることがあります。
そこで,私が作る際の関数式をご紹介します。

例えば,A1セルに[3/1]と入力すると,1か月分の日付が自動で表示されるようにする方法です。A列の表示形式を「日付」に設定してください。ここでは,「*2001/3/14」に設定しました。

【基本】
1 A1セルに[3/1]と入力。
2 A2セルに次の数式を入力。
   =A1+1
3 A31までドラッグ(オートフィル)する。

これが基本です。
ただ,この方法は,あまり汎用性がありません。
というのも,4月(小の月)のカレンダーを作る場合,末尾のA31セルに[2007/5/1]と表示されてしまうからです。そこで,少し改良します。

【改良1】
1 A2セルに次の数式を入力して,A31までドラッグ。
   =IF(MONTH(A1+1)>MONTH(A1),"",A1+1)

2 式の意味
「もし,自セル(A2)の「月数」が前セル(A1セル)よりも大きいときは,何も表示しないが,それ以外は前セルに1日足した日を表示する」。
MONTH(A1) ・・・A1セルのシリアル値を月数表示する(上例では「4」になる)
  MONTH(A1+1)・・・A1セルのシリアル値に1を加算したシリアル値を月数表示する(「上例では「4」になる)

こうすると,A31セルが自セルの場合,値は[2007/5/1]で月数は「5」となります。
ところが,前セルのA30の値が「2007/4/30」で月数が「4」であるため,自セルが前セルよりも大きいため,何も表示されません。
これでおkでもいいのですが,A1セルに「2/1」と入力して試してみてください。

どうでした? A30,A31セルがエラー(#VALUE!)となりませんか。
これは【改良1】の数式が,前セルの値がブランクであることを想定していなかったためです。
では改良。
“ISERROR関数”を使う方法もありますが,ここはシンプルに。

【改良2】
1 A2セルに次の数式を入力して,A31までドラッグ。
   =IF(A1="","",IF(MONTH(A1+1)>MONTH(A1),"",A1+1))

2 式の意味
「もし,前セルがブランク(「””」)の場合は自セルもブランク。
それ以外は【改良1】で。」

いい感じですね。(^^)
さて,事務員さんの業務では,必ず月初が1日から始まるとは限りません。
例えばある事件や経理処理が15日締めで翌日起算の場合,3月16日から入力したりします。

では,上のA1セルに[3/16]と入力してみましょう。
4月15日までキレイに表示されました。

今度は[4/16]でどうだ!
・・・皆まで言うなですね(^_^;)

【改良3】
1 A2セルに次の数式を入力して,A31までドラッグ。
   =IF(A1="","",IF(AND(MONTH(A1+1)>MONTH($A$1),DAY(A1+1)>=DAY($A$1)),"",A1+1))

2 式の意味(IF(AND以下)
「もし,前セル(A1)に1日を加算した月数が,[2007/4/16](A1セルの絶対値)の月数よりも大きく,かつ,前セルに1日を加算した日数が[2007/4/16]の日数と等しいか大きい場合は,ブランク。
そうでなければ,前セルに1日を加算した値を表示する」

絶対値は,不動の値。
数式をドラッグしたりコピーしたりすると,自動的にセル番地が変化しますが,それだと困るときがあります。
参照するセル番地をクリックし,「F4」キーを1回押すと,「A1」が「$A$1」に,繰り返し押すと「A$1」「$A1」「A1」と変化します。
順に,「A列不変,1行目不変」「A列可変,1行目不変」「A列不変,1行目可変」「A列可変,1行目可変」です。
「F4」キーを使わず直接入力してもおk!
参照するセル番地(上で言うと起算日のセル)を固定したいときに便利です!

試しに,[2007/4/16]][2007/2/16]][2004/2/16]](2004年=平成16年は閏年)に変えてみてください。
うまくいきましたか?

以上は,今の時点での私の最終形です。
でもまだバグがあるかもしれません
一つ一つはエクセル本に書いてあることでも,実際にニーズに合わせるのは読者側ですもんね。
まさしく「事件は現場で起こっている」ということです。

ではでは。

最新の画像もっと見る