タイダログ

もっと怠けますか? (y/n)

まくろ☆マギカ [前編] 始まりの物語

これは私が VBA と出会う前の話。社会人3年目、25歳の10月のことでした。

Excel 勤怠管理簿

私の職場では勤怠管理を Excel ファイルで行っていました。表の縦方向に日付、横方向に出勤時刻や退勤時刻、在校時間、残業時間を入力するタイプです。

日付 出勤時刻 退勤時刻 在校時間 残業時間
10/1 8:30 20:00 11:30 3:45
10/2 8:25 19:40 11:15 3:30
10/3 8:30 20:20 11:50 4:05
10/4 8:35 21:00 12:25 4:40
... ... ... ... ...
10/30 8:30 20:30 12:00 4:15
10/31 8:25 19:50 11:25 3:40

就職するまでさほど Excel に親しんでこなかった私ですが、どうやらもともとパソコンの操作はそこまで不得手ではなかったようで操作そのものには苦労しませんでした。

周りの先生が敬遠していた VLOOKUP()関数も割とすぐに使えるようになっていましたし、小テストの点数集計用のファイルも、誰に教わらずとも自作していました。

旅のはじまり

そうはいっても、時刻をちまちま入力することには嫌気が差していたのです。毎日毎日「はち、コロン、さん、ぜろ」、「に、ぜろ、コロン、ぜろぜろ」と入力するのは億劫なんですよ。
(テンキーにコロンがあればもう少し楽なんでしょうけどね。そういうテンキーをご存じの方いらっしゃいます?)

「1日2回時刻を入力するなんて、キーを最大10回押すだけじゃないか。それくらいで何言ってんの」
そう思われるかもしれませんが、キーを押す回数が問題じゃないんですよ。何が一番嫌って、面倒なことが面倒なまま残っているという点なんですよ。何で21世紀にもなって「私はこの時間に出勤しました」なんてキーをポチポチ押さなきゃならんのだということなのです。

「もうポチポチはうんざりだ」
このファイルを使い続けて3年目。かくして怠惰を求める旅が始まりました。
「私はもっと楽をしなければならない」

関数での解決を試みる

「要はセルに現在時刻を入れればいいんでしょ? NOW()関数で解決!」
さっそく1日から31日までの出勤時刻と退勤時刻に=NOW()を入れて上書き保存! これで完成!

結果はこちら。

日付 出勤時刻 退勤時刻 在校時間 残業時間
10/1 19:40 19:40 0:00 0:00
10/2 19:40 19:40 0:00 0:00
10/3 19:40 19:40 0:00 0:00
10/4 19:40 19:40 0:00 0:00
... ... ... ... ...
10/30 19:40 19:40 0:00 0:00
10/31 19:40 19:40 0:00 0:00

残業時間ゼロ。やったね。

考えてみればそうでした。NOW()関数は、

  • × 関数をセルに入力した時点の時刻を保持し続ける
  • 〇 そのファイルを開いたり、そのシート上のセルに変更を加えたりする度に、その時点の時刻を表示し直す

という関数なのですね。たとえば朝の 8:30 にファイルを開くと出勤と退勤が 8:30 になって、朝の 8:31 にシートに変更を加えると 8:31 になって、夜の 19:40 に開くと 19:40 になるわけです。

一応、NOW()関数で出た時刻をコピーして値貼り付けすればいいのですが、それ自体が面倒ですし、時刻は5分刻みで入力することになっていたので成形の手間があります。

関数での実現は不可能でした。さてどうしたものか。
後編へ


※ 2021/2/21 年齢を訂正