「今さら」なんてない

「自分にもできそう」を伝播させるブログ

クローズリストの作り方 失敗談と新たな一手

今回のひらめきラジオのお題は「クローズリストを作ってみる」

本来の趣旨としては「クローズリストを作ってみた結果/感想」だと思うのですが、クローズリスト自体は(不完全ながらも)作り続けているので今回はあえて作り方についてまとめてみました。

失敗談も踏まえながらなので、同じ轍を踏まぬよう、強くてニューゲームできるようなお役立てになれば幸いです。

前提

たすくまユーザーである

実行フェーズに使用するツールによってオープンリストやクローズリストのツールは左右されるかと思います。いったん僕の都合ですが、実行フェーズを「たすくま」を前提に話を始めます。

たすくまユーザー以外の方も「そういうことも考えなきゃなのか」など、何かしら拾えるものはあるかと思いますので流し読みでも読み進めてみてください。


粒度の細かさと実行速度は正比例するタイプである

仕事がバタバタしてきたり朝の時間がしっかり取れないと、だいたいタスクの粒度がざっくり気味になります。

すると実行時に「えーっと...」とフリーズしたり、逆に細かく動線を張り巡らせると、究極奥義たる真価を発揮し、常時トランザムでARSな超高性能な自分が無双乱舞します。

ざっくりの方が良い方は今回ご紹介の手法は不向きなので「こんな面倒なことするやつがいるのかよ」と思ってもらえればいいです。

さて、問題はどのように張り巡らせるかです。時間さえ割けばできるのは当たり前なので、どう省力化していくかです。


スマホ操作できるツールに飲まれたくないタイプである

スマホ対応のツールは数多く存在しますが、閲覧やチェック程度が限度なんですよね。

PCと比べると画面も小さいしキーボードもいちいち呼び出す必要があるし、ショートカットも使えない。

使えなくはないけど使ってる気になるばかりで中身が追いついてこないので基本的には使わないことにしています。(INBOXに投げ込んだり、たすくま実行はします)


これまでの失敗談

todoist→Googleカレンダー→たすくま

todoistはINBOXとしての役割は優秀なのですが、Googleカレンダーを介してたすくまへインポートしても、たすくま側でプロジェクトやリピートタスクの割り当てをするのが面倒になってしまい頓挫してしまいました。


Dynalist→スクリプト→たすくまへ

こちらは以前の記事でも書いたとおり、マロ。さんの転記スクリプトを使った方法です。

DynalistもINBOXや連絡待ちリストとしての機能が優秀で、インポート時にプロジェクトもリピートタスクも割り当てが可能です。(リピートタスクへの応用はスクリプトをいじる必要があります)

が、この方法だと1件1件ポチポチしなきゃなので件数が多いときは面倒になってしまうんですよね...


たすくま直打ち

もはや外部連携を捨てた無頼スタイルです。

たすくまには元々複数タスクの一括追加機能やプロジェクトの一括変更機能があることに加え、音声入力のおかげでタスク名の付与が速いので、たすくま単独でも十分な機動力があります。

加えて、プロジェクトはリピートタスクにしてあるので、リピートタスクのタブから長押しでタスクを生成し、タスク名だけ変更しにいくことも可能です。

が、問題はクローズリスト作成時のシミュレート容易性です。

ほぼスワイプ頼りのところがスマホアプリの限界なのですが、並べ替えが面倒(翌日以降に至っては並べ替え自体不可能)なので、1週間程度の見通しをつけるのも難しいのです...


新たな一手:TaskChute2→たすくま 転記マクロ

TaskChute2については購入したものの、仕事が結局デスク外が大半なのであまり使わずに埃を被らせてしまっていた中、先日拝読したこちらの記事にビビビときました。

タスクシュートのキモはシミュレーションなのに!これではタスクシュートって言わない!シミュレーションの時間を取ってないからかなぁ。もしくはiPhoneだと画面が小さくてシミュレーションしづらい???

これを機に計画フェーズと実行フェーズを分けることを思い付きました。

他のツールだと普通に使い分けているのに、TaskChuteだからと実行までやらなきゃいけないことはないんですよね。

せっかく入力や並べ替え、見積時間の計算などの機能がフル装備されているのでこれを有効活用しないと。そして何より、1週間という単位で俯瞰して疎密のバランスを調整することにもTaskChute2は長けていることが決め手です。


Excel VBAで転記

僕がこの手の脱獄に唯一有効な手段として持ち合わせているのがExcel VBAしかなかったのでこの様な方法を取りましたが、たすくまユーザー仲間の中にpythonを用いたスクレイピングによってtodoistやタスクペディアからたすくま転記プログラムを作っている方がいます。

その域にはまだまだですが、スクレイピングって情報収集以外にもこんな用途があるんですね。

ほぼ余談ですが、本当のプログラマーの応用力というか発想力には本当に驚かされますね。


使い方

非表示行は転記されないようにしてあるため、使い方としては、予定日や曜日列をフィルタがけしてから1日単位などで出力します。(TaskChute2にはフィルタがけショートカットにデフォルトでCtrl+Shift+Alt+kが当てられています)

転記パターンは下表のようにしています。

たすくま TaskChute2
予定日 月日
プロジェクト Mode
タスク名 作業内容 & Project
見積時間 見積M単
タグ タグ(*)
セクション

*タグについてはTaskChute2には本来存在しない概念のため、たすくま用にU列を追加すればタグも使えるようになります。セル内で半角カンマ区切りで複数タグが扱えます。

TaskChute2をお持ちで無い方はこちら


コード

  1. 下記コードを個人用マクロブックにぶち込んでください。
    (TaskChute2はVBEの編集にロックがかけられており、TaskChute2に標準モジュールを追加するなどができないためです。TaskChute2●●●●.xls(●●●●は日付など何でもOK)というブックがアクティブでないとマクロが起動しないようにしたので個人用マクロブックでも誤爆することはありません。)
  2. Const 保存先 = "C:\Users\★★★\"を書き換えてください。
  3. Const url_DB = "https://www.dropbox.com/home/★★★"に、Dropboxのたすくまインポートcsv保存フォルダのurlを入力してください。
    (僕の都合でChromeで開くことにしていますが、他のブラウザの方はOpenChromeの中のREG_KEYShell "" & Path & "\chrome.exe ""の部分を書き換えてください。)
  4. TC2からたすくまインポートcsvを作成するというマクロをショートカットかリボン、クイックアクセスツールバーに登録してください。
Option Explicit

Const 保存先 = "C:\Users\★★★\"
Const url_DB = "https://www.dropbox.com/home/★★★"

Const wb_Name_TC2 = "*TaskChute2*.xls*"
Const ws_Name_TC2 = "メイン"
Const ws_Name_TC2_Setting = "設定"
Const Origin_TC2 = "A8"
Const 保存ファイル名固定部 = "Taskuma_CSV_import"

Dim wb_TC2 As Workbook, ws_TC2 As Worksheet
Dim k As Long
Dim myDic As Object

Enum c_TC2
  □ = 1
  月日
  曜
  節
  No
  Sort
  ★
  Project
  Mode
  作業内容
  見積H単
  見積M単
  実績
  開始
  終了
  節内S
  週次見積Key
  タスク実行前のヒント
  タスク実行後のコメント
  評価
  タグ
End Enum

Enum c_TK
  DueDate = 1
  Schedule
  Section
  Project
  Tag
  TaskName
  Estimated
End Enum

Dim DueDate_ As Variant
Dim Schedule_ As Variant
Dim Section_ As Variant
Dim Project_ As Variant
Dim Tag_ As Variant
Dim TaskName_ As Variant
Dim Estimated_ As Variant

Sub TC2からたすくまインポートcsvを作成する()
  Dim wb_Name_TC2_ As String: wb_Name_TC2_ = TC2であるか確認(wb_Name_TC2)
  If wb_Name_TC2_ = "" Then: Exit Sub
  
  Set wb_TC2 = Workbooks(wb_Name_TC2_)
  wb_TC2.Activate
  Set ws_TC2 = Sheets(ws_Name_TC2)
  

  Call セクション置換_連想配列化
  Call 表示行のみ収集(TC2data範囲(Origin_TC2))
  Call 新規ブックに転記
  
  Call OpenChrome(url_DB)

End Sub

Private Function TC2であるか確認(wb_Name As String) As String
  If ActiveWorkbook.Name Like wb_Name Then
    TC2であるか確認 = ActiveWorkbook.Name
  Else
    TC2であるか確認 = ""
  End If
End Function

Function TC2data範囲(Range_Origin As String) As Range
  Dim r
  Dim c
  With Range(Range_Origin)
    r = .CurrentRegion(.CurrentRegion.Count).Row
    c = .CurrentRegion(.CurrentRegion.Count).Column
  End With
  Set TC2data範囲 = ws_TC2.Range(Range_Origin, Cells(r, c))
End Function


Private Sub 表示行のみ収集(Range_TC As Range)
  Dim Arr As Variant
  Set Arr = Range_TC
  
  ReDim DueDate_(0)
  ReDim Schedule_(0)
  ReDim Section_(0)
  ReDim Project_(0)
  ReDim TaskName_(0)
  ReDim Estimated_(0)
  ReDim Tag_(0)
   DueDate_(0) = "DueDate"
   Schedule_(0) = "Schedule"
   Section_(0) = "Section"
   Project_(0) = "Project"
   TaskName_(0) = "TaskName"
   Estimated_(0) = "Estimated"
   Tag_(0) = "Tag"


  k = 0
  
  Dim R0 As Long, C0 As Long, Scnt As Long
  R0 = Range_TC(1, 1).Row - 1
  C0 = Range_TC(1, 1).Column
  Scnt = Range_TC(Range_TC.Count).Row
  
  Dim i As Long
  For i = 1 To Scnt - R0
    If Rows(i + R0).Hidden = False Then
      k = k + 1
      ReDim Preserve DueDate_(k)
      ReDim Preserve Schedule_(k)
      ReDim Preserve Section_(k)
      ReDim Preserve Project_(k)
      ReDim Preserve TaskName_(k)
      ReDim Preserve Estimated_(k)
      ReDim Preserve Tag_(k)
      
      DueDate_(k) = Arr(i, c_TC2.月日).Value
      Project_(k) = Arr(i, c_TC2.Mode).Value
      TaskName_(k) = Arr(i, c_TC2.作業内容).Value & ":" & _
                     Arr(i, c_TC2.Project).Value
      Estimated_(k) = Arr(i, c_TC2.見積M単).Value
      Tag_(k) = Arr(i, c_TC2.タグ).Value
  
      Section_(k) = セクション置換(Arr(i, c_TC2.).Value)
  
  
    End If
  Next i
  
End Sub

Private Sub セクション置換_連想配列化()
  Dim ws_Setting: Set ws_Setting = Sheets(ws_Name_TC2_Setting)
 
 'Dictionaryオブジェクトの宣言
  Set myDic = CreateObject("Scripting.Dictionary")
  
  'Dictionaryオブジェクトの初期化、要素の追加
  Dim i, section_s, section_e
  For i = 3 To 14
    With ws_Setting
      section_s = Format(.Cells(i, 2), "H")
      section_e = Format(.Cells(i, 3), "H")
      myDic.Add .Cells(i, 1).Value, section_s & "-" & section_e
    End With
  Next

End Sub

Private Function セクション置換(As String) As String

  'Dictionaryオブジェクトの要素の参照
  Dim str As String
  Dim Var
  For Each Var In myDic
    If StrConv(UCase(Var), vbNarrow) = StrConv(UCase(), vbNarrow) Then
      セクション置換 = myDic.Item(Var)
    End If
  Next Var
  
End Function

Private Sub 新規ブックに転記()
  Dim wb_New As Workbook: Set wb_New = Workbooks.Add
  Range("A:A").NumberFormatLocal = "yyyy/m/d"
  Range("B:B").NumberFormatLocal = "hh:mm"
  Range("C:G").NumberFormatLocal = "@"
  Dim i As Long
  For i = 0 To k
    Cells(i + 1, c_TK.DueDate).Value = DueDate_(i)
    Cells(i + 1, c_TK.Schedule).Value = Schedule_(i)
    Cells(i + 1, c_TK.Section).Value = Section_(i)
    Cells(i + 1, c_TK.Project).Value = Project_(i)
    Cells(i + 1, c_TK.TaskName).Value = TaskName_(i)
    Cells(i + 1, c_TK.Estimated).Value = Estimated_(i)
    Cells(i + 1, c_TK.Tag).Value = Tag_(i)
  Next
  
  ' UTF-8形式CSVで保存
    wb_New.SaveAs Filename:= _
      保存先 & 保存ファイル名固定部 & _
        Format(Date, "yyyymmdd") & _
        ".csv" _
      , FileFormat:=xlCSVUTF8, CreateBackup:=False
  
End Sub

Private Sub OpenChrome(ByVal URL As String)
  Dim objWsh As Object
  Dim Path As String
  
  Set objWsh = CreateObject("WScript.Shell")
  Const REG_KEY = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe\Path"
  Path = objWsh.RegRead(REG_KEY)
  Shell "" & Path & "\chrome.exe "" --new-window " & URL, vbNormalFocus
  Set objWsh = Nothing
End Sub

結局、どの面倒を支払うかに終着する

結局、タスクに限らず「管理」というものにおいてキモになってくるのは費用対効果なんですよね。

この面倒を支払うことで、後に待つさらなる面倒を回避できるか

僕にとって、朝の15-30分の支払いに対して、日中のブースト時間で元が取れれば良くて、量的/質的にさらに拍車をかけられる仕組みづくりに投資していっています。

仕組みづくりに躍起になってもそれをペイできなければ意味がありません。一見力業に見えることでも、人や環境によってはそれが最も合理的な場合があるので、人それぞれ自分にあった仕組みづくりをやっていけばいいと思います。

Pythonできたらなーと思うけど、今の僕にはスキル習得にかかる費用の方が大きく見えてしまうためVBAを選択したように。そもそもデスク派ならたすくまよりもTaskChuteを使うべきだったりするように。