Excel(エクセル)関数の練習問題仕事ですぐ使える!役立つ!Excel(エクセル)関数の使い方・裏技を練習問題で楽しく身につけよう!

無料メルマガ【Excel(エクセル)関数の練習問題】

エクセルの練習問題を出す【練習問題】と、読者様のご質問にお答えする【教えて!エクセル関数】を毎週お送りします。表計算もおっかなびっくりの初心者から、エクセルデータベース作成もサクサク上級者まで!

メールアドレス: Powered Byまぐまぐ

No.44 Excel上級編:月が変わっても日数計算が狂わない方法

出題

ありゃ?
せっかく提出率を出したのに、10月になってから印刷してみると、
何だかおかしなことに…。
▽おかしなことになってる提出率

今回解答した方法は、書類を作成した同じ月の間ならいいのですが、
月が変わってしまうと提出率の数字がおかしなことになってしまいます。

1ヶ月の提出率を出すのに、月が変わってから印刷することも多い
です。月が変わって表示がおかしくなるのは困りますね!

というわけで、月が変わっても提出率が計算できるような方法を
考えてみて下さい。


解答

今回の問題は前回の続きですね♪
使う関数は、IF関数です。
IF関数

前回の解答では、「30日」と今日の「日」を比較して、小さいほうを
使って、提出すべき日数の計算に使っていました。

しかし、この方法には一つ欠点がありました。
「30日」を過ぎて翌月になってしまうと、提出すべき日数の計算が
狂うのです。
翌月になると、提出すべき日数=1ヶ月間の出勤日数となるはずが、
提出すべき日数=今月に入ってからの日数から先月の休みを引き算
したもの になってしまうのです。

そこで今回の出題となったわけですが…
まあ、やってみましょう。

例によって福田さんの「提出すべき日数」欄を変更します。
現在、
「=MIN(DAY(TODAY()),DAY(DATEVALUE(A$1&AE$1)))
                -COUNTIF(B4:AE4,"休")」
と入っていますね。
まず「30日」と今日の「日」を比較して、小さいほうを選び、
その小さいほうの数字から休みの日数を引き算しています。

「30日」と今日の「日」を比較する部分
「MIN(DAY(TODAY()),DAY(DATEVALUE(A$1&AE$1)))」を次のように
入力し直します。
「IF(TODAY()>DATEVALUE(A$1&AE$1),DAY(DATEVALUE(A$1&AE$1)),
DAY(TODAY()))」

今日が表上の月末日よりも後の日付であれば(=翌月に
入っていれば)1ヶ月の日数を使い、そうでない場合は(=翌月
に入っていなければ)、今日の「日」を使うという意味です。
「=IF(TODAY()>DATEVALUE(A$1&AE$1),DAY(DATEVALUE(A$1&AE$1)),
DAY(TODAY()))-COUNTIF(B4:AE4,"休")」となったら、エンターキーを
押してみましょう。

今日このメルマガを見ながらファイルを見ていただくと、「25」と
なるはずです(^^;
来月になって見ても「25」です。

「休」が5日分入力されているので、末日の「30日」から5日を
引き算して、「25」です。

サンプルファイルでは、9月15日の分までしか提出の「○」と休日
の「休」を入力していないので、提出率は32%と低い数字になっています。
一番したの山本さんまでオートフィルすれば、全員分の提出率が出ました^^

無料メルマガ【Excel(エクセル)関数の練習問題】

エクセルの練習問題を出す【練習問題】と、読者様のご質問にお答えする【教えて!エクセル関数】を毎週お送りします。表計算もおっかなびっくりの初心者から、エクセルデータベース作成もサクサク上級者まで!

メールアドレス: まぐまぐ