Access VBAの開発を続けていると、
- 同じオブジェクト名が何度も登場する
- コードが長くなって読みにくい
- フォーム修正時のミスが増える
- 保守が大変になる
- Copilotが生成したコードが冗長になる
というケースが増えてきます。
Withステートメントを活用するだけでVBAコードの可読性と保守性を大幅に向上できます。
派手な機能ではありませんが、ベテラン開発者が必ず利用する定番テクニックの一つです。実際に長期間運用されるシステムほど、Withステートメントを活用したコードが多くなります。Access VBA逆引き集|ベテラン開発者が必ず使っているVBA記述テクニック15選とCopilot活用術では可読性向上の重要テクニックとして紹介されています。
- Withステートメントとは
- なぜ重要なのか
- Withを使用した場合
- 基本構文
- 逆引き① テキストボックスを設定したい
- 逆引き② 色を変更したい
- 逆引き③ ラベルを更新したい
- 逆引き④ レコードセット処理で使いたい
- 逆引き⑤ Excelオブジェクトで使いたい
- Accessフォームとの相性が良い
- 実務活用例① 顧客管理システム
- 実務活用例② CSV取込結果表示
- 実務活用例③ 設備管理システム
- 実務活用例④ ログ出力フォーム
- 実務活用例⑤ Excel出力
- Withを使わない方が良いケース
- ネストも可能
- ベテラン開発者の定番パターン
- WithとCopilotの相性
- Copilot活用術① コード圧縮
- Copilot活用術② コードレビュー
- Copilot活用術③ フォーム最適化
- With利用時の注意点
- 開発現場での利用頻度
- Withステートメントを覚えるメリット
- まとめ
Withステートメントとは
Withステートメントは、
同じオブジェクト
↓
繰り返し記述
↓
省略できる
ための構文です。
なぜ重要なのか
初心者がよく書くコードです。
Me!txtName.Visible = True
Me!txtName.Enabled = True
Me!txtName.BackColor = vbYellow
Me!txtName.ForeColor = vbBlack
問題点
同じ記述が多い
修正が面倒
読みにくい
です。
Withを使用した場合
With Me!txtName
.Visible = True
.Enabled = True
.BackColor = vbYellow
.ForeColor = vbBlack
End With
非常に見やすくなります。
基本構文
With オブジェクト
.プロパティ
.メソッド
End With
逆引き① テキストボックスを設定したい
フォーム制御の定番です。
With Me!txtCustomer
.Enabled = True
.Visible = True
.Locked = False
End With
効果
入力可能状態
になります。
逆引き② 色を変更したい
警告表示です。
With Me!txtAmount
.BackColor = vbYellow
.ForeColor = vbRed
End With
活用
高額入力時などに利用します。
逆引き③ ラベルを更新したい
進捗表示です。
With Me!lblStatus
.Visible = True
.Caption = "処理中"
End With
逆引き④ レコードセット処理で使いたい
DAOでも便利です。
With rs
.MoveFirst
Do Until .EOF
.MoveNext
Loop
End With
効果
コード量削減になります。
逆引き⑤ Excelオブジェクトで使いたい
Excel連携です。
With xlSheet
.Cells(1,1) = "顧客コード"
.Cells(1,2) = "顧客名"
.Cells(1,3) = "金額"
End With
Accessフォームとの相性が良い
最も利用される用途です。
例えば
Me!txtCode
Me!txtName
Me!txtAddress
を制御する場合です。
記述例
With Me
!txtCode = ""
!txtName = ""
!txtAddress = ""
End With
効果
初期化処理が見やすくなります。
実務活用例① 顧客管理システム
顧客情報更新時です。
With Me
!txtCustomerCode.SetFocus
!txtCustomerName = ""
!txtAddress = ""
End With
効果
入力画面初期化が簡単になります。
実務活用例② CSV取込結果表示
結果通知です。
With Me!lblResult
.Caption = "取込完了"
.ForeColor = vbBlue
End With
実務活用例③ 設備管理システム
判定結果表示です。
With Me!txtResult
.BackColor = vbRed
.ForeColor = vbWhite
End With
効果
異常判定を強調できます。
実務活用例④ ログ出力フォーム
状態管理です。
With Me!txtLog
.Visible = True
.Locked = True
End With
実務活用例⑤ Excel出力
大量出力処理です。
With xlSheet
.Range("A1") = "売上"
.Range("B1") = "数量"
End With
Excel連携では頻繁に利用します。
Withを使わない方が良いケース
全てに使うべきではありません。
一行だけ
Me!txtName = ""
程度なら不要です。
長すぎるWith
悪い例です。
With Me
'100行以上
End With
問題点
読みにくい
保守しづらい
です。
ネストも可能
中級者向けです。
With xlBook
With .Sheets(1)
.Cells(1,1) = "開始"
End With
End With
注意
深すぎるネストは避けましょう。
ベテラン開発者の定番パターン
プロパティ変更です。
With Me!txtValue
.Enabled = False
.BackColor = RGB(220,220,220)
.Locked = True
End With
非常によく見かけます。
WithとCopilotの相性
非常に良いです。
Copilot生成コードは同じオブジェクト参照が多くなりがちです。
改善依頼例
以下のAccess VBAコードを
Withステートメントを使って
可読性を向上してください。
Copilot活用術① コード圧縮
重複するオブジェクト参照を
Withへ変更してください。
Copilot活用術② コードレビュー
このコードに
Withステートメントを
適用できる箇所を
指摘してください。
Copilot活用術③ フォーム最適化
Accessフォーム処理です。
Withを活用して
保守性を向上してください。
実務では非常に役立ちます。
With利用時の注意点
オブジェクトを明確にする
With Me!txtName
のように対象を明確にします。
長くし過ぎない
20~30行程度が理想です。
ネストし過ぎない
可読性低下を招きます。
開発現場での利用頻度
個人的な利用頻度です。
| 順位 | 用途 |
|---|---|
| 1位 | フォーム制御 |
| 2位 | Excel連携 |
| 3位 | レコードセット |
| 4位 | 帳票出力 |
| 5位 | 画面初期化 |
保守案件ではほぼ毎日見かけます。
Withステートメントを覚えるメリット
次の効果があります。
- コード量削減
- 可読性向上
- 修正ミス削減
- Copilotコード改善
- 保守性向上
特にチーム開発では大きな効果があります。
まとめ
WithステートメントはAccess VBA開発で可読性と保守性を向上させる基本テクニックです。
特に
- フォーム制御
- Excel連携
- レコードセット処理
- CSV取込結果表示
- 帳票出力
などで大きな効果を発揮します。
またCopilotを活用すれば、
- コード最適化
- 重複削減
- 可読性改善
も効率よく行えます。
派手な機能ではありませんが、長期間運用される業務システムでは非常に重要なテクニックです。Access VBA開発者なら早い段階で習得しておきましょう。


コメント