この職種でいると、よく他の部署の人からこんな相談を受けたりすることがある。1
他人が作った得体のしれない野良マクロは、こだわりが強い 「秘伝のたれ」 のようなもので一度関わると何か困りごとが起きるたびにこちらのメイン業務をドロドロと塗りつぶしに来るので、たいていは安請け合いせず断るのがいい。2
しかしそれでは学びはないし、困っている人をほっておくのは忍びないと思うかもしれない。
そこで元プログラマ3の事務職4としてマクロを直す越境業務をやってきた自分が社内で越境業務に駆け出した時のやり方を備忘録として書き残そうと思う。
「秘伝のたれ」を手入れする仕事を業務に組み込む
良かれと思って業務の隙間で対応していると、メイン業務に支障が出てしまう。
「やる」と決めたからこそ、持続可能な越境であるための調整が不可欠。
なのでまずは関係者との調整を必ずしよう。
- 上司やチームメンバーに「こういう依頼を受けている」と共有し、対応レベルを決める
- メイン業務が優先で、対応は支障が出ない範囲でやる
- 一時的にメイン業務から離れてがっつり対応する ...など
- 情シスにも一応依頼内容の共有をしておく
- 会社によっては何らかの申請やレビューが必要など、独自のルールがあったりする
- もしかしたら元々彼らがマクロを実装担当していたりで、対応を巻き取ってくれるかもしれない
- 大体は、社内ルールの範囲内でやるならいいよ。ってなることが多い
- 会社によっては何らかの申請やレビューが必要など、独自のルールがあったりする
問題の「ボタン」を押す前に
つい押したくなるけど、すぐに押してはいけない。
ボタンが何の関数を呼んでいるのか、ソースコードを読んだりシートを眺めたりして動作を把握しておく必要がある。
こんなことが起きるかもしれない
- 外部システムを実行
- 外部のAPIを叩き本番サーバーにデータを送りつけているかもしれない
- メールやSlack通知をどこかに飛ばしたりするかもしれない
- ファイルの作成
- 実行のたびに特定のフォルダにデータを生成するかもしれない
- データの破壊的更新
- 履歴を残さず、元の値を上書きして何かの計算結果だけを残すかもしれない
「ソース」と「現場」をデバッグする
「マクロが動かない」という言葉を、そのまま「ソースコードのバグ」だと受け取ってはいけない。
秘伝のたれと化したスプレッドシートにおいて、真実を知っているのはソースコードではなく、 「実際にそのシートを編集している人」 である。
作業手順をヒアリングしてみると、意外な事実が浮かび上がる。
- マクロを実行する前の「手入力データ」がそもそも壊れている
- 前任者が良かれと思って設定した「非表示のロック行」が計算を狂わせている
- 実はマクロの問題ではなく、単なる「関数の参照エラー」だった
実際、自分が経験したケースでは、どれだけコードを読んでも原因がわからず、シートを作業用でコピーして全セルを可視化してようやく「隠された行」の存在に気づいたことがあった。
「誰が、どんな目的や順序で、何の操作をしているのか?」
この現場検証(ヒアリング)をサボると、見当違いな対応をしてしまうので着手前にある程度やっておきたい。
「秘伝のたれ」を醸造する関数たち
マクロのコードを読み解く前に、まずはデータとセット使われることが多い関数たちを理解しておくといい。
① データの「橋渡し」役:VLOOKUP, MATCH, INDEX
スプレッドシートが簡易データベースとして使われている場合、必ず登場する。
- VLOOKUP: 最も一般的ですが、列の追加・削除で参照がズレるという弱点がある
- INDEX & MATCH: 「最強のコンビ」。VLOOKUPよりも柔軟ではあるけど慣れていない人が見ると「何が起きているのか」が分かりにくい
② 「見た目」と「中身」を整える:TEXT, DATEVALUE, SUBSTITUTE
-
TEXT: 「日付をファイル名に使いたい」「数値を3桁区切りの文字列にしたい」という時に登場
- 関数を使ってない場合はセルの設定でされている場合もあるので要チェック
- DATEVALUE: 外部システムから貼り付けた「2023.10.01」のような、スプレッドシートが日付として認識してくれない「ただの文字列」を、計算可能な「日付型」に変換
- SUBSTITUTE 「金額に『円』がついている」「空白が含まれている」といった、「簡易的な正規表現置換」で使われる
-
文字列連結:(
&)で無理やり作られたキー項目などは、バグの温床になりやすいため要注意
③ 「動的な範囲」を定義する:INDIRECT, ARRAYFORMULA
- INDIRECT: 文字列からセル参照を作る「メタ」な関数。強力だがどこを参照しているのか一見して分かりづらくデバッグの難易度が上がる
- ARRAYFORMULA: 1つのセルに書くだけで列全体に適用されるため、これを知らないと「セルの値はあるのに数式が入っていない!」とパニックなりがち
最後に
「エンジニアでしょ?」という言葉を、無茶振りではなく期待として受け止めてみる。
秘伝のたれにまつわる謎を解き明かした先に待っているのは、生きた業務との出会い、部署の垣根を越えた友情。そして小さなプロジェクトをみんなで乗り越えた達成感である。
