【ep3-1】予算ゼロで7拠点のデータを共有せよ!ド素人がAccessとExcelで「野良DB」を作った日の記録

不統一Excel、手作業集計の悪夢

毎月末の夕方が近づくと、私の憂鬱な日々が幕を開ける。全国に散らばる7つの営業拠点から。月間の実績報告をまとめたExcelファイルがメールで次々と送りつけられてくるのだのです。

私に課せられたミッションは。これらを一つの巨大なマスターシートにまとめ上げることだった。最初は単なるコピーアンドペーストの単純作業だと思っていた。その認識は致命的に甘かったのです。

まず、各拠点の担当者は。それぞれ独自の解釈で勝手にExcelのフォーマットを改造してくる。彼らに悪気はない。ただ自分の入力しやすいように最適化しているだけだ。しかし、それが集計側にとってどれほどの悲劇を生むかなど想像もしていありません。

呪われたデータ解読作業

拠点Aは良かれと思って行を追加してレイアウトを完全に破壊し。拠点Bはなぜか売上金額を全角数字で入力してくる。拠点Cに至ってはシート名すら毎月違う名前に変えられていた。集計用のVLOOKUP関数が悲鳴を上げ。画面いっぱいに「#N/A」の文字が増殖したとき。マウスを握る手にじっとりと汗をかき、胃の奥が鉛のように重くなるのを感じたのです。

送られてきたデータはそのままでは絶対に集計できない。本社の人間が一つひとつ目視で確認し、全角半角を揃え、余計な空白を削除し。マクロが読み込める形に整形し直さなければならない。データ集計というより、もはや呪われた古文書の解読作業に近いのです。

次に、この不毛な解読作業だけで、毎月丸2日の時間が容赦なく溶けていく。本来やるべき経理処理や総務の定例業務は完全にストップし。必然的に深夜残業が確定する。静まり返ったオフィスで、カタカタと虚しく響くキーボードの音。手作業による気合と根性の運用は、とうの昔に限界を超えていた。

予算ゼロからのデータベース模索

これ以上の属人的な作業は無理だ。集計作業が完全に崩壊している現状と残業時間の推移をレポートにまとめ。全社的なデータ共有システムの導入を上司に直訴したのです。

しかし、返ってきた言葉は非情なものだった。

一方で、「システム開発を外注する予算なんて、うちの部署には1円もないよ」

会社の業績が厳しいわけではない。ただ、大規模な顧客管理システムの刷新に全予算が投下されており。バックオフィスの業務改善に回す資金が存在しないのだ。さらに悪いことに、社内のIT部門もその大型プロジェクトで火を吹いており。一介の管理部門の業務効率化など見向きもしてくれない。見事なまでに孤立無援の状況に陥ったのです。

システム会社にこっそり相談して提示された最低開発費用の概算(百万円単位)

そのため、外注もできない。社内のエンジニアも助けてくれない。それでも毎月の月末地獄は確実にやってくるのです。

データベースとの出会い、予算と知識の壁

何とかして「全員が同じ画面にデータを入力し。それが自動で一つの場所に貯まる仕組み」を作らなければ、自分が過労で倒れてしまう。必死にネットの海を彷徨い。検索窓に「Excel 共有 同時入力」「手作業 やめたい」と打ち込み続けたのです。

そこで「データベース」という言葉にたどり着く。

しかし、データを一箇所で集中管理し、複数人が同時にアクセスして情報を読み書きする仕組み。理屈は素晴らしい。まさに私が求めているものだった。しかし、それをどうやってこの予算ゼロの環境で実現すればいいのか。Linuxサーバーを立てる知識もなければ。専用のミドルウェアを買う決裁も下りない。目の前にあるのは、支給された平凡なWindowsパソコンだけだったのです。

Officeのみで構築、手作り野良DB

本格的なSQLデータベースなど夢のまた夢である。手元にある武器は。全社員のパソコンに標準インストールされているMicrosoft Officeだけだった。

追い詰められた脳裏に、一つの歪なアイデアが閃くのです。

さらに、社内の誰もがアクセスできる共有ファイルサーバーの奥底に。Accessのデータベースファイル(MDB)をこっそり置く。そして、各拠点の担当者には、見慣れたExcelを入力画面として配るのだのです。

ユーザーがExcelの入力ボタンを押すと。裏側でこっそりファイルサーバーのAccessにデータが飛んでいく。

この仕組みなら、担当者は普段通りExcelのセルに文字を打ち込むだけで済む。新しいWebシステムの操作マニュアルを作って。忙しい拠点担当者に一から使い方を覚えさせる手間も省けるのです。

まず、Excelをただの「入力フォーム(フロントエンド)」として使い。データの保存先である「データベース(バックエンド)」をAccessに分離する。専門用語で言えばクライアント・サーバーモデルの模倣であるのです。

窮地が生んだ野良DB

まさに素人がひねり出した「野良DB」の構想だった。システム部門の人間が見たらセキュリティや保守性の観点から卒倒しそうな設計だが。背に腹は代えられない。誰も助けてくれないなら、自分の手で仕組みを構築するしかなかった。

ここで一度立ち止まって考えてみてください

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

ADO接続地獄からの生還、非エンジニアのVBA

構想は完璧に思えた。しかし、それを実現するための壁は絶望的に高かったのです。

次に、ExcelからAccessのデータベースにアクセスするためには。VBAを使って「ADO接続(ActiveX Data Objects)」という技術を操らなければならない。非エンジニアにとって、それは完全に未知の領域だった。マクロの記録機能でセルをコピペした経験しかない人間にとって。外部ファイルとの通信処理は難易度が高すぎた。

プロバイダ、データソース、レコードセット。聞いたこともない単語が並ぶコード。特に「ConnectionString」と呼ばれる接続文字列は。少しでも記述を間違えると一切動かなくなる凶悪な呪文だったのです。

ネットで拾ったサンプルコードを丸写しして実行ボタンを押した瞬間。「ユーザー定義型は定義されていません」という冷酷なエラーダイアログが出現した。参照設定という概念すら知らなかった私は。コードの一文字一文字が自分を拒絶しているように感じ。目の前が真っ暗になったのです。

エラーまみれの休日、データ追加の喜び

一方で、エラーの原因が自分のタイピングミスなのか、Windowsの環境の違いなのか。それとも根本的な考え方が間違っているのかすら分からない。コードを一行実行するたびに、容赦ないエラーメッセージが画面の中央に居座る。

「Provider=Microsoft.ACE.OLEDB.12.0;」という文字列を何度も打ち直し。カンマとセミコロンの違いやシングルクォーテーションの抜けを探すだけで休日の午後が丸ごと潰れた。コーヒーの空き缶が散乱する机で。ついにレコードが1件Accessに無事追加された瞬間。思わず「おっしゃ!」と大声を上げて立ち上がってしまったのです。

意味も分からずコピペしたコードを、エラーメッセージだけを頼りに継ぎ接ぎしていく。データベースを開き、レコードを追加し、行を閉じる。プロのエンジニアが書くような美しいプログラムとは程遠い、泥臭い力技だ。それでも。Excelから放たれたデータがファイルサーバー上のMDBに吸い込まれる仕組みは。少しずつだが確実に形になっていったのです。

MDB共有の恐怖、覚悟のシステム稼働

そのため、技術的な壁を這うようにして越え、単体でのデータ送信テストは無事に成功した。各拠点に入力用のExcelファイルを配布する準備も整ったのです。

しかし、本格的なリリースを翌日に控えた夜、猛烈な不安が押し寄せてきたのです。

「もし、全国の7拠点がまったく同じタイミングで。一斉に送信ボタンを押したらどうなるのか?」。

しかし、7拠点の担当者が月曜日の朝9時にシステムへ同時アクセスする確率と予測されるトランザクション数(回/分)

データベースの排他制御やトランザクション処理なんて。高度な知識は持ち合わせていない。単にファイルサーバーの片隅に置かれたMDBファイルに。複数のExcelが同時に書き込みに行く構成だのです。

もし書き込みのタイミングが完全に重なってファイルが破損し。過去の全データが吹き飛んだらどう責任を取ればいいのか。想像するだけで背筋が凍る。

野良DB稼働、震える決断

さらに、夜中のベッドの中で「Access 複数人 同時入力 壊れる」とスマホで検索し続けた。技術掲示板の「MDBの共有はすぐ壊れるから絶対にやめとけ」という過去の書き込みを見て。心臓が早鐘のように鳴った。翌朝、配布メールの送信ボタンを押すとき。マウスをクリックする指先が氷のように冷たかったのを今でも鮮明に覚えているのです。

逃げ出したかった。プロジェクトを白紙に戻し、今まで通りの手作業に戻りたかったのです。

しかし、あの古文書を解読するような手動集計の地獄に戻ることはもっと恐ろしかった。不完全でもいい。壊れたらその時直せばいい。ファイルサーバーのバックアップだけは毎時間厳重に取るバッチ処理を仕込み。震える手で野良DBの稼働を社内に宣言した。

手作りDB、勝利と地獄の蓋

まず、テスト稼働の初日。私の抱いていた深い懸念をよそに、システムはあっけなく動いたのです。

ファイルサーバーの奥底に潜むMDBファイルを開くと、拠点Aからも拠点Bからも。綺麗なフォーマットに揃ったデータが次々と吸い込まれていく。全角数字もなければ、勝手に挿入された空白行もない。整然と並んだレコードがそこにあった。

手動で丸2日かかっていた地獄の集計作業が、ボタン一つで完了する。魔法のような光景だった。私が書いた泥臭いVBAのコードが、会社の業務を確かに変えたのだのです。

次に、長年の肩の荷が下りたような安堵感と、自らの手で仕組みを作り上げた達成感。胸の奥に熱いものが込み上げるのを感じた。予算ゼロ、孤立無援の非エンジニアが。見よう見まねで構築した野良DBのささやかな勝利だったのです。

しかし、現実は映画のハッピーエンドのようにはいかありません。

ITの基礎知識がない素人が作ったシステムが。このまま平穏無事に何年も稼働し続けるほど甘くはないのだのです。

地獄の幕開け

一方で、蓄積し続けるデータの肥大化。共有フォルダ特有のネットワーク遅延。そして、開発者の想定を軽々と超えてくるユーザーのイレギュラーな操作のです。

数ヶ月後、この手作りシステムが全く別の次元のトラブルを引き起こし。私をさらなる絶望の淵に突き落とすことになるとは、この時の私は知る由もなかった。

本当の地獄の蓋が開くのは、もう少し先の話であるのです。

関連リンクとチェックリスト

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →