こんにちは、なかぜんです。
「Accessのフォームが開くのが遅い」「動作がモッサリしていてストレス…」そんな悩み、上級者でもよくありますよね。でも、実はVBAを書かずに“プロパティ設定の見直し”だけで改善できるケースが結構あるんです。
この記事では、実務で私が行った高速化・軽量化の実例をもとに、フォーム設計時に注目すべきプロパティを丁寧に解説していきます。
フォームの高速化に効くプロパティ設定
1. レコードソースは最小限に!
フォームの「レコードソース」には、使うフィールドだけを指定しましょう。
例えば次のような書き方:
SELECT 顧客ID, 顧客名 FROM T_顧客
NGな例は以下のような書き方です:
SELECT * FROM T_顧客
解説:「SELECT *」は一見楽ですが、不要なフィールドまで読み込まれてしまい、処理が重くなる原因に。フィールド数が多いテーブルでは顕著です。
2. 「レコードロック」を“編集レコード”に変更
デフォルトでは「すべてのレコード」に設定されていることも多いですが、複数ユーザー利用では以下のように変更しましょう。
- プロパティ:レコードロック
- 設定:編集レコード
解説:「すべてのレコード」では無用なロック競合が発生する場合があり、パフォーマンスも低下します。
3. 「ナビゲーションボタン」「レコードセレクタ」をオフに
不要なUI要素は表示しない方が軽快です。特にサブフォームでの設定が効果的。
- ナビゲーションボタン → いいえ
- レコードセレクタ → いいえ
効果:描画要素が少なくなるため、読み込み速度がわずかに改善され、見た目もスッキリします。
4. 「自動センター」や「ポップアップ」の使い方
ポップアップウィンドウにした方が軽く感じる場面もあります。
- ポップアップ:はい
- 境界線スタイル:細線
応用:ダイアログ系のフォームでは特に効果があります。モーダルと組み合わせることで画面遷移のストレスを軽減。
コード例:条件付きでレコードソースを変更する
Private Sub Form_Open(Cancel As Integer)
If Me.OpenArgs = "軽量表示" Then
Me.RecordSource = "SELECT 顧客ID, 顧客名 FROM T_顧客 WHERE フラグ=True"
End If
End Sub
解説:引数(OpenArgs)で表示条件を切り替えることで、最小限のデータだけを読み込み、高速化につなげます。
よくあるミスや注意点
- 「SELECT *」を多用しすぎる → パフォーマンス低下の元凶です。
- 使わないコントロールの非表示忘れ → 描画が遅くなります。
- フィルタ未設定で全件読み込み → 数万件のデータが対象になると、致命的に遅くなります。
応用:条件付きフォーム表示の工夫
例えば、管理者モードのときだけナビゲーションボタンを表示させるなど、使い分けることで不要な描画負荷を抑えることができます。
Private Sub Form_Load()
If CurrentUser = "admin" Then
Me.NavigationButtons = True
Else
Me.NavigationButtons = False
End If
End Sub
ポイント:ユーザーごとの環境最適化でストレスを最小限に。
まとめ:フォーム設計はプロパティが命
フォームの高速化・軽量化は、VBAの前にまずプロパティ設定の見直しから始めるのが近道です。
- レコードソースは必要最小限に
- ロックやUI設定を見直す
- 条件付きでの動的設定も活用
ぜひ一度、既存のフォームをチェックしてみてください。「あ、これ無駄だったんだ!」という気づきがあるかもしれません。
次のステップ
さらに一歩進んで、VBAによる動的フォーム設計や、非連結フォームによるパフォーマンス向上にも挑戦してみましょう。これらは別の記事で詳しく解説していく予定です。
それでは、またお会いしましょう!
Accessの現場を支える、なかぜんでした。
