「今さら」なんてない

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

RPAはプログラミングの入口として使うのがよさげ?

RPA、RPAと見聞きするようになってから久しく、一周回って若干下火感を覚えてきてからようやく先日、RPAを用いた業務効率化の発表を拝聴しました。

たった1例なのでRPAを全否定することはできませんが、少しガッカリした、というのが正直な感想です。

RPAという言葉すら知らなかったころ、ExcelVBAに手を出す前に使っていたHiMacroExというフリーソフトの動きととても似ていたからです。



無駄に洗練された無駄のない無駄な動き

一見、ページやカーソル、ボタンなど超高速で切り替えたり操作しているように見えるのですが、その動きは、無駄に洗練された無駄のない無駄な動きなんですよね。

僕も経験があるのですが、退社時に回し始めて翌朝出社したら終わっている、という長回しのものを作ったとして、途中で処理速度が追いつかなくなってきて、空打ちや誤った転記先に転記するなどの誤動作が発生していました。

相手の応答を確認できるまで待つなどの処理を入れても、処理が追いつかなくなる程重くなっているのですから効率化の観点から言うと怪しいです。


実行中はPC1台まるごと拘束される

長回しがダメなので細切れにする方法を取るとします。

が、

  • 回している間は他の作業ができなくなること
  • 終わったら次のグループに切り替えるためにまた手を取られること

などのストレスに遭います。

結局、先に挙げた「無駄に洗練された無駄のない無駄な動き」をなくす(グラフィック描画をやめてバックグラウンドで処理に専念させる)方法を欲するようになるんですよね。


RPAはプログラミングの入口

冒頭でガッカリしたと切り捨てるような表現をしましたが、RPAを使わないとできない範囲のことはありますし、ノンプログラマーへの導入ハードルの低さなどを鑑みるとRPAは魅力的に映ります。

僕自身、プログラミングなんてきちんとやったことがありませんでしたが、HiMacroExからExcelでのマクロの記録と進み、記録と再生では飽き足らなくなってVBAを自分で書くようになっていきました。

「もっと●●したい」

この欲求を掻き立てるきっかけとして機能すれば、それはそれでいいのかな、と思うようになりました。


モチベートしてくれるのは遊びか必要性

子供向けには遊びの中できっかけを得るのがいいと思いますが、特に大人になるにつれて、必要に駆られないとモチベートされにくくなってきますよね。

そういう意味でも、RPAは業務効率化という必要性に駆られる内容のため、入口としてのモチベーション確保には期待できます。

で、飽き足らなくなったらガッツリ別のモノにハマりましょう!

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

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

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

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

前提

たすくまユーザーである

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

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


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

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

すると実行時に「えーっと...」とフリーズしたり、逆に細かく動線を張り巡らせると、究極奥義たる真価を発揮し、常時トランザムで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を使うべきだったりするように。

同じ同じ詐欺

ある製品の部品を
別の製品に流用するとか
亜種を作るとか
量産のある時期のロットのもので不良品が出るとか

そんなとき、
仕様を問うと
「同じなんですけどね」
と言い張る方がいます。

それは

等々、
どこまでが同じで
どこが違うのか


流用の場合に怖いのは、
その部品単品や実績品では問題がなかったことが
流量先の別の製品との組み合わせが悪い場合です。


とにかく
プロパティを細分化したり
分断する癖をつけておかないと
騙されます。


「同じ」
「普通」

これらの言葉のもつ
変な安心感の様な魔力には
気をつけていきたいですね。

ひらめきラジオお題 今の自分に一番必要なタスク管理メソッドは?

最近、考え方などの抽象的なものからタスク管理メソッド関連の具体的なお題が増えてきたひらめきラジオですが、今回は数あるメソッドの中から今の自分に一番必要なものについて考える、というものです。

かなり私的な内容になりましたが、個人的にはこういった私的なレベルでのタスク管理論の記事はもっと増えてほしいと思っているので敢えて日記的に書き殴りました。



5つのタスク管理メソッド

今回の選択肢について超簡単にまとめます。

詳しくはひらめきラジオ放送分やGoogle先生に聞いて下さい。

GTD

オープンリスト

気になることをすべて書き出し、脳内メモリを開放する

実行フェーズについての具体的な手法については論じられていない。

7つの習慣

重要度と緊急度で区分けてやるべきことを整理する

タスク状態管理や実行管理ではなく、人生単位でやるべき指針を立てる上流思想(タスク発生管理)に位置する

イドさん命名(だと認識しています)のタスク発生管理についてはこちら

ポモドーロ

インスタントやる気ブースター

25分集中して5分休むを繰り返して
4ポモドーロで30分以上休むだけの
極めて単純なルールで集中力を引き出す

タスクシュート

クローズドリスト

時間帯と実行順のコンテキストを体現したツール

記録からシミュレーションに繋げるため、タスクごとに適切な粒度で見積時間を設定できる点がポモドーロの上位互換版と言えるし、面倒でもある変態向け仕様とも言える。

マニャーナの法則

クローズドリストの徹底版
「明日やる」
「今日はやらない」


(概ね)既にできていること

  • 効率化
  • やる気のブーストがけ
  • Howにあたる部分

至らない部分や時期もありつつも、これらはタスクシュート(たすくま)で概ねできていると認識しています。


今必要なこと

  • 人生や仕事において俯瞰して効果的に成果を挙げること
  • そのネタを選定すること
  • Why,Whatにあたる部分

ここは最近本当に課題に感じていて、徒労感で終わりたくないし、でもやるべきことに迷って色々手を出してしまっている状態です。

ミッションステートメントも立案しては何か違うなーと思ってはまた立案し、を何度か繰り返しながら宙ぶらりん状態です。

人生単位だと難しいので、まずは仕事でのタスク発性管理を課題としています。結局、仕事でもスケジュール立てるのはいいけど実行しなかったり予定変更になったりと全然守れてないんですよね。

それは結局「何が最優先事項か」の分別がついていない、という事なんですよね...というか、職場のミッションと個人のミッションの不一致感やアピール方法に紛糾していることも大きな壁になっています。


Next Action

職場と個人間のミッション差について触れましたが、今の仕事のミッションは「何をすべきか」を突き詰めたり旗を振ったりすることですが、個人のミッションは恒久的で具体的なネタを想定していました。

ここは仕事に合わせて一歩引いてみて、「タスク発生管理」というフレームワークをミッションに掲げてみたいと思います。

やるべきことが見つかったらまた旗を取り替えれば良いや。


まとめ

タスクの実行/状態管理から発生管理まで各メソッドのおさらいと、その中で自分ができていることとできていないことを整理しました。

結果として、自分のミッションと職場のミッションの不一致感や課題を明確に言語化できました。

ブログを書いていくという作業は実はGTD的に機能していることもわかりました。なので稚拙でも書き出し続けてみようと思います。

自分の能力以上の成果を挙げる方法

専門外のことですら大きな成果を挙げる人がいます。

何かやりたいことがあるけど尻込みしている方へ、何か鼓舞するものになればと思います。

質問力

専門外だから
「わからない」
「関わらない」
「専門家に任せる」

これを

専門外だから
「聞く」
「関わりに行く」
「専門家に任せる」

に変えるんです。

製造業だとわかりやすいのですが、
サプライヤーに任せる部分は任せますよね。

集約力

細かな部分は任せた方がいいのですが、
背景やまとめ方の部分は依頼主の腕の見せ所です。

根気強さ

意思疎通を取るのはお互いに結構エネルギーを使います。
コミュニケーションの円滑化と根気強さでやりきります。

できると信じる気持ち

長々と当たり前のことを書いているだけじゃないか、
と思われるかもしれませんが、
意外とできていないものです。

ですが、
先日の記事でも述べたように、
「できるはず」だと信じて調べたり聞いたりすれば
できないことはないんです。

刺さった妻の格言
「世の中、できないことはない」
を添えてまとめさせていただきます。

最後までお読みいただきありがとうございました。

時間はコストかリターンか

子供ができると自分の時間がガクッと減りますよね。

最近、ある方からこんな相談がありました。
「娘をだっこしたままなので仕事できません。抱っこしてるとき皆さんどうしてますか?ポッドキャスト聴いたりを昨日はじめてみました」

回答を考える中で自分自身を振り返ってみたところ、時間の捉え方が変わっていることに気がついたのでまとめてみました。

僕の回答:他に何もしない

「僕はあえて何もしない、ですかね...」

最初は僕も散歩の時とかpodcastとかラジオを聞きながらやっていましたが、色々あって純粋に子供と向き合う時間に変えました。


何もしないことで得られる効果

何もしないということで明らかな効果を得られたのは散歩ができるようになってきてからですね。

ただぼーっとしたり、
空や道路や風景を眺めたり、
草木や鳥や虫を観察したり、
風や車の音を耳を傾けたりすることで
脳や心がリセットされる感覚が芽生え始めました。


それまで時間をほとんどコストとしてしか見てこなかった僕にとって、この境地は大きなパラダイムシフトとなりました。


「子供との時間」というリターンに加えて、 「自分のリセット」という副産物も得ることができました。

さらに散歩の道中で良いアイデアが得られます。


何もしようとしないだけで、3つも得るものが増えました!


寝てくれない時期はひたすら向き合って観察、試行するゲームに興じる

とはいえ、散歩などの余裕のある時間帯ならそれが期待できますが、寝かしつけや食事、遊びなどのバタバタしたりイライラする時間帯ではなかなかそうはいきません。

でもやることは同じです。

  • 子供が今何をしようとしていて(欲していて)
  • どこで躓いているのか
  • どんなアクションを繋げていったら寝てくれるか
  • 逆にNGアクションは何か

等をひたすら考えながら抱っこしていた時期もありました。

下手に並行作業するとどっちつかずになって、お互いに(もはや一家総出で)ストレスが溜まるばかりなのでシングルタスクで真っ向勝負してました。(横で妻のアドバイスを仰ぎつつ)

そうすると少しずつパターンが掴めてきたり、子供も自分やこちらのパターンを掴めてくるようになる等、良い流れが得られるようになっていきました。


まとめ

  • 時間さえ捉え方次第
  • 目の前のシングルタスクに集中することでこそ、余裕や幸福感は得られる

ということをお伝えしたいが為にこんなにも長文になってしまいました。

子育てに限らず仕事でも、やることが増えてきて余裕がなくなってきたらこの事を思い出して1球1球全力投球で臨みたいと思います。

COUNTIFS関数を使って階段表を作成する

f:id:yoshino-ya:20190704122456p:plain:w500

階段表?というのでしょうか?正式名称を存じ上げないのですが、ある製品の生産ロットを縦軸に、クレーム発生時期を横軸にしたクレーム発生管理表を作成する機会があったのですが、なんと他の方が作られた見本を貰うと、この表の各要素が手入力されていたのです...

「現象別に作り直せ」とか
元のデータに修正や追加が発生したら...
など考えると正気の沙汰ではありません。

この程度のことは関数組んで瞬殺すべきなので、もしこの手の表を手入力されている方がいらっしゃったらこれで瞬殺してもらえたらと思います。



データはテーブルにまとめる

列挙データはとりあえずテーブル化して名前を付けます。

とにかくデータの収集とまとめは別工程で考えてください。まずは収集です。

事実であるデータは変更の要請はほぼありませんが、報告資料の表現としての味付けについては、用途やタイミング、上司の気分次第で一変しますので、資料の変更容易性は確保しておきましょう。


表を構成する関数

メイン:COUNTIFS

A1を左上角として、そのセルに集計したい現象名を入れる形にし、こんな感じでCOUNTIFS関数を入れていきます。

=COUNTIFS(まとめテーブル[現象],COUNTIFS!$A$1,まとめテーブル[生産月],COUNTIFS!$B3,まとめテーブル[処理月],COUNTIFS!C$2)

テーブルにしておくと、このように関数内にテーブル名や列名がリンクされて可読性がグッと上がるのです。だからテーブル化しておくのが良いのです。

さらにテーブルだとデータ範囲の伸縮にも自動対応されるのでメンテ不要です。


ピボットテーブルではなく関数な理由

COUNTIFS関数は複数条件に合致するものを数えてくれる便利屋さんです。

ピボットテーブルでも似たようなことは簡単にできますが、ピボットテーブルだと合致するものがないところは0と表示されずに行、列ごとなくなるので階段表が作成できませんし、

もっと言うと1つのクレーム案件に対して現象が複数混在しているパターンに対応できません。

COUNTIFS関数で集計する前提であれば、元のテーブルの現象列に複数の現象名を記載すればいいだけです。カンマ区切りでもスペース区切りでも、検索文字列が含まれていさえいればいいんです。

ピボットテーブルは、覚え立ての頃は「すげー!超便利!」と感動したものですが、応用が効かせづらいのが難点です。


小計:SUM

ただのSUM関数でできるので説明は割愛しますが、生産月ごと、処理月ごとの小計まで出せると分析っぽくなります。

小計列や行に対してスパークラインやグラフを使って視覚的に拡張するのも良いでしょう。


条件付き書式

ワークシート関数だけでも使えるには使えるのですが視覚的にもっと見やすくするために着色します。

こちらも頂いた表は手塗りされていました。 行や列を拡張したら手塗りし直しなんて勘弁です。


値が入らない範囲を黒で塗りつぶす

条件付き書式>数式にして =$B3>C$2 と入力します。

すると表の左下半分が黒塗りされます。 生産される前にはクレーム発生しませんもんね。


カラースケール

一目でいつが多いか見てとれる方が良いので、条件付き書式ついでにカラースケールも使います。

0件のところを着色したくないので最小を白,クレームは多いほど悪いことなので最大を赤にしてみます。売り上げや販売数など良いことなら青でもいいかもしれません。


表を複製する場合

1つ表を作ったら、表を丸ごとコピペだけで済みません(もう少し上手いやり方があるのかもしれませんが)

  1. 関数
    =COUNTIFS(まとめテーブル[現象],COUNTIFS!$A$1,まとめテーブル[生産年月],COUNTIFS!$B3,まとめテーブル[処理年月],COUNTIFS!C$2)
  2. 条件付き書式
    =$B3>C$2

青文字のところは変更が必要です。


さいごに:「ただ頑張るだけ」はしない癖をつけよう

いかがでしたか?

あえて詳しく説明しませんでしたが、「こんなやり方もあるのか」程度に知っているだけで無駄な手作業がなくなることはこれだけではありません。

新しい知識を試しながらよりもスピード勝負でどうしても力技でやる方が適していることもありますが、少しでも面倒くさいと思ったら調べましょう。

自分が苦労していたり課題に感じていることは、だいたい他の誰かが苦労していたり解決策がネット上にあります。

ググれるようになっておきましょう。


また、今回はCOUNTIFSを取り扱いましたが、SUMIFSやAVERAGEIFSもあるんじゃないか?といった派生案も思いつくような癖をつけておきましょう。

例えば今回はクレーム件数についての表にしましたが、被害金額ベースならSUMIFSになるなど、求められる形に合わせて自在に表現できるような応用力を身に付けておきましょう。