SharePoint移行が招いたVBAパニック

朝一番に鳴り響く内線電話。受話器を取ると、営業部の担当者が慌てた声で「マクロが動かない」と叫んでいた。原因は明らかだった。昨日。全社のデータがオンプレミスのファイルサーバーからSharePointへと完全移行されたのだ。情報システム部門は「データの移行は無事に完了した」と全社メールを流していた。しかし、現場の業務を支えていた数百のExcel VBAが参照していたのは。旧ファイルサーバーの絶対パスです。
月曜の朝9時、自分の部署だけで20件以上のマクロエラー報告が殺到した。VBAのエディタを開くと。黄色くハイライトされた「Workbooks.Open “\\fileserver\share\data.xlsx”」の行。ファイルが存在しないという無慈悲な実行時エラー1004のダイアログが画面を埋め尽くす。冷や汗でマウスが滑り、胃が重く沈み込んでいく感覚を今でも鮮明に覚えている。
VBAとSharePoint URL、業務停止
まず、VBAは、Web上のURLを直接処理するのが極めて苦手な言語構造を持っている。SharePointのURLは「https://」から始まるWebの世界の住所だ。従来の「\\fileserver」というWindowsネットワークの住所しか理解できないVBAにとって、ファイルは突如として異次元へ消え去ったも同然だった。
現場はパニックに陥り、業務は完全に停止。手作業でのデータ集計を余儀なくされた社員たちの不満は、一気に高まっていた。
VBAマクロの3大エラー原因

障害の波に飲み込まれそうになる中、急いでマクロの改修に取り掛かる。しかし、闇雲にコードを書き換える行為は傷口を広げるだけだ。エラー画面を一つひとつ確認していくと。発生している不具合は大きく3つのパターンに分類できることが判明した。
SharePoint移行とVBAの3つの壁
一つ目はパスの完全な不一致によるエラー。最も頻発する事象であり、前述した通りVBAが「https://」から始まるSharePointのドキュメントライブラリの階層を解釈できないメカニズムに起因する。
二つ目は、ActiveXコントロールやLibrary参照に関わる環境依存のエラー。SharePoint上から直接Excelファイルを開こうとした際、ブラウザの保護ビューや一時ファイルの扱いが旧ファイルサーバーとは異なり、マクロの裏側で動いている外部ライブラリの読み込みがブロックされてしまう。
三つ目は権限とセッションの壁。SharePointはAzure ADによる高度なアクセス制御を行っている。VBAのコード自体に問題がなくても、マクロを実行する瞬間に認証トークンを渡す仕組みが存在しないため、サーバー側から無情にもアクセスを拒否されてしまうのです。
次に、全社で稼働していたVBAマクロ300個超のうち。SharePoint移行によって即日停止したものは実に8割以上に達した。どれが原因かを見極めずにパスの文字列だけをいじり回すと。本来問題のなかった参照設定まで壊してしまう危険性がある。直面しているエラーダイアログのメッセージを冷静に読み解くステップを踏まなければならありません。
OneDrive同期パス 共有利用の落とし穴

業務を再開させるため、即効性のある応急処置を探った。SharePointのファイルを扱う最も手軽な方法は。PCのローカル環境にOneDriveアプリを使って同期することです。
同期を設定すると。クラウド上のファイルが「C:\Users\[氏名]\OneDrive – 会社名\」というローカルのファイルシステム上に仮想的に配置される。VBAから見れば、単なるCドライブ内のファイルと変わらない。既存のコードの「\\fileserver」部分をこのローカルパスに置換するだけで。驚くほどあっさりとマクロは息を吹き返す。ファイルを開くことも、保存することも、全くエラーを出さずに完了する。一見すると完璧な解決策に思えた。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。
環境依存パスによる共有マクロ失敗
一方で、歓喜して同期パスに書き換えたマクロを部署の共有フォルダに置き。「これで動きます」とチャットで周知した。しかし5分後、「パスが見つかりませんって出るんだけど」という返信が相次ぐ。よく考えれば当然だった。パスの中に含まれる「氏名」は社員ごとに異なる。自分のPCで動くマクロは、隣の席の同僚のPCでは絶対に動かないのだ。穴があったら入りたかった。
この手法は、自分一人だけが使うマクロであれば有効な手段になり得る。複数人で共有するツールに適用した場合。コード内に「ユーザー名を取得してパスを動的に組み立てる」という余計な処理を追加しなければならず。かえってメンテナンスの難易度を跳ね上げる結果を招く。
SharePointドライブでマクロ運用、再接続の壁

属人性を排除しつつ、全員の環境でマクロを動かすための現実的な妥協案。それが。SharePointのドキュメントライブラリをネットワークドライブとしてWindowsに認識させる方法です。
そのため、SharePointは裏側でWebDAVというプロトコルをサポートしている。これを利用すると。クラウド上のURLを「Z:\」や「S:\」といった従来のドライブレターに割り当てることが可能になる。情報システム部門と掛け合い。グループポリシーを使って全社員のPCに「SharePointの特定サイトをZドライブとしてマウントする」という設定を一括適用してもらった。
Zドライブ化:運用効率と再起動の壁
マウント設定の展開からVBAコードのZドライブ一括置換完了までかかったのは。実働で丸2日ほどだった。これなら、VBAのコードに手を加えるのは一回で済む。すべてのファイルパスを「Z:\share\data.xlsx」のように書き換えるだけで。旧ファイルサーバー時代と全く同じ感覚でマクロを運用できる。社員一人ひとりの氏名によるパスの差異を吸収し。権限エラーもWebDAVのセッションが処理してくれる。だが、この方法にも脆さが潜んでいる。PCを再起動するたびにネットワークドライブの接続が切断され。赤いバツ印がつく現象が頻発するのだ。その都度、エクスプローラーからZドライブをダブルクリックして認証を通さなければ。マクロは再び「パスが存在しません」と泣き言を言い始める。
VBA卒業、PythonでSharePoint自動化
パネル/python-sharepoint-api-vscode.png
しかし、ネットワークドライブの再接続を毎日手動で行う運用は。業務効率化ツールとしては本末転倒である。Microsoftがセキュリティを強化するたびにWebDAV接続の仕様が変わり。いつかこの暫定策も完全に塞がれる日が来るだろう。古い技術の延命に見切りをつけ、現代のアプローチへと舵を切る決断を下した。VBAからの卒業です。
Pythonには「office365-rest-python-client」という強力なライブラリが存在する。SharePointのAPIを直接叩き。クラウド上のファイルをパスの概念にとらわれずシームレスに操作する仕組みだ。ブラウザの挙動やローカルのドライブマウントに依存しないため。ファイルが見つからないというエラーは構造上発生しなくなる。
Pythonによる自動化、レガシー脱却の好機
移行には壁もあった。非エンジニアにとって、APIの認証情報を取得するためのアプリ登録や。Pythonの環境構築は未知の領域だ。エラー文を見ても何が起きているのか分からず、途方に暮れる瞬間は何度も訪れる。体系的な学習環境さえあれば、この壁は確実に乗り越えられる。もし独学での行き詰まりを感じるなら、プロの知見を借りるのが最も確実な近道になる。業務の自動化に直結するPythonスキルを身につけたいのであれば。__SAMURAI_URL__のような実践的なスクールで基礎からAPI連携までを学ぶのが効率的だ。より高度な開発環境の構築やエラー対応のノウハウが必要なら。__LEVTECH_URL__で専門的な知識に触れることも大きな助けになる。
Python自動化でシステム恐怖からの解放、好機到来
さらに、Pythonスクリプトを初めてサーバー上で定期実行した日の夜。毎日夕方5時に起きていた「Zドライブへの接続が切れました」というVBAからの悲鳴がピタリと止んだ。翌朝出社すると、無人の状態でSharePointからデータを取得し。集計済みのファイルがアップロードされていた。技術を現代化することで。システムに振り回される恐怖から完全に解放された瞬間だった。
SharePoint移行によるマクロの全滅は、決して単なるシステム障害ではない。長年放置されてきたレガシーコードを手放し。より堅牢でスケーラブルな自動化環境へとステップアップするための。またとない好機なのです。
関連リンクとチェックリスト
著者はこうして解決の糸口を見つけた
著者も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にしてみてください。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

