見出し画像

[EXCEL]基本の関数 MONTH関数 日付から月を取り出す(月別集計向け)

【まとめ】
=MONTH(日付セル) で、日付から月を取り出す。

MONTH()のカッコ内に日付の入っているセルを指定する。
カッコ内に日付そのものを記載しても計算できるが、非推奨。

★注意★
日付セルが空欄だと「1」となってしまう。

これを避けるには、以下とする(一例)。
=IF(日付セル="","",MONTH(日付セル))
これで、日付セルが空欄なら月セルも空欄になる。



【説明】
データに日付を入れることは多々あります。
申請日、許可日、登録日・・・
あるいは、事故や火事、何かの事象が発生した日など。
そういったデータから、月別の状況を集計したい場合があります(月別の発生状況や繁閑を調べる等)。

そんな時は、日付から「月」を取り出します。
方法は、【まとめ】のとおり、
=MONTH(日付セル)
Microsoftサポートの説明はこちら

月の取り出し方は、以上でおしまい、
といいたいところですが、注意すべき点があります。

【注意1】日付は計算式に入れない

MONTH関数の中に日付を入れても、月を取り出すことはできます。

しかし、MONTH関数に限らず、数値や日付を計算式に直接入れてはいけません。これ、基本中の基本。
なぜなら、入れるのも変えるのが面倒だから。
そして、変え忘れによるミスも起きるから。
MONTH関数も日付が入ったセルを入れます。
MONTH関数に日付を直接入れてはいけません。

【注意2】日付セルが空欄だと「1」月になってしまう

これも【まとめ】のとおりですが、こちらの方が問題です。
日付セルが空欄だと、なぜか「1」になってしまいます。
日付が空欄=すべて1月扱い。これは困ります。
データとしては失格。
とんでもない間違い集計表を作ってしまいます(危うい経験あり)。

これを避ける方法の一つが、以下の計算式です。
=IF(日付セル="","",MONTH(日付セル))
意味「日付セルが空白(””)なら、結果は空白(””)とし、そうでなければ(=日付が入っていれば)、日付から月を抜き出して表示する」

私はこちらも使います。
=IF(日付セル>0,MONTH(日付セル),"")
意味「日付セルが0より大きい(=日付セルが空欄ではない)場合には、日付から月を取り出し、そうではない(=日付セルが空欄の場合)は、空白(””)を表示する」
*「0」を年月日表示すると 1900/1/0 または M33.1.0 となりますが、これは存在しない日付です。

結果は同じですが、前者の方が意味的には分かりやすいでしょう。

空欄セルを「1」にしない方法は色々あると思いますので、上記は例ということで。

しかし、MONTH関数の説明サイトは多々ありますが、この「日付セルが空欄だと1になってしまう」ことに言及したものは、ほとんどないようです。
「MONTH関数」で検索しても上位では見つかりませんでした。
(実務やってんかいな?という気もしてしまいます。失礼。)

このように月を抜き出せば、月別の件数集計が簡単にできます。
ピボットテーブルでも出来ますが、COUNTIFS関数の利用をお勧めします(月別の何かの数の計ならSUMIFS関数)。

COUNTIFS関数を使った月別集計の方法(簡易版)

各データから月を抜き出したら、COUNTIFS関数を使って、月別の集計表に件数を出します。

重要なのは表頭の月は「〇月」のように「月」を付けない、つまり、
月の数字だけにすることです(4月なら「4」だけ。「4月」としない)。

元データが以下の場合(「データ」というシート名と想定)、

空白セルが1になってしまうのを回避する方法は
上の説明の後者を用いています

集計表と計算式は以下のようになります(一例)

B3セルの計算式 =COUNTIFS(データ!$D:$D,B$2) は、
上の「データ」シートのD列(月が入っている列)に、集計表の表頭のB2セルの「4」と同じ月がいくつあるかを数える、を意味します。

COUNTIF関数は使わない。SUMIF関数も使わない。

この計算式の条件は一つだけなので、COUNTIF関数も使えますが、敢えて複数条件を設定できるCOUNTIFS関数を使っています(Sの有無に注意)。
詳細は別記事にするつもりですが、
単一条件でもCOUNTIF関数を使ってはいけません(Sなし)。
単一条件でもCOUNTIFS関数を使います(Sあり)。

SUMIF関数も同様に使ってはいけません。常にSUMIFS関数を使います。
単一条件でも複数条件でも使える~IFS関数を使った方が当然効率的です。
わざわざ2つの関数を覚える必要はありません。
~IF関数と~IFS関数とで記述方式が違うものもあるので(SUMIF/SUMIFS関数)、両方覚えるのは、むしろ頭の混乱を招き、非効率です。

エクセル本でもWEBでも、あるいは動画でも、~IF関数を使って説明しているものを見ると「なぜ、わざわざ・・・」と疑問に感じます。
誤解を恐れずに言えば(動画で流行りのフレーズ?)、~IF関数で説明しているものは「実務ではあまり役に立たない」と感じています。
(同じく、いまだにVLOOKUP関数を使っているものも。)

また、~IF/~IFS関数だけではありませんが、わざわざ検索対象範囲として行を指定して説明しているエクセル本やWEB、動画も散見します。
 上の例なら、
=COUNTIFS(データ!$D:$D,B$2) で済むところを、
=COUNTIFS(データ!$D2:$D11,B$2)としている例です。

検索列の行は選択しない

検索対象は列全体で指定します。
列のアルファベットをクリックすれば、簡単に列指定できます。
わざわざ、行を指定する必要はありません。
むしろ、マイナスです。
理由は4つ(詳細は別記事にします)。
①大きな表では範囲指定するだけでも手間(表の最終行まで移動が必要)。
②行範囲を間違えると正しく計算できない。
③データが追加された場合、検索対象から漏れるおそれがある(テーブルにしていればいいのでしょうけれど、テーブルは非推奨派なので)。
④複数条件(範囲)の場合、行範囲を間違うと計算式がエラーになるが、エラー理由が分かりづらい。

行は指定せず、列のみサクッと指定する方が簡単です。

「月」は「セルの書式設定」で表示する

集計表の表頭の月は「〇月」と表示したい場合もあります。
そんなとき、「4月」などと手入力してはだめです。
「月」は「セルの書式設定」で表示させます(「月」を手入力しない。)。
「セルの書式設定」は ctrl+1 です。 

ユーザー設定で「種類」欄に「#月」と入れます。
「#”月”」と入れなくても構いません。
自動で「” ”」が付きます。

同様に表頭の月に「月」表示をします。
これにより、各データのD列の「月」と集計表の表頭の月との突合による集計が可能になります。

データ

集計表

B8セルは、B7セルを参照していますが、
B7セルの「4月」は、上の数式バーを見ると、
「4」であることが分かります。
そのため、集計が可能になります

逆に、表頭を「4月」と入力してしまうと、この集計ができません。
「4月」と入れると文字列となって、「データ」シートのD列との突合ができないのです。

表頭の「4月」は、
数式バーを見ると「4月」と入力されていることが分かります。
データにのD列には「4月」はないので、
「0」となっています。
(4~7月のみ、0を表示する形式にしていま

データを更新すれば集計表が出来上がる

このように日付から「月」を取り出すことにより、月別集計が簡単にできるようになります。
実はこれ、非常に重要なところです。
ピンと来た方も多いでしょう。
データを更新(追加・修正・削除)していくだけで集計表ができるのです。
集計の手間削減と正確性の向上に大きく影響します。
いちいち手計算したり、ピボットテーブルを使って集計してから、表に落とし込む、という作業が不要になります。

この方法が、私が目指す「集計と作表」のあるべき姿の一つです。
詳細はいずれ書きます。

日付からは、年も月も日も曜日も取り出せる

日付からは「月」だけでなく、「年」も「日」も「曜日」も取り出せます。
=YEAR(日付セル) で「年」が
=DAY(日付セル) で「日」が取り出せます。
YEAR関数では「和暦」の取り出し方が重要ですが、これはまた改めて。
曜日はWEEKDAYで取り出せますが、こちらも、また別項目で。

以上、参考になれば幸いです。

(作業メモ 2日・3h)


いいなと思ったら応援しよう!