SQL Server × Access

VBA初心者でもOK!AIアシスタントを使ったコード自動生成テクニック

nanikatoaccess

1. はじめに:なぜAIアシスタントを使うのか?

生成AI(AIアシスタント) とは、自然言語処理に優れたモデル(例:ChatGPT、GitHub Copilotなど)を使って、文章やコードを自動生成してくれるサービスのことです。数行の指示(プロンプト)を入力するだけで、要望に近いプログラムコードを候補として提示してくれるため、VBA初心者や開発経験の浅い方でも、「こんな機能を実装したい」と思ったときに手軽にコードを入手できるメリットがあります。

また、SQL Serverとの連携なども含め、実務で必要な記述が複数にまたがる場合、AIに対して詳しい要件を指定するだけで雛形を用意してくれるため、開発スピードの向上ケアレスミスの削減にも効果的です。


2. AIにコードを作らせるためのポイント:プロンプト設計

AIにコードを生成してもらう際は、「プロンプト」 と呼ばれる指示文をなるべく具体的かつわかりやすい形で書くことが重要です。

  • 目的・前提条件を明記する: 「Microsoft AccessのVBAからSQL Serverに接続したい」「ADOを使いたい」「Call データベース接続を使っている」など。
  • 入力データの形式や入力必須項目のチェック: 「フォーム入力項目がNullの場合はエラーにしたい」など。
  • セキュリティ要件: SQLインジェクション対策を必須にする、パスワードをハードコードしない方法がいい、など。
  • 使いたいメソッドやパラメータ: 「adOpenForwardOnly, adLockReadOnly を使ってほしい」など。

AIが生成するコードは、大枠は便利でも細かい環境差異や特殊ケースはカバーしきれない場合があります。そのため、生成後のコードチェックテストは必須です。


3. 具体例:AccessでのINSERT処理をAIに生成させる流れ

ここでは一例として、「AccessのVBAからSQL Serverに対してデータをINSERTするコード」 をAIに作らせるケースを想定します。

ないものはない!お買い物なら楽天市場

3.1 想定するプロンプト

たとえば、ChatGPTなどのAIに対して以下のように指示します:

【プロンプト例】
「Microsoft Access VBAで、SQL Serverに接続してデータをINSERTするコードを書いてください。
前提として、Call データベース接続 というサブルーチンでADO接続を開き、cnというグローバル変数を使っている。
テーブル名は dbo.顧客マスタ、カラムは 顧客ID (自動採番), 顧客名, 住所, 電話番号
入力必須項目として 顧客名 があり、Nullまたは空文字は登録不可。
SQLインジェクション対策のためパラメータ化をしたい。
挿入後、フォームの入力項目を初期化したい。
コードに日本語のコメントを入れて解説してください。
文字列結合によるSQLインジェクションのリスクを減らすコードをお願いします。」

ポイントは、「使ってほしい変数名や関数名」「必須チェックの有無」「セキュリティ対策」「コメントの言語」 を具体的に伝えることです。

3.2 AIが生成したコードの例

以下は、AIアシスタントが上記プロンプトに対して提示してくれるコードの一例(イメージ)です。
実際にはAIのバージョンやエンジンによって若干の違いがありますが、おおむね下記のようなコードが出てくる可能性があります。

'------------------------------------------------------------------------------------------
'【目的】 SQL Serverに対して顧客データをINSERTするAI生成例
'【ポイント】
' ①Call データベース接続を呼び出し、ADOの接続(cn)を使用
' ②顧客名が必須項目のためNullまたは空文字はエラー
' ③パラメータ化クエリでSQLインジェクション対策
' ④登録完了後に入力項目をクリア
'------------------------------------------------------------------------------------------
Public Sub 顧客データ登録_AI生成例(str顧客名 As String, str住所 As String, str電話番号 As String)

'--- ①入力必須項目のチェック ---
If IsNull(str顧客名) Or str顧客名 = "" Then
MsgBox "顧客名は必須入力です。", vbExclamation
Exit Sub
End If

'--- ②接続を確立(既に接続されていない場合のみ)---
Call データベース接続 ' グローバル変数cnを開く

'--- ③Commandオブジェクトの作成 ---
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command

' コマンドに接続情報を設定
Set cmd.ActiveConnection = cn

'--- ④パラメータ化クエリを組み立てる ---
Dim strSQL As String
strSQL = "INSERT INTO dbo.顧客マスタ (顧客名, 住所, 電話番号) " & _
"VALUES (@顧客名, @住所, @電話番号)"
cmd.CommandText = strSQL
cmd.CommandType = adCmdText

'--- ⑤パラメータを設定 (サイズや型はテーブル定義にあわせる) ---
cmd.Parameters.Append cmd.CreateParameter("@顧客名", adVarWChar, adParamInput, 50, str顧客名)
cmd.Parameters.Append cmd.CreateParameter("@住所", adVarWChar, adParamInput, 100, Nz(str住所, ""))
cmd.Parameters.Append cmd.CreateParameter("@電話番号", adVarWChar, adParamInput, 20, Nz(str電話番号, ""))

'--- ⑥SQLを実行 ---
cmd.Execute

'--- ⑦登録完了メッセージ ---
MsgBox "新規顧客情報を登録しました。", vbInformation

'--- ⑧入力項目の初期化 ---
' (フォーム上のテキストボックスをクリアする例)
'Me.txt顧客名 = Null
'Me.txt住所 = Null
'Me.txt電話番号 = Null

'--- ⑨オブジェクト解放 ---
Set cmd = Nothing

End Sub

コードの特徴

  1. パラメータ化によるSQLインジェクション対策:文字列連結ではなく cmd.Parameters.Append を使用している。
  2. 入力必須項目のチェックstr顧客名 がNullまたは空文字なら登録を中止。
  3. 入力項目のクリア:登録後にフォーム入力欄を初期化して、ユーザーが連続登録しやすいようにしている。

AI生成コードに対する補足

  • AIが自動生成したコードは、実行環境やバージョンによって微調整が必要な場合があります。
  • パラメータの型やサイズは、SQL Server上のテーブル定義に合わせて正しく設定しましょう(adVarWChar or adVarChar、サイズ指定など)。

4. AIアシスタント活用の注意点

  1. 最終的な責任は開発者に
    AIは万能ではないので、動作テストやセキュリティ検証は必須です。大事な処理を任せる場合はコードレビューを行い、リスクのある箇所を洗い出しましょう。
  2. 環境差異への対応
    同じ指示でも、OfficeのバージョンやADOのバージョン、AIのバージョンによって出力されるコードが異なることがあります。「ActiveConnectionの設定方法」「パラメータの型名」 など微妙に食い違う場合がありますので、必ず自分の環境に合わせてテストしましょう。
  3. 機密情報の取り扱い
    APIキーやパスワードなど機密データをAIに入力しないように注意してください。接続文字列にもユーザーID・パスワードが含まれる場合があるため、プロンプトへそのまま貼り付けないほうが無難です。
  4. 過度なコピペは危険
    大量のコードをAIに求めすぎると、生成時間が長くなったり、要点がぼやけたりします。小さなブロックごとに生成・確認を繰り返すと効率的かつ安全です。

5. 生成AIを活用した学習法:コード“読み解き”のススメ

AIにコードを作らせるだけでなく、「なぜそのコードが正しいのか」「どういう仕組みで動くのか」 を学ぶ姿勢が大切です。たとえば:

  • コメントを詳しく付けさせる: 「各行が何をしているのか解説して」と指示する。
  • エラーが出た場合の修正方法を尋ねる: 「こういうエラーが出たがどう直すか?」とAIに聞いてみる。
  • エッジケースを考慮: 入力データが極端に長い、数値項目に文字列が入ったらどうなる?など、想定外ケースをAIに質問し、例外処理のコードを追加してもらう。

こうした学習プロセスを繰り返すと、VBAに慣れていない方でも着実に理解が深まるはずです。


6. 実運用でのベストプラクティス

  1. 「Call データベース接続」など共通モジュールを先に整備
    • 接続文字列は安全に管理(暗号化やDSNファイル、Windows認証など)。
    • 開発環境で問題なく動作するか確認したら、本番環境へのデプロイ手順を確立する。
  2. バージョン管理
    • AI生成後のコードをいきなり上書きせず、バージョン管理(Git等)にコミットして、変更履歴を明確に。
  3. セキュリティとパフォーマンスの両立
    • 大量データを扱う場合は、ストアドプロシージャやパススルークエリを適宜活用。
    • 不要な外部ライブラリをむやみに使わないなど、脆弱性リスクを下げる。
  4. テストとリファクタリングの習慣化
    • AIで生成したコードをベースに、「ユニットテスト」「結合テスト」を行い、問題点を洗い出して改良する。
    • 不要になった変数や重複した処理は定期的に整理し、可読性を維持。

7. まとめ:AIとの“協業”でVBA開発をスピードアップ

生成AI は、VBA初心者でも「こういうことがやりたい」という要望を短時間で形にしてくれる頼れるパートナーです。

  • プロンプトを丁寧に書き、要件を具体的にする
  • 生成されたコードを自分の環境でテスト・微調整する
  • 学習と検証を繰り返し、最適な形に仕上げる

このフローをまわすことで、開発効率の向上コスト削減はもちろん、VBAのスキルアップにもつながるでしょう。
特に、Access×SQL Server のようにフロントエンドとバックエンドを分けて開発する場合は、AIにコード雛形を作らせ、最終的に自分でロジックを足すというスタイルが一番相性が良いと考えられます。

今後も当ブログでは、Access開発を中心とした効率的なシステム構築のヒントを紹介していきます。 生成AIを上手に活用しながら、VBA初心者でもスピーディかつセキュアに開発を進めていきましょう。

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました