タスク管理Excelにマクロを組み込む(ChatGPTに頼むにも基礎知識は必要)

自分用のタスク管理Excelを運用しています。以下のような機能があります。

  • その日の予定を分単位で見積もると、仕事終了の予定時刻が自動計算される
  • 家事も入れれば、事業割合や就寝予定時刻も求まる
  • 終了時刻を入力すると、実績分データと予定との差異分データが求まる
  • 差異が生じても、アポなど変更できない予定開始時刻を表示したままにできる
  • 各タスクの予定終了時刻が表示できる
  • 差異が生じた場合の、各タスクの実績反映後の終了予定時刻が表示できる
  • 差異を反映した、その日の最後のタスクの終了予定時刻が表示できる
  • タスクの順番の並べ替えや、予定時刻の変更があっても、ショートカットキーでマクロを実行することで、自動計算部分の各種分データ・時刻表示を更新できる
  • 予定どおりできた/できなかったことの反省メモ欄あり
  • ただのExcelシートなので、日々関数や表示する情報を更新しながら利用できる

これらの機能をどのように実装しているのか紹介します。(下記画像はサンプルです)

1行目は専用のデータ行

1日を開始する前に、前日の1行目と2行目を、今日の1行目と2行目にコピー&ペーストして、日付だけ1日勧めます。

日付の入っている1行目(画像だと見出しの次の2行目)だけが、特殊なデータです。仕訳帳でいえば、開始仕訳のような存在。

「終了」の列に、今日の「開始時刻」を入力するだけ。「予定」、「差異」、「実績」は0固定、「開始」、「期限1」、「期限2」は「終了」をそのまま転記するだけです。

1日の始めにやることをリストにするので、2行目までは固定の内容です。

予定を入力すれば終了予定時刻を表示

そのあと、「予定」列にタスクの見込み分データを入れていきます。

すると、1行前の「終了」時刻に「予定」分データを加えたものが、「期限1」に表示されます。

ここで、「日付」+「終了」時刻を足し算することで、「開始」セルに日付データを持たせています。これがあとで月別・日別に集計するときに役立ちます。

合わせて、1行前の「終了」時刻がそのまま今のタスクの「開始」時刻として表示されます。

見込み分データが入れ終わったら、「変更したら、ここで Ctrl+q を押す」のある行をアクティブセルにして、このショートカットキーを設定したマクロを実行。

F列からJ列までの数値は関数で自動計算しており、これが自動的に最終行までオートフィルされ、「期限1」の最終行に、今日の予定時刻が表示されます。

AIの助けでマクロを作るには、Excelの基礎知識が必要

このマクロはChatGPTに聞いて作りました。細かい機能(最後の、最終行に差異を反映した終了予定時刻を表示)だけ、自分で入力です。

Sub AutoFillFromActiveCell()
Dim ws As Worksheet
Dim lastRow As Long
Dim fillRange As Range
Dim sourceRange As Range
Dim activeRow As Long
Dim sumG

' アクティブなシートを設定
Set ws = ActiveSheet

' アクティブセルの行番号を取得
activeRow = ActiveCell.Row

' D列の最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row

' コピー元の範囲 (アクティブセルの行のF列からJ列まで)
Set sourceRange = ws.Range("F" & activeRow & ":J" & activeRow)

' コピー先の範囲 (アクティブセルの行から最終行までの範囲)
Set fillRange = ws.Range("F" & activeRow & ":J" & lastRow)

' オートフィル実行
sourceRange.AutoFill Destination:=fillRange

' G列の合計値を取得
sumG = Application.WorksheetFunction.Sum(ws.Range("G" & activeRow & ":G" & lastRow))

' J列の最終行にG列の合計値とI列の最終行の値を合計して表示
ws.Cells(lastRow, "J").Value = ws.Range("I" & lastRow).Value + sumG / 1440

End Sub

最後の表示コマンド以外の自動計算は、すべてExcelの関数を使っており、マクロでは計算していません。

関数を最終行までオートフィルすることをマクロで実行しています。

この「オートフィル」というExcel用語を知っていれば、ChatGPTに適切な指示が出せるのですが、知らなければAIに適切なコードを吐き出させることができません。

最初は具体的な行数を指示していましたが、あとから、アクティブセルの行数を取得すれば、任意の行から実行できると思いついて、次のように指示しました。

Excelの関数でも、アクティブセルの行数や列数を取得するものがあるので、それと同じようなことをマクロで行いました。

これも、Excelでは行数や列数そのものをデータとして利用できるということ、アクティブセルという用語を知っていなければ、指示が出せません。

ChatGPTにマクロを作ってもらえるとしても、人間にExcelの基礎知識が必要なのです。

分データと日付とを操作する関数の内容

「実績」は、1行前の終了時刻と、いまのタスクの終了時刻の差として計算します。

時刻データに 1440(60分×24時間の意)をかけると、分に変換できます。

「差異」は、予定分データと実績分データとの差として計算します。IF文は、予定分データが入力されていない状態では作動しないようにするためのものです。

「開始」は、予定通りだった場合の1行前の終了予定時刻「期限1」をそのまま持ってきています。

「期限1」は、1行前の「期限1」に、いまのタスクの予定分データを足したものです。

「期限2」は、1行前の「終了」に、いまのタスクの予定分データを足したもので、差異を反映した現時点の、いまのタスクの終了予定時刻となります。

分データを1440で割ることで、時刻データに変換できます。

また、まだ実際の「終了」時刻を入力していない場合は、何も表示しません。これにより、J列の最後の行が、いま実行しているタスクを予定通りの時間実行した場合の、終了予定時刻となります。

最終行の期限2に、つねに現時点の終了予定時刻を表示させておくと便利

さきほどの現時点の終了予定時刻+「差異」分データの合計+今日の最後のタスクの「予定」分データを足すと、差異を反映した最新の終了予定時刻が計算できます。

これはマクロで計算しており、オートフィル結果を上書きするようにしています。

いまのタスクの終了時刻と、今日の終了時刻を両方J列に表示しておくと便利なので、そうしています。

タスク管理データを蓄積しておくと、集計・分析も可能に

このようなデータを蓄積していくと、あとで大分類ごとの所要分データを、ピボットテーブルで分析することができます。

  • 今月は営業していないな。来月は時間に占める割合を50%以上を目標にしよう
  • この仕事の時間、料金の割にかかりすぎているな。料金を見直そう

といったような、行動・判断につながる情報が収集できるのです。

お金の収支でも行動を変えられますが、時間の使い方でも行動に変化を起こせます。

習慣が続かないという方でも、タスク管理ができるようになれば、続くようになります。

今日のはじめて

ハイスコアガールDASH 6巻
LINE公式アカウント開設