作った人がいないExcelマクロの引き継ぎ方|処理を書き起こしてから移し先を決め、旧マクロと並べて確かめる
作った人がいないExcelマクロを、止めずに引き継ぐ手順を順番に説明します。止まったら何が止まるかを書き出し、ブックを複製して動かさずに読み、生成AIで処理を日本語の仕様に起こして使う人と確かめる。移し先を業務ごとに選び、旧マクロと同じデータで出力を突き合わせてから切り替えます。
目次 クリックで開く
この記事の要点
- 作った人がいないマクロは、書き直す前に、何を読み込み、何を計算し、どこに何を書き出すかを日本語の仕様に書き起こす。コードを読む作業は生成AIに任せられるが、前後の手作業や例外の扱いはコードに書かれていないので、使っている人と確かめる。
- 移し先は業務ごとに、入力はExcelのまま処理だけ移す、業務アプリにする、残して守る、から選ぶ。インターネットから来たファイルのマクロの既定のブロック、64ビット版のOffice、新しいOutlook、VBScriptの廃止、Excel for the webでVBAが動かないことを、判断の材料に入れる。
- 切り替える前に、旧マクロと新しい処理を同じデータで動かし、件数と合計、セルごとの値、ほかの出力を突き合わせる。過去の月の入力で例外の多い月を試したうえで、実際の締めを少なくとも1回並べ、差がすべて説明できてから切り替える。
作った人がいないマクロを、止めずに引き継ぐ順番
判断の材料:インターネットから来たファイルのマクロの既定のブロック、64ビット版のOffice、新しいOutlook、VBScriptの廃止、Excel for the web
引き継ぎ資料に残す:台帳、仕様、見本のデータと正しい結果、突き合わせの記録、動かし方
当社の整理
作った人がいないExcelマクロを引き継ぎ、属人化から脱却するときは、いきなり書き直したり、別のツールに移したりしないほうが安全です。先に、そのマクロが何を読み込み、どんな計算や判定をして、どこに何を書き出しているかを日本語の仕様に書き起こし、実際に使っている人と確かめます。移し先を決めるのはそのあとで、業務ごとに「入力はExcelのまま処理だけ移す」「業務アプリにする」「残して守る」から選びます。切り替える前には、旧マクロと新しい処理を同じデータで動かし、結果の差がすべて説明できるまで並べて確かめます。
コードを読んで処理を日本語にする作業は、生成AIに任せられるようになりました。ただ、コードに書かれているのは処理だけです。マクロの前後で人がしている貼り付けや手直し、例外のときの扱い、なぜその条件なのかはコードからは分からないので、AIの書き起こしはそのまま仕様にせず、使っている人に確かめます。
後回しにしにくい理由もあります。マクロは、中身に手を入れなくても止まることがあるからです。メールで受け取ったブックのマクロは既定でブロックされ、64ビット版のOfficeでは古い書き方のコードが動かないことがあり、新しいOutlook for WindowsはVBAにもOutlookのオブジェクト モデルにも対応していません。この記事では、Aurant Technologiesが基幹システムや業務ツールの移行で進めている「棚卸し、移し先の選択、新旧の並行稼働」の順番を、Excelのマクロの引き継ぎに当てはめて説明します。
そのマクロが止まったら何が止まるかを、先に書き出す
最初にするのは、コードを開くことではなく、そのマクロが止まったときに何が止まるかを書き出すことです。どの業務の、いつの作業に使っていて、出力を誰が何に使っているのか。止まったときに手作業で代わりができるのか、できるならどれだけ時間がかかるのか。締め日や提出日のように、ずらせない期限があるのか。これが分かると、どのマクロから手を付けるかと、新旧を並べて確かめる時期をどこに置くかが決まります。
マクロが1本だけとは限りません。集計のボタンの裏で、別のブックを開いて転記するマクロや、特定の人のパソコンにだけあるマクロが動いていることがあります。見つけたマクロは、台帳に1本ずつ書いていきます。
| 台帳の列 | 書くこと |
|---|---|
| ブックと置き場所 | ファイル名と、保存しているフォルダーやサイト。同じブックの写しがほかにもあるか |
| マクロ名と動かし方 | ボタン、ショートカットキー、ブックを開いたとき、セルを変えたとき、決まった時刻 |
| 業務と時期 | 毎月の売上の集計、月初の請求書づくり、など。締め日や提出日 |
| 動かす人と、出力を使う人 | 実行している人と、結果を受け取っている部署や取引先 |
| 止まったときの代わり | 手作業で代われるか、かかる時間、ずらせない期限 |
| つながっているもの | 読み込むファイル、書き出す先、送るメール、書き換えるほかのブック |
マクロが置かれている場所と、動き出すきっかけ
マクロは、標準モジュールにだけ書かれているわけではありません。ブックを開いたときに動くWorkbook_Open(Workbook.Open イベント)や、セルの値を変えたときに動くWorksheet_Change(Worksheet.Change イベント)は、誰もボタンを押さなくても動きます。Application.OnTimeを使うと、決まった時刻にマクロを動かすこともできます(Application.OnTime メソッド)。
ブックの外にも置き場所があります。個人用マクロ ブック(Personal.xlsb)は、Excelを開くたびに裏で開く見えないブックで、そのパソコンのXLSTARTというフォルダーに保存されます(単一のブックにすべてのマクロを作成して保存する)。XLStartフォルダーに置いたブックはExcelの起動時に開き、Auto_Openのような自動で動くマクロが入っていれば、そのとき動きます(Excel の起動方法をカスタマイズする)。
マクロを探す場所と、動き出すきっかけ
ブックの中
モジュールと、ThisWorkbook・シートのコード
- 標準モジュール
- Workbook_Open:ブックを開いたときに動く
- Worksheet_Change:セルの値を変えたときに動く(再計算では動かない)
- フォーム(入力画面)
そのパソコンの中
個人用マクロ ブック(Personal.xlsb)
- Excelを開くたびに裏で開く、見えないブック
- XLSTARTフォルダーに保存される
- 作った人のパソコンを初期化する前に写しを取る
Excelの起動時
XLStartフォルダーのブックとアドイン
- XLStartフォルダーのブックは起動時に開き、Auto_Openなどの自動で動くマクロが動く
- アドイン(.xlam)として配っているマクロ
時刻やほかからの呼び出し
ボタン以外のきっかけ
- Application.OnTimeで、決まった時刻に動くマクロ
- Windowsのタスク スケジューラなどで、決まった時刻にブックを開いていないか
- ほかのブックのマクロから呼ばれていないか
出典:Microsoft Learn Workbook.Open イベント・Worksheet.Change イベント・Application.OnTime メソッド、Microsoft サポート 単一のブックにすべてのマクロを作成して保存する・Excel の起動方法をカスタマイズする。探す順番の整理は当社
作った人がすでに退職していて、パソコンが初期化されていると、個人用マクロ ブックにしかなかったマクロは戻せません。異動や退職が決まった段階なら、パソコンを片付ける前にXLSTARTフォルダーの中身を写しておくよう、情報システムの担当に頼んでおきます。
ブックを複製して、マクロを動かさずに読む
中身を確かめるために、まずマクロを動かしてみたくなりますが、本番のブックで動かすのは避けます。マクロは、ほかのファイルを上書きしたり、メールを送ったり、別のブックの数字を書き換えたりすることがあり、何をするかは読むまで分からないからです。読むだけなら、マクロを有効にする必要はありません。Microsoftのサポート情報も、ファイルを表示・編集するためにマクロを有効にする必要はないとしています(Microsoft 365 ファイルでマクロを有効または無効にする)。
複製したブックを、マクロを動かさずに読む
プロジェクトにパスワードがかかって見られないときは、作った人か、作った会社に当たる
出典:Microsoft サポート Microsoft 365 ファイルでマクロを有効または無効にする・信頼できる場所を追加、削除、または変更する・Excel のキーボード ショートカット、Microsoft Learn [ファイルのエクスポート]ダイアログ ボックス・[プロジェクトのプロパティ]ダイアログ ボックス
複製は、信頼できる場所に指定されていないフォルダーに置きます。信頼できる場所にあるファイルは一部のセキュリティの確認を飛ばして開くため(Microsoft Office で信頼できる場所を追加、削除、または変更する)、ブックを開いたときに動くマクロがそのまま動いてしまいます。XLStartフォルダーも信頼できる場所の一覧に入っているので、複製の置き場所には使いません。開く前には、[ファイル]→[オプション]→[セキュリティ センター]→[セキュリティ センターの設定]→[マクロの設定]が、既定の「通知を表示して VBA マクロを無効にする」のままかも確かめます。ここが「VBA マクロを有効にする」になっているパソコンでは、確認なしでマクロが動きます。
開いたときにセキュリティの警告のバーが出ても、[コンテンツの有効化]は押しません。押すとそのブックは信頼済みのドキュメントになり、マクロが動くようになります。コードは、Alt+F11(または[開発]タブの[Visual Basic])で開くVisual Basic Editor(Excel のキーボード ショートカット)で読み、[ファイル]→[ファイルのエクスポート]でモジュールごとにファイルへ書き出します。既定の拡張子は、標準モジュールが .bas、クラス モジュールが .cls、フォームが .frm です([ファイルのエクスポート]ダイアログ ボックス)。ThisWorkbookと各シートに書かれたコードも、忘れずに書き出すか写しておきます。モジュールとクラスのファイルは文字のファイルなので、生成AIに渡すときにも、変更の履歴を残すときにも扱いやすくなります。
コードと一緒に、周りの情報も控えます。[ツール]→[参照設定]でチェックの入っているライブラリ、シート名と列の見出し、名前の定義、ボタンに登録されているマクロ名です。参照しているライブラリが新しいパソコンで見つからないと、それが解決されるまでコードは動きません(プロジェクトまたはライブラリが見つかりません)。
VBAのプロジェクトにパスワードがかかっていて、中身が見えないこともあります。[プロジェクトのプロパティ]で「表示するプロジェクトをロックする」が設定されていると、パスワードなしではコードを表示も編集もできません([プロジェクトのプロパティ]ダイアログ ボックス)。パスワードは、作った人か、作った会社に当たって確かめます。見られないまま移すしかない場合は、入力と出力の組をいくつも集めて処理を推し量ることになるので、後で説明する新旧を並べる期間を長めに取ります。
生成AIにVBAを読ませて、処理を日本語に書き起こす
書き出したコードを生成AIに読ませると、処理の流れを日本語で説明させることができます。社内にVBAを読める人がいなくても、ここまでは進められます。使うのは、社内で業務に使ってよいと決められている生成AIのサービスにします。
渡すものと、渡す前に消すもの
渡すのは、書き出したすべてのモジュール(ThisWorkbookとシートのコードを含む)、シート名と列の見出しの一覧、参照設定に入っているライブラリの名前、それに個人名や取引先名を置き換えた見本の数行です。コードそのものにも、データベースにつなぐためのパスワードやサーバー名、共有フォルダーのパス、取引先の名前が書かれていることがあります。パスワードは消し、サーバー名やパスは「共有フォルダーの月次フォルダー」のような言い方に置き換えます。置き換えても、どこを読み、どこに書いているかという形は残るので、書き起こしには差し支えありません。
モジュールが多いときは、一度に全部を渡すより、マクロ1本と、そこから呼び出しているプロシージャをまとめて渡すほうが、説明の抜けに気づきやすくなります。
書き起こしてもらう形を決めておく
自由に説明させると、読みやすい文章は返ってきても、抜けがあったときに気づけません。項目を先に決めて、その形で書かせます。項目は、動かし方、入力、処理の順、出力、例外、外部参照の6つです。
書き起こしの型(マクロ1本につき1枚)
項目1動かし方
どのボタン・どのきっかけで動くか。動かす前に開いておくブックとシート
注意:シートを名指ししていない操作は、そのとき開いているシートを読み書きする
項目2入力
読むファイル・シート・セルの範囲。何行目から、どの列に何が入っている前提か
注意:列の意味は、コードからは推測になる。見出しと見本で確かめる
項目3処理の順
並べ替え・集計・計算・条件の分かれ目を、処理の順に番号を付けて
注意:端数の丸め方(VBAのRound関数か、ワークシートのRound関数か)も書く
項目4出力
書き込むシートとセル、作るファイルの名前と場所、印刷、送るメール
注意:上書きか追記か。前の結果を消してから書くか
項目5例外
データが0件、空欄がある、シートやファイルが無い、ファイルが開けないときにどうなるか
注意:On Error Resume Next があると、エラーの起きた行を飛ばして先へ進む
項目6外部参照
ほかのブック、フォルダー、データベース、Outlook、.vbs、参照設定のライブラリ、Declare文
注意:後の節のOfficeとWindowsの変化(Outlook、VBScript、Declare文)に当たるかを、ここで見る
当社の整理。注意の挙動は Microsoft Learn Application.Range プロパティ・On Error ステートメント・Round 関数による
頼み方の例
生成AIへの頼み方(例)
次のVBAは、Excelのブック「(ブック名)」に入っているマクロです。VBAを読めない担当者が引き継ぐための仕様書を、日本語で書いてください。
・マクロ(プロシージャ)ごとに、動かし方、入力、処理の順、出力、例外、外部参照の6項目に分けて書く
・それぞれの記述に、根拠にしたプロシージャ名と行を添える
・コードから確かに言えることと、推測したこと(列の意味など)を分けて書く
・シートを名指ししていない操作、On Error の使い方、端数の丸め、ほかのファイルやアプリの操作があれば、漏らさず挙げる
・コードだけでは分からず、使っている人に確かめるべきことを、最後に質問の一覧にする
(ここに、書き出したモジュール、シート名と列の見出しの一覧、参照設定のライブラリ名を貼る)
返ってきた書き起こしは、根拠として挙がった行を実際に開いて、書かれているとおりかを確かめます。VBAを書けなくても、「このシートのこの列を読む」「この条件のときだけ書き込む」といった対応は、説明と行を見比べれば追えます。
書き起こしで見落としやすいVBAの挙動
次の4つは、結果を大きく変えるのにコードの上では目立たないので、コードを検索して、書き起こしに入っているかを確かめます。
- シートを名指ししていない
Range。オブジェクト修飾子を付けずに使うと、アクティブなシートの範囲を指します(Application.Range プロパティ)。同じマクロでも、どのシートを開いた状態で動かすかで、読み書きする場所が変わります。 On Error Resume Next。実行時のエラーが起きても、その次の行から処理を続けます。On Errorが書かれていなければ、実行時のエラーはメッセージを出して止まります(On Error ステートメント)。旧マクロが黙って飛ばしていた行は、新しい処理では止まる原因になり、その逆も起きます。- 端数の丸め。VBAの
Round関数は「銀行家の丸め」と呼ばれる丸め方をし、ワークシートのRound関数と結果が変わることがあります。Microsoftの説明には、0.12345を小数第4位に丸めると、VBAのRound関数は0.1234、ワークシートのRound関数は0.1235を返す例が載っています(Round 関数)。 - ボタン以外のきっかけ。
Workbook_OpenやWorksheet_Changeはボタンを押さなくても動きます。Worksheet_Changeは、再計算でセルの値が変わったときには動きません(前掲のWorksheet.Change イベント)。
書き起こした仕様を、使っている人と確かめる
コードから分かるのは、マクロが何をするかまでです。使っている人がマクロの前後で何をしているか、出力のどこを見て何を直しているか、なぜその条件なのかは、コードには書かれていません。書き起こした仕様は、使っている人と一緒に読み、足りないところを埋めます。
コードから分かること、使っている人に聞かないと分からないこと
コードから分かること
読み書きするシート・セル・ファイル
計算と、条件の分かれ目
エラーが起きたときの動き
操作しているほかのアプリ(Outlookなど)
使っている人に聞かないと分からないこと
マクロの前後の手作業(貼り付け、並べ替え、手直し)
出力の使い道と、見て確かめている箇所
例外が起きたときに、人がしていること
もう使っていない処理や出力
その条件にしている理由
当社の整理
確かめるときは、次の締めの作業に隣で立ち会い、画面を見ながら仕様の項目に「そのとおり」「違う」「分からない」の印を付けていきます。聞き取りだけだと、本人が意識せずにしている手順が抜けるからです。「分からない」が残った項目は、後で新旧を並べるときに、特に注意して比べる箇所になります。
確かめる途中で、今のマクロの結果に誤りが見つかることもあります。たとえば、使っている人が毎月決まった行を手で直している、という形で見つかります。見つけた誤りは、その場で直さずに仕様に書いておきます。新しい処理で直すのか、今の結果に合わせるのかは、移し先を決めるときにまとめて決めます。先に直してしまうと、後で旧マクロと新しい処理を並べたときに、差の理由が分からなくなります。
移し先を決める前に、Excelの側で起きている変化を確かめる
移し先を選ぶ前に、今のマクロがこの先も今の置き場所で動き続けられるかを確かめます。コードに手を入れていなくても、OfficeとWindowsの側の変化でマクロが止まることがあるからです。当てはまるものがあれば、移し先の条件に入れます。
このマクロは、OfficeとWindowsの変化の影響を受けるか
メールの添付やブラウザーのダウンロードで受け取ったブックで動かしている
Windows版のOfficeでは、インターネットから来たファイルのマクロは既定でブロックされる
コードにDeclare文(Windowsの機能の呼び出し)がある
Office 2019とMicrosoft 365は既定で64ビット版。PtrSafeと変数の型の書き換えが要る
Outlookを動かして、メールを作ったり送ったりしている
新しいOutlook for Windowsは、VBAマクロとOutlookのオブジェクト モデルに対応していない
.vbs を呼び出している、VBScriptの正規表現を使っている
WindowsのVBScriptは段階的に廃止される。VBAからの .vbs の呼び出しはサポートされなくなる
ブラウザー版のExcelで使いたい、人がいなくても決まった時刻に動かしたい
VBAはExcel for the webでは動かず、Power Automateのコネクタも無い
出典:Microsoft Learn インターネットからのマクロは、Office で既定でブロックされます・64 ビット Visual Basic for Applications の概要・Office スクリプトと VBA マクロの違い、Microsoft サポート 新しい Outlook と従来の Outlook の機能の比較・Excel for the web で VBA マクロを操作する、Microsoft 365 Developer Blog Prepare your VBA projects for VBScript deprecation in Windows
インターネットから来たファイルのマクロは、既定でブロックされる
Microsoftは、インターネットから取得したファイルのマクロを既定でブロックするよう、Windows版のOfficeの動作を変えました。メールの添付やブラウザーでダウンロードしたファイルが対象で、開くと「セキュリティ リスク」のバナーが出て、[コンテンツの有効化]のボタンは出ません。Excelでは、最新チャネルで2022年7月に配信が始まり、半期エンタープライズ チャネルでも2023年1月に入っています。Mac版のOfficeとOffice on the webは対象外です(インターネットからのマクロは、Office で既定でブロックされます)。
引き継ぎで効いてくるのは、ブックの受け渡し方です。前の担当者からメールの添付で受け取ったブックや、OneDriveやSharePointからブラウザーでダウンロードしたブックは、この対象になることがあります。同じ説明によると、ネットワーク共有をIPアドレスで開いている場合にもブロックされることがあり、反対にOneDriveやSharePointのファイルを[デスクトップ アプリで開く]で開いた場合は対象になりません。個々のファイルはプロパティの[ブロック解除]で外せますが、毎月の業務で使うブックなら、置き場所と開き方を情報システムの担当と決めておきます。信頼できる場所に置けばブロックされなくなる代わりに、そこに置いたファイルのマクロは確認なしで動くので、置ける人を絞ります。
64ビット版のOfficeでは、古いDeclare文が動かないことがある
Office 2010・2013・2016では32ビット版が既定で入りましたが、Office 2019とMicrosoft 365からは既定が64ビット版です。Windowsの機能を呼び出すDeclare文を含む古いコードは、64ビット版に合わせて書き換えていないとエラーになることがあります。64ビット版で動かすには、すべてのDeclare文にPtrSafeを付け、ポインターやハンドルを受け渡す変数の型をLongPtrなどに直す必要があり、PtrSafeを付けるだけでは足りません(64 ビット Visual Basic for Applications の概要)。パソコンを入れ替えてOfficeが64ビット版になったとたんに止まる、という止まり方をするので、Declare文があるマクロは、入れ替えの前に新しいパソコンで試しておきます。
新しいOutlookでは、ExcelからOutlookを操作できない
ExcelのマクロからOutlookを動かして、集計の結果をメールで送っている場合は、Outlookの切り替えに注意します。Microsoftの機能比較(2026年9月23日更新)では、新しいOutlook for Windowsは、VBAマクロ、COMアドイン、Outlookのオブジェクト モデルのどれにも対応していません(新しい Outlook と従来の Outlook の機能の比較)。Excelのマクロがオブジェクト モデルを通してOutlookを操作する仕組みは、従来のOutlookが使えることが前提になります。メールを送る処理は、移し先を決めるときに、ほかの処理と分けて考えます。Microsoftのチュートリアルには、Power Automateのフローでスプレッドシートのデータをもとにメールを送る例もあります(Power Automate を使用した Office スクリプトの実行)。
WindowsのVBScriptが段階的に廃止される
Microsoftは2024年5月に、WindowsのVBScriptを段階的に廃止すると発表しました。2025年9月のMicrosoft 365開発者ブログによると、VBScriptは2026年か2027年ごろに既定で無効になり、その先のWindowsからは取り除かれる予定です。VBAへの影響は二つあり、VBAから .vbs のスクリプトを呼び出すことはサポートされなくなり、正規表現のためにVBScriptのライブラリ(VBScript.RegExp)を参照しているコードは、Officeを対応したバージョンに上げないと動かなくなります。Microsoft 365のバージョン2508以降では、正規表現のクラスがVBAに最初から入っています(Prepare your VBA projects for VBScript deprecation in Windows)。書き出したコードで「VBScript」と「.vbs」を検索すれば、当てはまるかどうかが分かります。
VBAはExcel for the webでは動かず、Officeスクリプトとは届く範囲が違う
VBAのマクロは、Excel for the web(ブラウザー版のExcel)では作成も実行も編集もできません。マクロを含むブックを開いて編集することはでき、マクロはブックに残ります(Excel for the web で VBA マクロを操作する)。ブラウザーで開いて使いたい、人がパソコンの前にいなくても決まった時刻に動かしたい、という業務なら、VBAのままでは応えられません。
Microsoftが、ブラウザー版のExcelでも使える自動化として用意しているのがOfficeスクリプトです。VBAとの違いを、Microsoftの説明(Office スクリプトと VBA マクロの違い、Office スクリプトのプラットフォームの制限と要件、Excel の Office スクリプト)をもとに並べると、次のようになります。
| 比べること | VBAのマクロ | Officeスクリプト |
|---|---|---|
| 動く場所 | Windows版とMac版のExcel。Excel for the webでは動かない | Excel for the web、Windows版(バージョン2210以降)、Mac版 |
| 動き出すきっかけ | ボタンのほか、ブックを開いたとき、セルを変えたときなどのイベント | 人が実行したときと、Power Automateのフローから呼ばれたときだけ。Excelのイベントには対応しない |
| 手が届く範囲 | Excelと同じ権限で、パソコンのほかのファイルやアプリまで | そのブックの中だけ |
| 決まった時刻に動かす | Excelを開いている間ならApplication.OnTimeで時刻を指定できる。Power Automateのコネクタは無い | Power Automateのフローで、スケジュールやメールの受信をきっかけに動かせる |
| 使うために要るもの | デスクトップ版のExcel。特別なライセンスは要らない | 対象のMicrosoft 365の法人向け・教育機関向けライセンスとOneDrive for Business。Power Automateで使うにはMicrosoft 365のビジネス ライセンス |
Officeスクリプトはブックの外に手が届かないので、ほかのブックを開いて転記する、共有フォルダーにファイルを書き出す、メールを送る、といった処理は、Power Automateのフローの側に持たせることになります。Power Automateから動かすときの制限もあり、スクリプトの実行は1人1日1,600回まで、Power Automateからの同期の呼び出しは120秒でタイムアウトし、Power Automate経由で動くスクリプトから外部のAPIは呼べません(前掲のプラットフォームの制限と要件)。件数の多い集計を1回で回しているマクロは、処理の分け方も考えておきます。
移し先は業務ごとに選ぶ(入力はExcelのまま/業務アプリにする/残して守る)
マクロが残っている業務のうち、マクロにしない方がよい業務と、生成AIで社内で書ける範囲、外に頼む前に書く仕様は「Excelマクロ(VBA)を外注する前に」で解説しています。
ここまでで、使っている人と確かめた仕様と、Excelの側の変化の影響が手元にそろいます。移し先は、マクロ単位ではなく業務単位で選びます。同じブックの中でも、入力を受ける部分、集計する部分、帳票を作る部分で、合う移し先が違うことがあります。
移し先は三つから、業務ごとに選ぶ
入力はExcelのまま
処理だけを移す
- 入力の画面と手順は変えずに、集計・転記・帳票づくりを移す
- 移し方の例:Officeスクリプト+Power Automate、サーバーで動くプログラム
合う場面:入力する人が少なく、Excelの表のままで困っていない
気をつけること:ほかのファイルやメールに触る処理は、Officeスクリプトだけでは移せない
業務アプリにする
台帳と画面を作り直す
- Excelの表を、入力画面と一覧を持つアプリに置き換える
- 移し方の例:kintoneなどの業務アプリ、専用のWebアプリ
合う場面:複数の人が同じ表に入力する、承認や履歴が要る、データが年々たまる
気をつけること:マクロの点検は、入力や取り込みのときの点検に置き換える。データの移し方も決める
残して守る
VBAのまま、守り方を決める
- 仕様と見本のデータ、正しい結果を作り、置き場所と持ち主を決める
- パソコンの入れ替えやOfficeの更新の前に試す
合う場面:安定して動いていて、前の節の変化のどれにも当たらない
気をつけること:読める人がいない状態は残る。見直す時期を決めておく
当社の整理(Officeスクリプトの届く範囲は Office スクリプトと VBA マクロの違いによる)
どれか一つに決める必要はありません。入力はExcelのまま残して集計だけを移し、取引先ごとに様式の違う請求書づくりは業務アプリにする、という組み合わせもあります。Google Workspaceを使っている会社なら、Google Apps Scriptに書き直す道もあり、その場合の注意はExcel 中心から Googleスプレッドシート への移行にまとめています。
業務アプリに移す場合、マクロが取り込みの前にしていた点検(列の対応、重複、型の食い違い)は、アプリの入力や取り込みの段階の点検に置き換えます。kintoneなら、取り込む前に列の対応や重複を確かめる当社のCSV 高度処理プラグインのような部品もあります。
残す場合も、何もしないで残すのとは違います。書き起こした仕様と、見本のデータと正しい結果を作り、ブックと書き出したコードの置き場所、持ち主を決めます。マクロに署名して、署名した発行元を信頼する形にしておくと、信頼された発行元が署名したマクロだけを動かす設定のパソコンでも使えます(前掲のインターネットからのマクロのブロックの説明)。署名と発行元の扱いは、情報システムの担当と決めます。
旧マクロと新しい処理を、同じデータで並べて確かめる
新しい処理ができたら、すぐには切り替えず、旧マクロと並べて動かします。同じ入力を二つ複製し、一方で旧マクロを、もう一方で新しい処理を動かして、出力を突き合わせます。
同じ入力で、旧マクロと新しい処理の出力を突き合わせる
過去の月の入力で、例外の多い月を先に試す。そのあとで実際の締めを少なくとも1回、新旧を同時に動かして通す
切り替えるのは、差がすべて説明でき、使っている人が結果を確かめ、戻す手順と戻すかを決める人が決まってから
当社の整理
何を突き合わせるか
最初に比べるのは件数と合計です。取引先別や科目別など、業務で見ている単位ごとに、行の数と金額の合計を並べます。ここが合ってから、セルごとの値を比べます。Microsoft 365 Apps for enterpriseなどの一部のエディションに付いている「スプレッドシート比較」を使うと、二つのブックを左右に並べて、値や数式の違うセルを種類ごとに色分けし、結果をExcelのファイルに書き出せます。非表示のシートも比べます(スプレッドシート比較を使用して、ブックの 2 つのバージョンを比較する)。使えない環境なら、比べるためのシートを1枚作り、二つの出力の同じセルを数式で比べても足ります。
出力はブックの中だけとは限りません。台帳の「つながっているもの」をもとに、書き出したファイル、送るメールの宛先と本文、書き換えたほかのブックも比べます。試すときは、メールの宛先を自分にするなど、社外に出ないようにしてから動かします。
どのデータで、どれだけの期間並べるか
実際の締めを待って1か月ずつ並べると、例外の多い月(期末、年度末、新しい取引先や商品が入った月、該当が0件の月)に当たるまで時間がかかります。過去の月の入力ファイルと、そのとき旧マクロが出した結果が残っていれば、新しい処理に過去の入力を読ませて、残っている結果と比べられます。例外の多い月を先に選んで試し、そのあとで実際の締めを少なくとも1回、新旧を同時に動かして通します。過去の結果を使う場合は、その後にマクロが直されていないか、つまり今の旧マクロで同じ結果が出るかも確かめておきます。
切り替える条件は、並べ始める前に決めておきます。差がすべて説明できていること、使っている人が結果を確かめたこと、切り替えた後に問題が出たら旧マクロに戻す手順と、戻すかどうかを決める人が決まっていること、の三つです。
切り替えた後も、旧マクロのブックはすぐには消さず、読み取り専用にして残します。次の期末や年度末の締めを新しい処理で通すまでは、戻せる状態にしておきます。
差が出たときの分け方
差が出たら、どちらが正しいかを決める前に、差の理由を分けます。
差が出たら、理由で分ける
直すもの
新しい処理の誤り
- 仕様の読み違い
- 移し忘れた処理
すること:直して、同じ入力でもう一度比べる
決めるもの
旧マクロの誤りや癖
- エラーの行を黙って飛ばしていた
- 端数の丸め方が違っていた
- 人が毎月、手で直していた
すること:どちらに合わせるかを使っている人と決め、仕様に書き足す
残すもの
決めて変えた点
- 移すときに変えると決めた処理
すること:差が出るのが正しいので、突き合わせの記録に残す
当社の整理
丸めの違いは、金額の端数の差として出てきます。VBAのRound関数を使っていた処理を別の仕組みに移すと、移し先の丸め方がRound関数と同じとは限らないからです。また、旧マクロがOn Error Resume Nextで飛ばしていた行は、新しい処理ではエラーとして止まるか、件数の差として出てきます。いずれも、旧マクロと新しい処理のどちらに合わせるかを使っている人と決めて、仕様に書き足します。
引き継ぎ資料として残すもの
引き継ぎが終わったときに残すのは、次に担当が替わったときに同じ苦労をしないための資料です。移したか残したかに関わらず、次のものをそろえ、個人のパソコンではなく、部署で管理している場所に置きます。
引き継ぎ資料に残すもの
今の姿
台帳
- マクロごとの置き場所、動かし方、業務と時期、使う人、つながっているもの
中身
仕様
- 書き起こしの6項目と、使っている人が確かめた印
- 旧マクロの癖をどうしたか
試験
見本のデータと正しい結果
- 例外の多い月を含む入力と、そのときの正しい出力
- 次に直すときの試験に使う
記録
突き合わせの記録
- 比べた月、見つかった差、その理由と決めたこと
運用
動かし方と、止まったとき
- 誰がいつ動かすか、出力のどこを確かめるか
- 止まったら誰に連絡するか
コード
コードと変更の履歴
- 書き出したモジュールと、参照設定のライブラリ
- 変えた日と理由
当社の整理
中でも、見本のデータと正しい結果は後から効いてきます。次に誰かが処理を直したとき、同じ入力で同じ結果が出るかをすぐに確かめられるからです。書き起こした仕様が、いつの間にか実際の処理とずれていないかも、これで分かります。
引き継ぎの最初の一歩は、台帳を1行書くことと、ブックを複製して、マクロを動かさずに開くことです。どちらも、移し先が決まっていない段階から始められます。
Aurant Technologiesでは、作った人がいないExcelのマクロやAccessの中身を書き起こすところから、移し先の選び方、新旧の結果を並べて確かめる期間の組み立てまでをお手伝いしています。基幹システムとその周りのExcel・Accessをまとめて見直す場合は基幹システムの刷新・レガシー移行の相談のページで、Excelの台帳をkintoneなどの業務アプリに組み直す場合は業務ツール導入・活用支援のページで、進め方を紹介しています。
システム統合・基幹刷新
データ統合基盤の構築、iPaaS/API連携によるシステム間統合、レガシー基幹からの段階的移行、ERP/基幹システムの選定・導入支援まで。既存資産を残したまま、変えるべきものだけを変える進め方で支援します。