生成AI活用研究
AI時代におけるVBAシステム開発に関する提言

Geminiを中心に生成AIの活用と研究の記録
公開日:2025-12-08 最終更新日:2025-12-08

AI時代におけるVBAシステム開発に関する提言


個別事情はあるので一概には言えませんが、今の時点でVBAでシステム開発するのは、さすがに再検討した方が良いと思います。とくに、AIで分析できないような独自実装は避けた方が無難です。
なお、転記や軽い自動化であれば、今でも、そしてこれからも有効な使い方だと思います。


もしこれからVBA開発をするなら、全面的にAIを活用した開発を目指すべきです。
旧来の開発手法、特に低品質な実装慣習は完全に捨て去るべきです。
高凝集・低結合の原則に反する実装、すなわちAIの解析を妨げる悪しき慣習は、完全に捨て去ってください。
AIが作成・検証しやすいプログラミングを目指すべきです。

ここで重要になってくるのは関数分割です。
基本的に最も推奨されるのは、高凝集・低結合の機能分割がよいです。
さらに「高凝集・低結合」という原則を徹底するだけでなく、「AIが解析しやすい純粋性」を意識してください。

具体的には、入出力処理と純粋なビジネスロジックを厳格に分離するデータ分割を核とし、各関数が単一の機能に集中し、外部依存を引数と戻り値のみに限定することで、AIが検証しやすい独立した部品としてコードを構築します。

AI時代のVBA開発は、用途を限定し、開発手法を変革し、コードの純粋性と独立性を最優先します。
純粋性の追求こそが、AIがコードを書きやすく、さらにAIに頼った保守が可能になるための鍵となります。
これこそが、AIの力を借りて高品質で保守性の高いコードを継続的に生み出す唯一の道筋となります。

以上の文章は筆者が書いたものです。
この文章をAIに入れて、補足してもらったものが以下になります。


AIによる補足

1. 「純粋性」がAI連携に不可欠な理由

レポートで強調した 「純粋性」 は、純粋関数設計(Pure Function Design) に基づきます。この原則に従うことで、AIはコードを「ブラックボックス」ではなく「数学的な関数」として扱えるようになります。

純粋性の二つの特性:
  • 参照透過性(Referential Transparency)
    同じ入力(引数)を与えれば、何度実行しても必ず同じ出力(戻り値)を返す。
  • 副作用の排除
    関数の実行が外部状態(グローバル変数、シートのセル値、ファイルなど)を一切変更しない。

これにより、AIは関数の引数と戻り値のパターンを大量に学習し、最適なテストケース(単体テスト)を自動生成できます。結果として、コード生成・検証・デバッグの精度と効率が大幅に向上します。


2. 関心事の分離(Separation of Concerns)

AIが解析しやすいコードを作るうえで、関心事の分離(SoC) は極めて重要です。

関心事の分離とは:
「ひとつのコード(関数・モジュール)が、ひとつの種類の責務だけを扱う」
という設計原則です。

VBAでは特に以下の3つを明確に分離すると、AIの解析能力・生成能力が最大限発揮されます。
  1. 入出力(I/O)
     例:シート読み書き、ファイル操作、UI、MsgBox
  2. ビジネスロジック(計算・判断・変換)
     純粋関数として外部依存を排除
  3. アプリケーション制御(フロー制御)
     どの関数をいつ呼ぶかを管理
特にI/Oとロジックを混在させるとAIがコードの意味を切り分けられず、生成・テスト・保守の精度が著しく落ちます。

3. VBAにおける悪しき慣習の具体例

「AIの解析を妨げる悪しき慣習」は、純粋性の原則に反する実装です。VBAで特に見られる例は以下の通りです。
  • グローバル変数への依存
    関数内部で Public 変数を読み書きする。参照透過性を損ない、関数の出力が入力以外に依存してしまう。
  • シート・セルへの直接アクセス
    Range("A1").Value = data や Cells(1,1).Value など。
    意図せず外部状態を変更し、副作用を生む。
  • イベントドリブン処理の巨大化
    Worksheet_Change やユーザーフォームのボタンクリックイベントに複雑なロジックを詰め込む。
    高凝集・低結合に反し、AIによる部分的な検証を困難にする。

4. エクセル数式とVBA純粋関数の関係

  • エクセル数式(ワークシート関数)は純粋関数のモデル
    • 入力(セル値)に応じて常に同じ結果を返す(参照透過性)。
    • 外部状態を変更せず副作用がない。

AI時代のVBA開発では、VBAコード内にこの品質と特性を持つ関数を増やすことが理想です。
こうすることで、Office製品との親和性を保ちつつ、AIによる保守や解析が容易になります。

5. 技術的負債の回避と継続可能性

低品質なVBAコードは、手作業による保守工数を増やす 「技術的負債」 となります。
AIが解析できないコードは、この負債を増加させる原因です。

純粋関数設計を採用することは、開発段階から AIによる保守を前提とした構造 を作ることを意味します。
結果として、将来の技術的負債を防ぎ、AIを活用して高品質かつ保守性の高いVBAコードを継続的に生成できる、最も費用対効果の高い戦略となります。


※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。




新着記事NEW ・・・新着記事一覧を見る

電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
実績/予算ごとの3年間通算累計を出力|エクセル練習問題(2025-11-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ