Access

Accessの画像・添付ファイルでファイルサイズが肥大化したときの対処

Accessでデータベースを運用している際、画像や添付ファイルを取り込んだことで動作が重くなったり、容量制限の壁に突き当たったりして困っていませんか。本記事では、データベースの容量が肥大化するメカニズムを解説し、即効性のある対処法からVBAを使った画期的な根本解決策まで分かりやすく紹介します。

公開日:2026年7月14日 更新日:2026年7月14日
Accessの画像・添付ファイルでファイルサイズが肥大化したときの対処
目次

この記事で分かること

  • Access内に画像やファイルを直接保存すると容量が急増する理由
  • 肥大化したデータベースを即座に縮小させるための応急処置
  • VBAを活用して画像を外部管理にし、データベースを軽量に保つ具体的な手順

Accessでファイルサイズが肥大化する原因と画像・添付ファイルの影響

Accessデータベースには「ファイルサイズが最大2GBまで」という仕様上の厳格な制限が存在します。テキストや数値などの文字データだけであれば2GBに達することは稀ですが、写真やPDFなどのバイナリデータをシステム内に直接取り込むと、瞬く間にこの上限に到達してしまいます。

特に問題となるのが「添付ファイル型」と「OLEオブジェクト型」というデータ形式です。それぞれの仕組みと、肥大化を引き起こす原因は以下の通りです。

保存方法 肥大化の危険度 仕組みと問題点
OLEオブジェクト型 極めて高い Excelやビットマップなどのデータを内包する形式。元データに加えて制御用の管理情報が自動的に付加されるため、実ファイルサイズの数倍から十数倍に容量が膨れ上がります。
添付ファイル型 高い Access内部でデータを自動圧縮して保存する比較的実用的な形式。しかし、大量の画像や高解像度の写真を保存し続ければ、確実にデータベースを圧迫します。
外部ファイルリンク型(推奨) 極めて低い 画像自体は共有サーバーなどの外部フォルダに置き、Accessには「ファイルの保存場所(パス)」だけを文字として格納する方法です。データベースの容量はほぼ増えません。

データベースの容量が2GBの上限に近づくと、書き込みエラー(ディスクフルなど)が発生して最悪の場合はデータベースが破損し、起動すらできなくなるリスクがあります。また、メモリ消費量が増大することで、フォームの切り替えやレポートの印刷処理が著しく低速化します。

修正で済むか、作り直すべきか迷ったら

現状を確認し、修正・保守・刷新のどれが現実的かを整理します。

データベース肥大化をその場で解消する2つの即効対処法

すでに容量が限界に近く、一刻も早く動作を改善したい場合に有効な、応急処置としての2つの方法を解説します。

1. 「最適化と修復」機能の実行

Accessは、データを削除してもデータベースファイルの物理的な容量が自動的に縮小しない仕様になっています。不要になったデータを削除した後は、必ず手動で「最適化と修復」を行いましょう。

手順は以下の通りです。

  1. データベースを開き、上部メニューの「ファイル」タブをクリックします。
  2. 「情報」メニュー内にある「データベースの最適化と修復」を選択します。

これにより、システム内部の不要な一時領域や削除済みの領域がクリーンアップされ、ファイルサイズが劇的に縮小します。ただし、実行中にネットワークトラブルなどが発生するとファイルが破損する恐れがあるため、作業前に必ずバックアップ(ファイルのコピー)を作成してください

2. 登録する画像の形式変更とサイズ圧縮

どうしてもデータベース内部に画像を格納し続けなければならない場合は、登録するファイル自体の容量を小さく調整します。スマートフォンやデジカメで撮影した写真をそのまま取り込むと、1枚あたり数MB以上のサイズになりがちです。

  • 解像度を実務上支障のない範囲(例: 800×600ピクセル程度)に縮小する
  • 無圧縮のBMP(ビットマップ)形式ではなく、高圧縮なJPGやPNG形式に変換してから取り込む

この一手間を加えるだけで、添付ファイル型フィールドの消費容量を10分の1以下に抑えることができます。

根本解決!画像を外部フォルダで一元管理してパスで紐付ける方法

「最適化と修復」を繰り返しても、利用人数やデータ登録数が増えればいずれ限界が訪れます。そこで推奨されるのが、画像の実体をデータベースの外で管理し、Accessにはその「ファイルパス」のみを記録する構成への移行です。

外部フォルダ管理のメリット・デメリット

  • メリット:データベースが驚くほど軽量に保たれ、動作が軽快になります。画像のバックアップや移行がエクスプローラー上で簡単に行えるようになります。
  • デメリット:ファイルの実体を誤って削除したり移動したりすると、Access側で画像が表示されなくなる(リンク切れ)が発生します。

具体的な実装ステップとVBAコード

外部管理に移行するための手順は、大きく分けて以下の3ステップです。

ステップ①:テーブルの設計変更

まず、画像を格納していたテーブルから「添付ファイル型」や「OLEオブジェクト型」のフィールドを廃止し、代わりに**「短いテキスト」または「長いテキスト」型のフィールド(名前を「ImagePath」などとする)**を追加します。ここには、画像のフルパス(例: C:\Images\photo01.jpg)を保存します。

ステップ②:フォームへの画像コントロール配置

データを閲覧・入力するフォーム上に、ツールボックスから「画像」コントロールを配置します。初期設定の画像ファイルを求めるダイアログが表示されますが、適当な仮画像を指定するか、キャンセルして空の状態で作成します(コントロール名を「imgViewer」とします)。

ステップ③:VBAコードの実装

フォームでレコードを切り替えた際、登録されているパスの画像を自動的に読み込んで表示させるためのVBAプログラムを記述します。フォームの「レコード移動時」イベントに以下のコードを設定してください。

Private Sub Form_Current()
    On Error GoTo ErrorHandler
    
    ' パスが登録されており、かつファイルが実際に存在するか確認
    If Me!ImagePath & "" <> "" And Dir(Me!ImagePath) <> "" Then
        Me!imgViewer.Picture = Me!ImagePath
    Else
        ' パスがない、またはファイルが存在しない場合は非表示にする(空白化)
        Me!imgViewer.Picture = ""
    End If
    Exit Sub

ErrorHandler:
    Me!imgViewer.Picture = ""
End Sub

この短いコードを実装するだけで、レコードが変わるたびに指定のファイルパスから画像がロードされ、データベース自体には全く負荷をかけずに画像を切り替えるシステムが構築できます。

修正で済むか、作り直すべきか迷ったら

現状を確認し、修正・保守・刷新のどれが現実的かを整理します。

画像外部管理への移行時によくあるトラブルと解決策

システム設計を外部管理方式へ変更した際、実務で直面しやすい代表的なトラブルとその防止策を解説します。

トラブル①:複数ユーザーで共有した際に「画像が表示されない」

開発者のパソコン内だけで動作確認を行い、パスをローカルドライブ(例: C:\Users\...)で記録してしまうと、他のメンバーのパソコンからはファイルを見つけられず表示エラーになります。

【解決策】:
社内ネットワーク上の共有サーバー(NAS等)に画像専用のフォルダを作成し、必ず「UNCパス」と呼ばれる共通のパスで記録してください。
・正しくない例:Z:\Images\photo01.jpg(Zドライブの割り当ては人によって異なる場合がある)
・正しい例(UNC):\\FileServer\SharedImages\photo01.jpg

トラブル②:セキュリティ警告やフォルダへのアクセス権不足

共有サーバー上のフォルダに対して、一部のユーザーに読み取り・書き込み権限が付与されていない場合、画像ファイルを開くことができずシステムが停止することがあります。

【解決策】:
画像を格納する親フォルダに対して、Accessを利用するすべてのユーザー(Active Directoryのグループ等)に「読み取り」および「書き込み」のアクセス権限が付与されていることを、社内のネットワーク管理者に確認してください。

よくある質問(FAQ)

「最適化と修復」を行ってもファイルサイズが全く小さくなりません。なぜですか?

テーブル内に「添付ファイル型」や「OLEオブジェクト型」として保存されている実データそのものが多すぎる可能性があります。この場合、不要となったレコードや画像データ自体をテーブルから削除してから、再度「最適化と修復」を実行してください。

画像フォルダの場所を引っ越す(移動する)場合、登録したパスをすべて書き換える必要がありますか?

はい、そのままではリンク切れになります。ただし、テーブル内のデータを1件ずつ手動で書き換える必要はありません。Accessの「更新クエリ」機能を使用し、古いパスの一部文字列を新しい移行先のパスへ一括置換(Replace関数を使用)することで、短時間で修正が完了します。

外部の画像ファイルを削除した場合、Access内のパス情報も自動で消えますか?

自動的には消えません。Accessに登録されているのはテキストとしての「位置情報」だけであるため、実ファイルが削除されてもパス文字列は残ります。この場合、前述のVBAコードのように「Dir関数」を用いてファイルの実在確認を挟む設計にしておけば、エラー画面を出さずに空白として安全に処理できます。

スマートフォンで撮影したHEIC形式の画像はAccessで表示できますか?

標準状態のWindowsやAccessではHEIC形式の画像をうまく表示できないトラブルが多発します。トラブルを防ぐためにも、iPhone等の設定で撮影フォーマットを互換性優先(JPEG)にするか、取り込み時にJPGやPNG形式へ変換しておくことを強く推奨します。

Accessについてのご相談

Accessについてのご相談を受け付けています

現状の課題をお聞きし、最適な進め方をご提案します。まずはお気軽にご相談ください。