Excelを勉強しましょう EnjoyExcel

アイコンの機能や関数の説明、VBA初心者向けの勉強方法について情報掲載しています。関数、VBAともに理解が進むように出来るだけ事例を交えて説明しています。

Excelで簡単な日程表をつくってみる。 月と曜日を用意するの面倒じゃないですか?

f:id:EnjoyExcel:20210626122226p:plain

 

ただの日程表ですがこんな感じのものを作ってみました。

youtu.be

 

仕事やる時って1人にしてもグループにしても日程表って必要ですよね。

 

私は個別に依頼いただいてExcelを教える機会もあるのですが質問いただく際「日程表って関数使ってサクッと出来ませんか?」って言われる方が多いです。

 

皆さん思っている事はだいたい一緒で具体的にはこんな事に困っています。

  • 月毎に末日が違うから気にしないといけない
  • 上記に伴い曜日もセットしないといけない

大きくはこの2つです。

 

2つしかないでしょ??って言われますがやってみるとこれが面倒なんですよね。

 

今回の記事含め全3回で説明をしていきます。

  

では始めましょう。

 

ポイントとして2つ挙がっていた月毎に日数や曜日のことを考えなくても良いようにするためにはどうしたら良いか考えます。

 

最初にアウトプットのイメージを考えましょう。

楽したいので手数や思考を少なくすることを考えると「年月を入力するだけで枠内に日数と曜日が準備出来たら楽なんじゃないか?」と考えました。

 

そんなん出来たら苦労せんけどね。と思うかもしれませんが出来ます。

 

具体的にどうしたら良いか考えましょう。

まずば想いを実際の作業に落とし込まないといけないので作業するうえで問題や分かっている事を書き出します。

 

  1. 曜日は年月毎に違うから法則のようなものはない。7日周期なのは決まり。
  2. 日付は俗に言う「西向く士(さむらい)」以外は31日終わり。
  3. 4年に1回のうるう年を忘れてはいけない。
  4. 1~28日まではどの年月でも絶対に発生する

 

ざっとこのぐらいは気にすることがありそうです。上記を解決するには・・・

 

  1. インデックス関数を使えば日付と曜日を関連付けられそう
  2. IF文で28日以降の表示を準備出来るかも
  3. うるう年は年について計算をする事で乗り切れるかも
  4. 1~28日はデフォルトで良いのでは?

 

だいたいで良いので問題や思った事についてやる事を用意してみてあとは実現可能か試していきます。

 

冒頭で紹介したエクセルです。

f:id:EnjoyExcel:20210423112852p:plain

 

1.インデックス関数を使えば日付と曜日を関連付けられそう

曜日について考えましょう。これについてはまず関数を提示します。

 

セルB8に入力されている関数です。

=IFERROR(INDEX({"日","月","火","水","木","金","土"},WEEKDAY(DATE($B$4,$B$5,$A8))),"")

 

先日紹介したIFERROR使ってます。

enjoyexcel.hatenablog.com

 

見てわかるように関数を何個か合わせて使っています。

一番外枠のIFERROR関数ではインデック関数の結果エラーが出たら空欄にしてと書いています。

f:id:EnjoyExcel:20210423151323p:plain

ではINDEX関数を構成する情報を分解していきましょう。

まずはWEEKDAYとDATE関数。

f:id:EnjoyExcel:20210423151545p:plain 

毎回年月だけを入力する様にしたいのでDATE関数に年月日を直書きせずセル参照にします。

 

年月は毎回同じところを見る為に絶対参照で日だけ変化させたいので列だけ固定にします。

 

行方向に日程を取ることにして式を同じ方向に展開すればセルにある日付をもとに日付のシリアル値を返してくれます。

 

日付のシリアル値?なんだそれ?ってなりませんか?

エクセルの日付は西暦1900年1月1日を1とした通し番号を持っています。

 

日付の入ったセルでマウスを右クリック。セルの書式設定の表示形式を標準にすると日付は今だとおそらく5桁の数値が出てくると思います。これがシリアル値です。

 

次の関数はWEEKDAYです。

 

デフォルトの場合はDATEで指定された日程に対して日曜日だったら1~土曜日だったら7を返してくれる関数です。

 

WEEKDAYの引数である種類を指定する事で曜日によって返す数値を変えることが出来ます。

 f:id:EnjoyExcel:20210423153728p:plain

 

後程説明するインデックスに書く配列と順番を合わせたいのでひとまずデフォルトのまま進めます。(基本日曜日始まりの方が良いと思います)

 

最後にINDEXです。配列を示してから必要な配列番号の情報を指定し値をかえしてもらいます。

今回はWEEKDAY関数で取得された番号の配列にいる文字列を返してもらえる様に書いています。f:id:EnjoyExcel:20210423151441p:plain

先程WEEKDAYを日曜始まりにしています。INDEXの配列も日曜始まりです。

「WEEKDAY関数で戻り値1の時は INDEXの配列1 ”日” を返して」となるわけですね。

 

28日までは必ず日付が入るのでこれでOK。29~31日は月によって日付を取得出来ますが関数がエラーになるときは空欄にしてとIFERROR関数で指示しているので月によって末尾が可変しても曜日は日が入っているところだけ記入されることになります。

 

ちょっと長いので今日はここまでにします。