第1話:プロローグ 〜セル結合された深夜の虚無と、#REF!な意識〜
タイトル:異世界転生したけど、スキルが『Excel』だけだった。でもマクロ組んだら魔法より強かった件
第1話:プロローグ 〜セル結合された深夜の虚無と、#REF!な意識〜
カチャ、カチャ、カチャ、ッターン。
乾いたプラスチックがぶつかり合う音が、静まり返ったオフィスに虚しく響いた。
深夜三時四十二分。
東京都港区にある雑居ビル、その五階。株式会社「フロンティア・ソリューションズ」の制作部フロアには、もはや空調の送風音と、俺――工藤聡が叩くキーボードの打鍵音しか存在していなかった。
蛍光灯の白い光が、じりじりと網膜を焼いている気がする。
瞬きをするたびに、まぶたの裏側で砂粒が擦れ合うような不快な摩擦感があった。ドライアイ用の目薬は三時間前に空になった。ゴミ箱に投げ捨てたピンク色の小さなプラスチック容器が、カランと虚しい音を立てたのを今でも鮮明に覚えている。
俺は充血して霞む視界を、強引にピント調整しながら、目の前の二十七インチモニターに映し出された「それ」を睨みつけた。
Microsoft Excel。
緑色のアイコンでおなじみの、表計算ソフト。
現代のビジネスパーソンにとっての武器であり、盾であり、そして時に、魂を縛り付ける鎖でもある代物だ。
画面を埋め尽くしているのは、無機質な数字と文字列の羅列だった。
A列には「商品ID」、B列には「SKUコード」、C列には「仕入先名称」……それがZZ列まで続き、行数は既に六万五千を超えている。
営業部が提出してきた、このクソみたいに巨大なCSVデータ。前任者が残した秘伝のタレのように継ぎ足され、複雑怪奇にスパゲッティ化したVBA(Visual Basic for Applications)のコードが、このデータを読み込むたびに悲鳴を上げているのだ。
「……なんで、全角と半角が混在してんだよ……」
俺の口から漏れたのは、言葉というよりは、肺の中に溜まった澱のような溜息だった。
喉が渇いている。舌が上顎に張り付くような感覚。
デスクの左端に置かれた、飲みかけの缶コーヒーに手を伸ばす。ぬるくなった「微糖」の液体を口に含むと、人工的な甘さと劣化したコーヒー豆の酸味が、荒れた胃壁に染み渡るように落ちていった。不味い。けれど、これが今の俺の生命維持装置の燃料だ。
マウスホイールを回し、14238行目のD列を確認する。
本来なら「2023/10/01」と日付形式で入力されていなければならないセルに、「10月1日頃」という文字列が入力されていた。
このたった一つの、人間の曖昧さを許容した入力ミスのせいで、俺が組んだ集計マクロは『型が一致しません』という無慈悲なエラーウィンドウを吐き出し、処理を中断していたのだ。
俺は眉間に深い皺を寄せながら、ショートカットキーを叩いた。
Ctrl + H。置換ウィンドウがポップアップする。
指先は思考するよりも早く、慣れ親しんだ動きでキーボードの上を滑る。まるでピアニストが愛する楽曲を奏でるように、あるいは外科医がメスを振るうように、俺は淀みなく入力していく。
この会社に入って七年。
二十二歳で新卒入社してから二十九歳になる今日まで、俺がやってきたことの九割は、Excelとの格闘だったと言っても過言ではない。
営業の数字管理、経費精算、在庫リスト、果ては社員の座席表や忘年会の出欠確認まで。この会社ではあらゆる事象が「.xlsx」という拡張子の中に封じ込められていた。そして、それを御せるのは社内で俺ただ一人だった。
「工藤さん、Excel詳しいですよね?」
「工藤ちゃん、このマクロ動かないんだけど見てくれる?」
「悪い工藤、これ明日までに集計頼めるかな。君なら魔法みたいにパパっとできるでしょ?」
魔法。
彼らはそう呼ぶ。
俺が数時間かかる手作業を一瞬で終わらせる関数を組むたびに。
膨大なデータの中から特定の条件だけを抽出してグラフ化するたびに。
彼らは、その裏にある論理構造も、構文のエレガントさも、エラー処理の泥臭い工夫も理解せず、ただ結果だけを見て「魔法」と呼んで片付ける。
ふざけるな。
これは魔法なんかじゃない。論理だ。
正しい入力に対し、正しい処理を行えば、必ず正しい出力が返ってくる。
この世界で唯一、裏切らない絶対的な法則。それが俺にとってのExcelだった。人間関係のような曖昧さも、理不尽な上司の気分による仕様変更も、ここにはない。あるのは0と1、TRUEとFALSEの世界だけだ。
俺は「10月1日頃」を「2023/10/01」に修正し、再びエディタ画面(VBE)を開いた。
黒い背景に色分けされたコードが並ぶ。
Sub DataProcessing_Main()
このプロシージャが、俺の今夜の敵であり、相棒だ。
変数の宣言部分を見直す。
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
無駄のない記述。美しさすら感じるインデント。
配列を使って処理速度を高速化させている。画面更新を止める Application.ScreenUpdating = False も忘れていない。完璧だ。これなら、六万行のデータ処理も三秒とかからないはずだ。
俺は震える指先で、F5キー(実行)の上に人差し指を添えた。
これを押せば、処理が走る。
このデータが整理されれば、明日の朝一の会議資料が完成する。そうすれば、俺は家に帰れる。シャワーを浴びて、泥のように眠れる。
トクン。
不意に、心臓が奇妙な音を立てた。
まるで、胸郭の中で誰かが小さなノックをしたような、そんな違和感。
直後、強烈な圧迫感が胸の中央から広がっていった。
「……あ、れ?」
声が出なかった。空気が漏れる音しかしない。
視界が急激に狭まっていく。
まるでカメラの絞りを極限まで絞ったように、周囲の景色が暗黒に塗りつぶされ、中央にあるモニターの光だけが、やけに鮮烈に輝いて見えた。
セルのグリッド線。
あの薄い灰色の格子模様が、網膜に焼き付いて離れない。
縦と横。行と列。
世界が、格子状に分解されていくような錯覚。
オフィスの天井の模様が、Excelのセルに見える。
散らばった書類の山が、未整理のデータ群に見える。
自分自身の身体さえも、一つのオブジェクトとして認識され始めていた。
――ああ、これはまずい。
思考の片隅で、冷静な自分が警鐘を鳴らしている。
過労だ。睡眠不足だ。カフェインの過剰摂取だ。栄養失調だ。
要因はいくらでも挙げられる。それらが複合して、今、Runtime Error を引き起こそうとしている。
身体が椅子から滑り落ちそうになる。
重力が数倍になったかのように体が重い。
だが、俺の意識はまだ、画面の中のカーソルに固執していた。
まだだ。
まだ、実行していない。
このマクロを走らせなければ、仕事は終わらない。
中途半端な状態で終わらせるなんて、俺のプライドが許さない。
エラーのまま放置されるなんて、我慢ならない。
薄れゆく意識の中で、俺は渾身の力を振り絞り、右手の人差し指に神経を集中させた。
指先が、冷たいキートップに触れている感触だけが、世界との唯一の繋がりだった。
カチッ。
F5キーが押し込まれる、確かな感触。
その瞬間、画面上のカーソルが砂時計マークに変わった。
処理が始まったのだ。
プログレスバーが伸びていく。
青いバーが、左から右へ。
10%……20%……30%……。
俺の視界もまた、そのバーの進行と同期するように白く染まっていった。
心臓の鼓動が、CPUのクロック周波数と同期していく。
ドクン、ドクン、という生々しい拍動が、いつしか電子的なビープ音のような、規則正しいリズムへと変質していく感覚。
(……配列処理、完了……次はピボットテーブルの生成……)
頭の中で、コードが一行ずつ実行されていくのがわかる。
肉体の感覚は消え失せても、論理の構築だけは鮮明に残っていた。
俺はもう、自分自身が工藤聡という人間なのか、それとも module1 というプログラムの一部なのか、区別がつかなくなっていた。
50%……60%……。
身体が床に倒れ込む衝撃があったはずだが、痛みは感じなかった。
ただ、床のカーペットのザラザラとした感触が、頬に伝わってくる。その感触さえも、俺の脳内では「テクスチャデータ:粗さ50、温度18度」といったパラメータとして処理された。
70%……80%……。
誰かの声が聞こえた気がした。
始発で出社してきた同僚だろうか? それとも警備員か?
遠く、水底から聞こえるような不明瞭な音波。
意味のある言語として認識できない。ノイズだ。フィルタリングして除去しなければ。
90%……99%……。
あと少し。
あと少しで、処理が完了する。
完璧なデータが出力される。
そうすれば、全てが整然とする。
カオスな現実が、秩序あるテーブルへと再構築される。
100%。
脳内で、ファンファーレのような完了音が鳴り響いた。
『処理が正常に終了しました』
そんなメッセージボックスが、暗転した視界の中央に浮かび上がったような気がした。
満足感。
圧倒的な達成感と共に、俺の意識は End Sub の記述と共に、プツリと途切れた。
最後に感じたのは、オフィスの床の埃っぽい臭いと、PCの冷却ファンが唸る低い回転音。
そして、なぜか瞼の裏に焼き付いて離れない、無限に広がる緑色のグリッド線の残像だった。
それが、サラリーマン・工藤聡としての、最後の記憶だった。




