AccScan
属人化

Accessの帳票を棚卸しする|AI活用で移行漏れを防ぐ

Access移行前の帳票棚卸し実務を解説。AllReportsで非表示含む全レポートを列挙し、使用・未使用を仕分け。出力条件・元クエリ・Excel出力も含めた全帳票洗い出しにAIを活用する手順と限界を当社実務基準で整理します。

まずは、自社のAccessが「解析できるか」を無料で確認できます。

約2分・ファイル送信不要・発注義務なし

結論:帳票の見落としは移行後に発覚し、大きな手戻りにつながりやすい

Access移行で後から「あの帳票が出なくなった」と発覚するケースは少なくありません。当社の経験では、原因は移行前の棚卸しでレポートオブジェクトの総数を把握していなかったこと、または存在は知っていても「いつ・誰が・どの条件で使うか」を確認していなかったことがほとんどでした。

当社の実務経験では、棚卸しの段階で使われていない帳票が全体の3割前後見つかることがあります。逆に、ナビゲーションペインに表示されていない非表示レポートが移行後に「実は月末だけ使っている」と判明するケースもあります。移行前にレポートの全量と利用実態を把握しておくことが、後からの手戻りを防ぐ最も確実な手段です。

この記事では、Accessのレポートオブジェクトを漏れなく洗い出す方法、使用・未使用の判別手順、各帳票の出力条件・レイアウト・元クエリの把握方法、そしてAIを使った効率化とその限界を順に説明します。

まずオブジェクト一覧を取得する

Accessのレポートは、ナビゲーションペインに表示されるものだけが全部ではありません。Hiddenプロパティやカスタムグループによってナビゲーションペインから見えなくなっているレポートが存在することがあります。棚卸しはまずAccessの全レポートオブジェクトを一覧化するところから始まります。

全レポートを取得する最も確実な方法はVBAです。CurrentProject.AllReportsコレクションを列挙すると、非表示のものも含めてレポートオブジェクト名を取り出せます。下記は標準モジュールにそのまま貼り付けて実行できるコードです。

Sub ListAllReports()
    Dim obj As AccessObject
    Dim i As Integer
    i = 1
    For Each obj In CurrentProject.AllReports
        Debug.Print i, obj.Name, IIf(obj.IsLoaded, "開いている", "閉じている")
        i = i + 1
    Next obj
End Sub

イミディエイトウィンドウ(Ctrl+G)に出力された一覧をコピーしてExcelに貼り付けると、番号・レポート名・現在の状態が並んだ一覧の下地ができます。当社の経験では、レポート数が少なければ手作業で十分なケースが多く、本数が多い場合はスクリプトによる一括取得の方が作業量が減ります(規模だけで工数が決まるわけではないため、あくまで目安です)。

一覧化した後は、ナビゲーションペインで「非表示オブジェクトを表示」(ナビゲーションペイン右クリック→「ナビゲーションオプション」→「非表示オブジェクトを表示する」)を有効にして、目視でも確認しておくと抜けを防げます。

別途、Database Documenter(データベースドキュメンター)を使うとレポートのプロパティ一覧も出力できます。ただし出力量が多く全体像の把握には不向きなため、個別のレポートを詳しく調べる段階で使うのが実務上は効率的です。

使われているか・いないかを判別する

全レポートを列挙できたら、次は「実際に使われているか」を判別します。ここが棚卸し作業の中で最も時間がかかり、かつ判断が難しい工程です。

判別に使える情報は主に2つです。VBAコード内でそのレポート名が参照されているかどうか、そして現場担当者へのヒアリングです。なお、Accessファイル全体の更新日時は個別レポートの利用証拠にはならないため(印刷しただけでは更新されないこともある)、利用実態の判断材料としては使いません。

VBAによる参照確認は、VBAソースを閲覧できる.accdb/.mdbであれば検索できます(VBAプロジェクトにパスワードが設定されている場合は解除が必要)。VBEの「編集」→「検索」でレポート名を検索し、DoCmd.OpenReport の呼び出しに含まれているかを確認します。呼び出しがない場合は手動で開いて印刷するタイプの運用である可能性があります。

現場へのヒアリングが欠かせない理由は、コードで呼ばれていない=使われていないと判断できないからです。当社の支援案件では、月末に担当者が手動でレポートを開いてプリントアウトするだけの運用が見られます。コードを見るだけでは検出できません。

判別方法分かること限界
VBAコード検索(レポート名)固定文字列でレポート名を直接渡す呼び出しがあるか変数・連結文字列・ラッパー関数経由の呼び出しは検出できない。手動で開くタイプの運用も同様
マクロのOpenReportアクション確認マクロから呼ばれているかマクロ自体が使われているかも要確認
プリントスプーラのログ(Windowsイベント)印刷ジョブの記録記録が残っていない環境では使えない
現場担当者へのヒアリング実際の運用・頻度・用途担当者が不在・記憶が曖昧な場合あり

コード参照の照合やログの分類はAIで補助できます。ただし利用実態の最終確定は自動化できず、現場確認が必要な部分が残ります。「この帳票が実際に業務で使われているか」の最終判断は現場に確認するしかない領域です。

各帳票の設計情報を把握する

使用中と判断したレポートについては、移行に必要な情報を各帳票ごとに整理します。最低限押さえたい項目は4つです。

確認項目確認方法移行時の意味
レコードソース(テーブル・保存クエリ・SQL文)レポートのプロパティ「レコードソース」データの取得ロジックの再現に必要
開く際のパラメータ・条件VBAのDoCmd.OpenReport の引数(第3引数FilterName・第4引数WhereCondition・第6引数OpenArgs)、または開く画面のフィルタ条件付き出力の再現に必要
用紙設定・セクション構成デザインビューで目視確認、Database Documenter帳票レイアウトの再現に必要
グループ集計・並べ替えの設定デザインビューの「グループ化と並べ替え」パネル集計ロジックの再現に必要

レコードソースがクエリの場合は、そのクエリのSQL文も記録しておきます。クエリが別のクエリを参照している多段構成の場合は、依存関係の連鎖を追う必要があります。この作業はAccessの「オブジェクトの依存関係」機能(データベースツール→オブジェクトの依存関係)でも補助できますが、VBAやマクロからの参照、一部の多段・特殊クエリは追跡できないため完全ではありません。

なお、帳票に関連する業務フロー全体の洗い出し方についてはAccess移行前の業務フロー調査でまとめています。

印刷帳票とExcel出力の両方を棚卸しする

Accessの帳票をすべて洗い出すとき、Accessのレポートオブジェクトだけを見ると見落としが起きます。当社の支援案件では、Accessレポートの印刷と「データをExcelに出力してExcel側で帳票を作る」という運用が併存しているケースがよく見られます。

この場合のExcel帳票はAccessのオブジェクトとして存在しないため、オブジェクト一覧の取得では検出できません。VBAコードを検索して「TransferSpreadsheet」「CopyFromRecordset」「Shell」「CreateObject("Excel.Application")」のような関数呼び出しを探すと、Excel出力の実装が見つかることがあります。

棚卸し表には「Accessレポート」と「VBAによるExcel出力」を分けて記録することをおすすめします。移行後のシステムでどちらをどう再現するかが変わるためです。

フォームとレポートの役割の違いや基本的な仕組みについてはAccessのフォームとレポートとはに解説があります。

AIを使った効率化と、任せてはいけない部分

帳票棚卸しの作業にAIを活用できる部分はあります。ただし「AIがレポートを自動で棚卸しする」というイメージは現実と距離があります。AIが役立つのは主にテキスト化済みの情報を整理・要約する段階です。一般的なチャットAI単体ではAccessファイルを直接解析できないことが多く、DAOなどの抽出ツールまたは人によるテキスト化を経てからAIに渡す手順が必要です。

具体的に使えるのは次の場面です。VBAコードをテキストで渡して「DoCmd.OpenReportの呼び出し箇所を全部リストアップして」と問いかけると、コード全体から呼び出し一覧を抽出する補助ができます。同様に、抽出したレポート名とコード上の参照を照合して「コードで参照されていないレポート」を絞り込む作業にも使えます。

VBAのテキスト化方法はVBEからのモジュールエクスポートが基本です。この手順はAIでAccessのVBA・構造を解析するで詳しく説明しています。帳票棚卸しに特化した今回の作業でも、テキスト化の前提は同じです。

一方、AIに任せてはいけない部分もはっきりしています。「このレポートは今も使われているか」という業務上の判断、「印刷時のレイアウトが正しいか」という目視確認、「出力条件が現場の運用と合っているか」という検証は、AIに代替できません。精度数値を示せる性質の作業ではなく、人が確認する前提で進める必要があります。

属人化したAccessの構造をAIで解析する作業一般についてはブラックボックス化したAccessの解析手順も参考になります。帳票棚卸しはその中の一工程として位置づけられます。

当社では、帳票の棚卸しに必要な情報収集を初期診断として対応しています。Accessが解析できる状態かどうかは環境によって変わるため、まず無料の解析可否チェックからご相談ください。

よくある質問

Q. レポートオブジェクトが50本以上あります。全部棚卸しする必要がありますか。

使用・未使用を仕分けてから詳しく調べる順番が実務的です。まずVBAコードとマクロの検索で呼び出されていないレポートを候補として洗い出し、現場ヒアリングで最終確認します。未使用と確認できたものは棚卸し表に「廃止候補」として記録するだけで、詳細な調査は省略できます。全件均等に調べると時間が足りなくなります。

Q. .accde形式でVBAが読めない場合、レポートの棚卸しはできますか。

.accde形式はVBAモジュールの作成・変更・閲覧が禁止されているため、記事内のVBAコードをそのまま実行できません。設計調査には原則として元の.accdbが必要です。Accessのマクロなど既存の仕組みを使ったオブジェクト名の列挙や、外部ツールからのDAO接続による取得が代替手段になります。VBAが読めない以上、どのレポートがどの操作から呼ばれているかの追跡は難しく、画面操作を通じた動作観察が主な手がかりになります。.accde形式の制約についてはaccde/mdeで中身が見られないAccessで説明しています。

Q. 移行先システムでAccessのレポートをそのまま再現できますか。

移行先のシステム種別によります。データのみSQL Serverへ移してAccessフロントエンドを残す構成では、既存帳票を継続利用できる場合があります。ただしレコードソース・クエリ・データ型・接続設定の検証と修正が必要になることもあるため、事前に確認が必要です。Webシステムや別のプラットフォームへ全面移行する場合は帳票を作り直す必要があります。複雑なレイアウトや集計ロジックを持つ帳票は移行コストが高くなる傾向があります。データだけ移して画面や帳票を作り直す移行パターンについてはデータだけ移してフロントは作り直すで整理しています。

Q. 棚卸し表はどんな形式で作ればよいですか。

Excelのシンプルな表で十分です。当社が実務で使う項目は「No・レポート名・使用状況(使用中/未使用/要確認)・出力頻度・出力条件・レコードソース・担当者確認済みか・移行要否」の8列程度です。最初から精緻に作ろうとすると現場ヒアリング前に行き詰まるため、まずレポート名と仮の使用状況だけ埋めた粗い一覧を作り、ヒアリングで更新していく進め方が現実的です。

触れないAccessが「診断できるか」だけ、確かめませんか。

顧客データは送信不要。発注の義務もありません。

約2分・ファイル送信不要・発注義務なし/説明はオンライン・売り込みはしません