僕は普段Excelで習慣の記録を付けています。例えば英語の学習記録とか。
でも習慣化のアプリなんかと比べると機能面で物足りなさを感じてまして、その1つが「何日連続で記録できているのか」の表示機能でした。
「連続達成日数を表示してくれる関数」なんてものがExcelにあるわけがないですよね。 。
でも普段の記録と連動して継続日数の最高記録を表示出来たらやっぱり面白そうだ!!
ということでExcelの勉強もかねて試行錯誤してみたところ、 一応形にはなったので、 ここに残しておくことにしました。
Excelでの記録は主に勉強記録として使っているので、「Excelで何かの習慣の記録をしている」という人には特におすすめです。
参考サイト様:最長ノルマ連続達成日数は何日あるの
使用する関数
今回使った関数は次の3つ。
DATEDIF関数は「隠し関数」と呼ばれ、 普通の[関数の挿入]には表示されないらしいです。
だから直接入力しないと使うことができません。
今回のおおまかな流れとしては、
①DATEDIF関数で前回の記録からの日数を調べる
②IF関数で、継続日数を修正
③継続日数のうち最高記録をMAX関数で調べる
というような感じになっています。
手順①:DATEDIF関数で日数の差を求める
僕は普段、 次のようなフォーマットで習慣の記録を付けています。 今回の例は英語学習の記録です。
主な項目は、学習した日付、学習時間、内容の3つです。

dayの部分は、 「ホームタブ」→「数値の書式」より、 「短い日付形式」にしています。
ではまずはじめに、 「継続判定」という項目を設けます。
ここにDATEDIF関数を入れ、「前回実行した日付との差」をDAETDIF関数で求めます。

DATEDIFの書式は次のとおりです。
今回は「前回の記録からの日数」を調べたいので、"D"を使います。
例えば、
E6:=DATEDIF(A5、A6、"d")
→2020年3月15日と3月16日の日数の差は「1日」
手順②:IF関数で連続達成日数を表示する
手順①で「継続判定」に表示されるようになったのは、 「前回の記録から何日が経ったのか」です。
次の日もちゃんと記録できたのなら「1」になります。
ここでIF関数の登場です。 次のように指定します。
=IF(継続判定が1、 前回の継続日数+1、 0)
「継続判定が1ならば、 昨日の継続記録に1を足せ。 そうでなければ、 0にしろ。 」
イメージは、
継続判定が1=昨日の記録から1日→ということは連続で2日できた!→じゃあ昨日の連続記録に1を足せば、 記録が更新されるやん!
つまり、 「昨日との日数差が1日の場合にのみ1を足していけば、 連続日数が分かるよね?」というアイデアです。
継続判定が1以外(前回の記録から1日以上空いてしまった)のときは0にすることで、 また振り出しに戻すことができるというわけです。

例えば、
F7:=IF(E7=1、 F6+1、 0)
「もしE7が1(前回の記録日との差が1日)なら、 昨日の継続日数に1を足せ。 1日以上空いていたら、 連続記録を0の振り出しに戻せ」
手順③:MAX関数で連続最高記録を表示する
連続の最高記録を調べるためには、 「継続日数」の中から最大のものを選べばいいだけですね。
MAX関数を用いれば簡単に数字を出すことができます。

追記
もっといい方法(というかはじめからこうすればよかった)が見つかったので、追記しておきます。
この記事を書いた過去の自分への疑問「なんで継続判定なんて項目をわざわざ作った!!??」
はい、継続判定なんて作らなくても、IF関数に入れてしまえばいいだけの話でしたね。
ということで一応手順を。

こんな感じでIF関数だけで表せました。
気づけて良かったです。だいぶスマートで分かりやすくなりました。
おわりに
このアイデアなら記録内容と一緒に継続日数も分かるので、習慣の管理にとても便利だと思います。
習慣化アプリなんかだと、内容まではさすがに書けませんからね。
プログラミングができなくても、頭をちょっと使えばカスタマイズも自由にできてしまうのがExcelの醍醐味ですね。
最後に、このアイデアの元を考えた人、マジで天才すぎる!!尊敬します!!
コメント