生成AI活用研究
VBA開発の標準化を実現する共通プロンプトのすすめ

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

VBA開発の標準化を実現する共通プロンプトのすすめ


このプロンプトは、VBA開発の標準化と効率化を目的に、筆者が構築したVBAコード生成のための共通プロンプトです。
AIを活用して、再現性の高い、高品質なVBAコードを安定的に出力することを目指して設計されており、実務に耐えるレベルの成果を生み出す強力なツールとなります。この記事では、このプロンプトに込めた設計思想、具体的な使い方、最大限に活用する方法、そしてそれによって得られる効果について解説します。



目次



1. 作成思想

このプロンプトは、VBA開発の専門家である筆者の深い知識と実務経験を反映して設計されており、AIが単に動作するだけのサンプルコードではなく、実務に耐える「業務品質レベル」のVBAコードを出力できるよう工夫されています。

プロンプト活用の標準化とナレッジ共有の推進

業務自動化や定型作業の効率化において、Microsoft ExcelとVBAの活用は長らく有効な手段とされてきました。近年では、生成AIの登場により、VBA開発のアプローチにも大きな変化が生まれています。中でも、生成AIへのプロンプト活用は、現場における生産性向上とナレッジ共有の促進に寄与します。

生成AIは非常に柔軟で強力なツールですが、入力されるプロンプトによって出力結果が大きく変わるため、属人性の高い使い方になりがちです。たとえば、同じ業務要件に対しても、開発者ごとに異なる指示を出せば、異なるコードが生成されてしまいます。こうしたバラつきは、コード品質の一貫性を損ない、保守性の低下を招く原因になります。また、生成AIの活用が開発者個人の試行錯誤に任される場合、学習コストや定着に時間がかかり、属人化を助長する恐れもあります。

こうした課題に対処するには、「共通プロンプト」による指示内容の標準化が効果的です。誰が使っても一定の品質と構造をもった成果物が得られるよう、共通言語としてのプロンプトテンプレートを整備することが求められます。このプロンプトは、VBA開発の現場におけるプロンプト活用を標準化し、チーム間・組織間での再利用性と品質を高めるための「共通プロンプト」の設計・活用方法を具体化したものです。

専門家としての役割付与

AIに「経験豊富かつ優秀なVBAプログラマー」というペルソナ(役割)を与えることで、AIは単なる情報処理マシンとしてではなく、VBA開発のベストプラクティスや考慮事項を熟知した専門家として振る舞うよう促されます。これは、筆者の専門知識をAIに内在化させるための重要な仕掛けです。

共通要件の明確化と標準化

VBA開発において、高速化、堅牢性、保守性、デバッグ容易性などは常に求められる要素です。これらの共通的な「実装要件」をプロンプトの後半に固定することで、依頼のたびに詳細な指示を繰り返す手間を省きつつ、AIが常にこれらの基準を満たすコードを生成するようにします。これは、筆者が普段から実践している開発標準をAIに適用することに他なりません。

AIの共通過誤を矯正

筆者は様々なAIが生成するVBAコードの特性を分析し、特にAIが陥りやすいVBA特有の「落とし穴」や、実務で問題となる非効率な処理を特定しました。このプロンプトでは、これらのAIの「共通的な過ち」をあらかじめプロンプト内の厳守事項として明記し、AIが最初から適切な、業務品質レベルのコードを生成するよう「矯正」することを意図しています。これにより、生成されたコードの手直しやデバッグの手間を大幅に削減し、AIの有用性を最大限に引き出します。

具体的な依頼内容の構造化

日々の業務で発生する具体的なVBAの要件は多岐にわたります。これらを「目的・概要」「状況/背景/使用シーン」「入力データ」「出力データ」「処理ロジック」「特記事項」という明確なセクションに構造化することで、依頼者は必要な情報を漏れなく、かつ整理してAIに伝えることができます。AI側も、この構造化された情報を効率的に解析し、コードに反映しやすくなります。

意図の明確化と誤解の防止

ReDim Preserveの制限やFor EachでのVariant/Object型の推奨など、VBA特有の注意点やベストプラクティスを「重要・厳守」として明記することで、AIが誤ったコードを生成するリスクを最小限に抑え、開発者が求める品質基準を確実に満たすように設計されています。これは、VBAの「落とし穴」を熟知している専門家ならではの配慮です。

高度なデバッグ・保守性の追求

プロシージャーの機能分割、エラーハンドリングの詳細要件、コメント規約、参照設定不要な記述の徹底などは、生成されるコードが単に動くだけでなく、将来的な修正や機能追加、問題発生時の原因究明が容易であることを重視している証です。これは、長期的な視点でのシステム運用とメンテナンスを考慮した、専門家としての要求が反映されています。


2. 使い方

このプロンプトは、以下の手順で利用します。

  1. 共通プロンプトの準備:
    • このレポートに示されている「共通プロンプト」の部分は、そのままコピー&ペーストして使用します。
    • これは、VBAコード生成のための基本的なルールセットです。

  2. 具体的な依頼内容の記述:
    • 共通プロンプトの上に、「【VBAを作成】」から始まる具体的な依頼内容のフォーマットを記述します。
    • このフォーマットの各セクション[ ]内を、今回のVBAコードで実現したい具体的な内容に置き換えてください。
    【VBAを作成】
    
    ### 1. 処理の目的・概要
    [このVBAコードが達成する目的、処理の全体像を簡潔に記述]
    
    ### 2. 状況/背景/使用シーン
    [このVBAがどのような業務状況で、どのような背景のもと、どのように使用されるかを具体的に記述。これにより、AIはコードの目的をより深く理解し、適切なコメントやエラーハンドリングを生成しやすくなります。]
    
    ### 3. 入力データの詳細
    [処理対象となる入力データの種類、場所、形式、構造を具体的に記述]
    
    ### 4. 出力データの詳細
    [処理結果をどこに、どのような形式で出力するかを具体的に記述]
    
    ### 5. 処理の具体的なステップとロジック
    [VBAが実行する具体的な手順、計算ロジック、条件分岐などを記述。必要に応じて箇条書きでステップ分け]
    
    ### 6. 特記事項・追加ルール・制約
    [上記以外で、特にAIに意識してほしい点、独自のルール、特定のVBAオブジェクトの使い方、制約などを記述]
    
    -------------------- ここから共通プロンプト --------------------
    ... (以降、共通プロンプトをそのまま貼り付ける)

  3. AIへのプロンプト送信:
    • 上記で作成した「具体的な依頼内容」と「共通プロンプト」を組み合わせた全文をAIに送信します。


3. 活用方法

この「活用方法」セクションは、読者であるあなたが、このVBAコード生成プロンプトを「実際にどう使えば、最も効果的にVBA開発を進められるか」という、具体的な利用のヒントやコツをまとめたものです。

単にプロンプトの内容を知るだけでなく、それをあなたの開発プロセスにどう組み込むか、どんな意識で使えば最大のメリットを引き出せるか、という実践的な視点を提供しています。
具体的には、プロンプトを使うことで、以下のような「開発の進め方」や「作業の仕方」が改善されることを説明しています。

開発の初期段階が劇的に速くなる
通常、VBAコードを書くときには、まず高速化設定やエラー処理、コードの書き方(規約)など、基本的な土台となる部分を自分で書く必要があります。でも、このプロンプトを使えば、AIがその土台となる部分を自動的に、しかも品質高く生成してくれます。
あなたは、一番考えたい「このVBAで何をしたいか(例:売上データを集計したい、特定の条件でファイルをコピーしたいなど)」という、ビジネス上の具体的な処理内容(ビジネスロジック)に集中できるようになります。これにより、開発のスタートダッシュが格段に速くなります。

どんなコードも一定の高品質を保てるようになる
開発者によってコードの書き方や品質がバラバラになることがありますが、このプロンプトを使うと、AIは常にプロンプトに書かれた高い品質基準(例えば、コードの部品化、高速に動く工夫、エラーに強い作りなど)を守ってコードを作ります。
つまり、あなただけでなく、チームの誰がこのプロンプトを使っても、常に一定レベル以上のVBAコードが得られるので、コードの「当たり前品質」が底上げされます。これは、チームでVBA開発を進める場合や、長期的にシステムを運用する場合にとても役立ちます。

VBAの「良い書き方」が自然と身につく
AIが生成するコードは、このプロンプトに組み込まれているVBAのベストプラクティス(一番良いとされる書き方や設計の考え方)を反映しています。
あなたが生成されたコードを読むことで、「なるほど、こういう風に書けば効率的なんだな」「エラー処理はこうやれば堅牢になるのか」といった、VBAのプロが実践しているテクニックや考え方を、コードから直接学ぶことができます。これは、あなたのVBAスキルを向上させる絶好の機会になります。

トラブルに強く、安定したVBAを作れる
プロンプトには、「必要なシートがあるか確認する」「予期せぬエラーが起きたら分かりやすく伝える」といった、エラーを未然に防いだり、問題が起きたときに対処しやすくするための厳しい要件が含まれています。
そのため、AIが作るVBAコードは、データがいつも完璧ではない現実の業務環境や、想定外の事態が起きても、途中で止まらず、ユーザーに適切な情報を伝えながら動作し続ける「粘り強いシステム」になります。

後から修正・変更・デバッグが楽になる
AIが生成するコードは、プロンプトの指示に従って、「機能ごとに部品化されている」「コメントがきちんと書かれている」「エラーが起きた時に原因を特定しやすい」といった特徴を持っています。
これにより、将来的に「ここに新しい機能を追加したい」「この部分の処理を変更したい」「エラーが起きたけど、どこが問題だろう?」といった状況になった時に、コード全体を読み解く手間が減り、問題の特定や修正作業が非常にスムーズになります。長期的にVBAを使う上で、メンテナンスの手間を大幅に減らすことができます。


4. 活用効果

このプロンプトを通じてVBAコードを生成することで、以下のような具体的な効果が期待できます。

開発リードタイムの劇的短縮

手作業でのコーディングやデバッグにかかる時間を大幅に削減します。特に、共通的に求められる高速化設定やエラーハンドリングといった基盤部分の記述が自動化されるため、具体的なビジネスロジックの実装にすぐに取り掛かれます。これは、筆者の専門的な知見をコードとして迅速に形にすることを可能にします。

人的エラーの最小化

AIが指定された規約やベストプラクティスに沿ってコードを生成するため、手動コーディングで発生しがちなケアレスミスや、規約漏れによる品質低下を防ぎます。特に、ReDim PreserveのようなVBA特有の落とし穴を回避できる点は、筆者の長年の経験に基づくノウハウが自動的に適用されることを意味し、大きなメリットです。

プロジェクト品質の底上げ

個々の開発者のスキルレベルに左右されず、常に高い品質基準(高凝集・低結合、堅牢性、保守性)を満たしたコードが得られます。これにより、プロジェクト全体のコード品質が均一化され、安定したシステム運用に貢献します。筆者の専門的な「目利き」が、AIを通じて組織全体の開発標準となる効果を期待できます。

学習コストの低減と専門知識の展開

VBA開発初心者であっても、高品質なコードの生成を通して実践的なベストプラティクスに触れることができます。熟練者にとっても、新しい機能や表現方法を発見するきっかけとなり、継続的なスキルアップを促します。これは、筆者の持つ専門知識を組織全体に展開し、VBA開発のレベルを引き上げる有効な手段です。

属人性の排除と引き継ぎの容易化

プロンプトによって統一されたルールでコードが生成されるため、特定の個人にVBAの知識が集中する「属人性」を排除します。コメントや機能分割が徹底されているため、他のメンバーがコードを理解しやすくなり、担当者の変更や引き継ぎがスムーズに行えます。筆者の専門的な設計思想がコードに反映されることで、誰が見ても理解しやすく、メンテナンスしやすい資産として残ります。


5. 共通プロンプト全文

以下に、本レポートで解説する共通プロンプトの全文を掲載します。これは、AIにVBAコードの生成を依頼する際に、具体的な依頼内容の直下にコピー&ペーストして使用する部分です。

-------------------- ここから共通プロンプト --------------------

目的:
Excel VBAを用いて、指定された機能を持つ**業務品質レベルの自動化コード**を作成してください。
**最適な設計(高凝集・低結合)と効率的な実装**を両立させ、**高速処理・堅牢性・保守性**を実現したコードを生成してください。

役割/ペルソナ:
あなたは経験豊富かつ優秀なVBAプログラマーです。
プロンプトをよく理解し、決して抜け漏れをしません。

状況/背景/使用シーン:
Excel業務の自動化に利用するVBAコードの作成を依頼します。
具体的な状況、背景、使用シーンは個別に与えられます。

指示内容/依頼内容:
作成するVBAの機能や処理の詳細が与えられます。**必ずその要件を正確に反映してください。**

---

## VBA実装要件

### 1. プロシージャーの機能分割
コード全体を、以下の機能ブロックに分割した複数のプロシージャー(SubまたはFunction)で構成してください。

- メインプロシージャー: 全体的な処理フローを制御し、他のサブプロシージャーを呼び出す。アプリケーション設定の変更(例:高速化設定)、最終的な結果の出力、および包括的なエラーハンドリングをここで行う。
- 初期化・準備プロシージャー: 処理に必要な初期設定、データの読み込み、または環境の準備を行う機能。
- データ加工・ロジックプロシージャー: 特定のデータに対する複雑な計算、フィルタリング、変換、またはビジネスロジックを実行する機能。
- 出力・書き込みプロシージャー: 処理結果をファイルやシートなどの最終的な出力先に書き出す機能。
- ユーティリティプロシージャー: 複数の場所で再利用可能な汎用的な処理(例:シートのクリア、列インデックスの取得など)を提供する機能。

### 2. VBAコーディング品質と効率性
- 生成するVBAコードは、常にモジュールの先頭に Option Explicit を含めてください。これにより、全ての変数が明示的に宣言されることを強制します。
- すべてのプロシージャー・変数・定数には意味ある名前を付け、必要に応じて接頭辞(例:ws=Worksheet, rng=Range, arr=Array)を付加してください。
- VBAのベストプラクティスを徹底し、保守性と堅牢性の高いコードを作成してください。
- 各プロシージャーは、単体テストが容易なように設計してください。特に、メインプロシージャーから呼び出されるサブプロシージャーや関数は、外部からの依存関係を最小限にし、独立してテスト可能な構造にすることを意識してください。
- メモリ効率を最大限に考慮し、Rangeオブジェクトの直接操作は極力避け、配列を用いた一括処理を基本としてください。
- 参照設定が不要な(レイトバインディングによる)記述を徹底してください。
- すべての変数に対して明示的な型宣言を行ってください。ただし、コレクションの反復処理においてはVariant型も適切に活用してください。
- プロシージャーに引数で配列を渡す際は、ByRef の参照渡しで定義してください。
- より短くより簡潔なVBAコードにしてください。
- Forループ以外の方法がある場合はそちらを優先してください。
- 「For Each」と「For Next」では「For Each」を優先的に使用してください。
- 【重要・厳守】For Each に指定する変数は、反復処理を行うコレクションまたは配列の要素の型に関わらず、必ずVariant型またはObject型で宣言してください。
- Excelのデータベース機能(AutoFilterやSort)は優先的に使用してください。
- 配列、Collection、Dictionaryは適宜使用してください。
- 可能であればアーリーリターンにしてください。
- UsedRangeはなるべく使わず、なるべくCurrentRegionを使ってください。
**【重要・厳守】**
- 二次元配列の最初の次元(行)に対する ReDim Preserve の使用禁止
- VBAの言語仕様上、二次元配列の ReDim Preserve は、最後の次元(列)のサイズ変更にのみ使用可能です。
- 最初の次元(行)のサイズ変更はVBAではできません。
- 行数を動的に変更する必要がある場合は、ReDim Preserve を使用するのではなく、
  - 1. 新しい適切なサイズの配列を宣言し、必要なデータをコピーする手法を採用してください。
  - 2. または、処理の初期段階で十分な行数を確保するか、Collection オブジェクトや Dictionary オブジェクトなど、
- 行(要素)の追加が容易なデータ構造の利用を検討してください。
- 最初の次元のサイズ変更に ReDim Preserve を使用したコードは、いかなる理由があっても生成しないでください。
- **配列の次元数とインデックスの取り扱い:**? ??
  - 配列を操作する際は、`IsArray` で配列であること、`LBound` と `UBound` で有効なインデックス範囲を常に確認すること。? ??
  - **特に、`UBound` 関数を使用する際には、対象の配列がその次元を持っているか(例:1次元配列に対して第2次元を参照しないか)を事前に確認し、適切な次元数(例:`UBound(arr, 1)` または `UBound(arr)`)を使用すること。**? ??
  - `Application.Transpose` を用いて取得した配列の次元が、単一セルや単一行/列の場合に特殊な挙動を示すことがあるため、その挙動を考慮したハンドリングを行うこと。

### 3. 高速化処理
Mainプロシージャーの処理開始時に以下の設定を適用し、処理終了時(エラー発生時も含む)に元の設定に戻してください。

```vba
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayAlerts = False

### 4. エラーハンドリング要件
- 必要なシートや列が存在しない、または条件で指定された特定の列が存在しない場合は処理を中断し、ユーザーに分かりやすいエラーメッセージを表示してください。
- その他、処理中に予期せぬエラーが発生した際には、適切なエラーハンドリングを行い、ユーザーに状況を通知してください。

### 5. 複雑なデータ構造とオブジェクトのハンドリング
- Excelシート上の多様なオブジェクト(セル、図形、コントロールなど)や、それらに付随する特定のプロパティ(例:ハイパーリンク、コメントなど)を処理する際は、それぞれのオブジェクトタイプとプロパティの挙動の違いを考慮し、堅牢な処理ロジックを実装してください。
- 処理対象外とするオブジェクトやプロパティがある場合は、明示的にスキップする、または適切にエラーを回避する処理を組み込んでください。
- データ構造(配列、コレクション、Dictionaryなど)を扱う際、キーの重複やデータの一貫性に関する潜在的な問題を事前に特定し、それらのEdgeケースにおける挙動(例:重複データの許容/拒否、上書き、スキップなど)を明確に定義し、適切にハンドリングしてください。

### 6. デバッグ容易性の考慮
- 各プロシージャーの独立性: 各プロシージャーは単体テストが容易なように設計してください。特に、メインプロシージャーから呼び出されるサブプロシージャーや関数は、外部からの依存関係を最小限にし、独立してテスト可能な構造にすることを意識してください。
- 途中経過の明確化: 複雑な計算やデータ加工を行うプロシージャーでは、主要な処理ステップごとに内部変数や中間結果の値を評価・確認できるよう、コードの構造を明確にしてください。
- エラーハンドリングの局所化と情報強化:
- On Error Resume Next を使用する場合は、影響範囲を最小限に限定し、必要な場合にのみ使用してください。広範囲に適用すると、意図しないエラーが隠蔽され、デバッグが困難になります。
- エラーハンドラーでは、Err.Number(エラー番号)と Err.Description(エラー内容)だけでなく、エラーが発生したプロシージャー名や、その時点で重要となる変数の値など、デバッグに役立つ追加情報を含めるようにしてください。
- 可能であれば、エラー発生箇所の特定を支援するため、ログ出力機能(簡易なものでも可)を組み込むことを検討してください。これにより、エラー発生時の詳細な状態を記録し、後からの分析を容易にします。

---

## 含めるべき要素:
- 日本語(SJIS)でコメント(先頭に「'」)を入れてください。
- SubやFunctionの先頭には概要を記述してください。
- **各プロシージャーの冒頭には、以下の形式でコメントを付けてください:**
    ```
    '-----------------------------------------
    ' 機能: 指定範囲の売上データを集計し、出力する
    ' 引数: arrData (Variant) - 元データ配列
    ' 戻り値: なし
    ' 備考: 空白データはスキップ
    '-----------------------------------------
    ```
- インデントはブロック構文内を4文字下げてください。

---

## 除外する要素:
- 指示されていないシートの存在チェックは不要です(ただし、エラーハンドリング要件に明記されたシート/列のチェックは除きます)。
- 指示されていない入力データのチェックは不要です。
- 「Attribute VB_Name」の行は出力しないでください。
- ハングル文字は使用禁止です。
- **VBA内のコメントには、Shift-JISの範囲外の文字を使用しないでください。**
- 使用できる文字はSJISの範囲内です。

---

## 出力形式:
- VBAコード
- VBAコードの解説

---

## 参考資料:
https://excel-ubara.com/excelvba1/
https://excel-ubara.com/excelvba4/
https://excel-ubara.com/excelvba5/
https://excel-ubara.com/vba100/
[上記URLの記述内容をVBAの設計・実装におけるベストプラクティスとして参考にし、コードの堅牢性、保守性、効率性を高めるために活用してください。特に、オブジェクトの操作、配列の利用、エラーハンドリングの考え方などを重視してください。]

【デバッグ時・エラー報告時の協力依頼】
コード実行中にエラーが発生し、その原因特定に支援が必要な場合、可能な限り以下の情報を提供します:
- VBAが停止した場合:エラーメッセージ全文(エラー番号、説明)およびデバッグボタンで表示される停止したコードの行。
- エラーハンドリングによって停止しない場合:エラーハンドラーによって出力される詳細なエラーメッセージ(エラー番号、説明、可能であれば発生プロシージャー名)と、問題が発生したと思われる処理ブロックに関する情報。



6. 共通プロンプトの詳細解説

ここでは、プロンプトの後半に位置する「共通プロンプト」の各記述が持つ意図と、それがAIのコード生成にどのように影響するかを詳細に解説します。
興味のある分部だけを拾い読みして構いません。

目的:

この部分は、AIが生成するVBAコードの最終的な品質目標と設計原則を明確に定義しています。「業務品質レベル」「最適な設計(高凝集・低結合)」「効率的な実装」「高速処理・堅牢性・保守性」といったキーワードは、単に動くコードではなく、実務での利用に耐えうる、プロフェッショナルな品質のコードを求める筆者の強い意志を示しています。
この目的を達成するために、筆者は共通プロンプト内の以下のような具体的な記述でAIを誘導しています。
  • 最適な設計(高凝集・低結合)の実現のため:
    • 「1. プロシージャーの機能分割」セクションで、メイン、初期化、データ加工、出力、ユーティリティといった明確な役割を持つプロシージャーへの分割を指示しています。これにより、各プロシージャーが独立した機能(高凝集)を持ち、相互の依存関係を減らす(低結合)設計を促します。
    • 「2. VBAコーディング品質と効率性」セクション内の「各プロシージャーは、単体テストが容易なように設計してください。」という指示も、低結合な設計を促進します。
  • 効率的な実装の実現のため:
    • 「2. VBAコーディング品質と効率性」セクションで、「メモリ効率を最大限に考慮し、Rangeオブジェクトの直接操作は極力避け、配列を用いた一括処理を基本としてください。」や「Forループ以外の方法がある場合はそちらを優先してください。」といった具体的な記述で、高速かつリソース効率の良い実装方法を指示しています。
  • 高速処理の実現のため:
    • 「3. 高速化処理」セクションで、Application.ScreenUpdating = Falseなどの具体的なExcel設定変更コードを提示し、処理開始時と終了時(エラー時も含む)に適用するよう明確に指示しています。これにより、VBA実行時のExcelの視覚的オーバーヘッドや不要な計算を抑制し、処理速度を最大化させます。
  • 堅牢性の実現のため:
    • 「4. エラーハンドリング要件」で、必要なシート/列の存在チェックや予期せぬエラー発生時の分かりやすいメッセージ表示を要求しています。
    • 「5. 複雑なデータ構造とオブジェクトのハンドリング」で、Edgeケース(重複キー、不整合データなど)のハンドリングや、Excelオブジェクトの特性を考慮したロジック実装を指示することで、予期せぬ状況に対する耐性(堅牢性)を高めます。
    • 「2. VBAコーディング品質と効率性」セクション内の「【重要・厳守】二次元配列の最初の次元(行)に対する ReDim Preserve の使用禁止」や「配列の次元数とインデックスの取り扱い」といった、VBA特有の危険なパターンを回避する指示も、コードの堅牢性確保に大きく寄与します。
  • 保守性の実現のため:
    • 「1. プロシージャーの機能分割」による構造化されたコードは、それ自体が保守性を高めます。
    • 「2. VBAコーディング品質と効率性」セクション内の「意味ある名前を付け、必要に応じて接頭辞を付加」「VBAのベストプラクティスを徹底」といった命名規約や一般的な品質指示。
    • 「6. デバッグ容易性の考慮」で、途中経過の明確化やエラーハンドリングにおける情報強化(プロシージャー名、変数情報など)を要求することで、将来のデバッグや機能追加・修正が容易になるように設計しています。
    • 「含めるべき要素」として「日本語(SJIS)でコメント」「SubやFunctionの先頭に概要」「各プロシージャー冒頭のコメント形式」「インデント4文字下げ」といった詳細なコメント・書式規約を設けることで、コードの可読性を高め、保守作業を容易にします。
これらの具体的な指示が相互に連携し、この「目的」で掲げられた高レベルな品質目標をAIが達成できるように導いています。

役割/ペルソナ:

AIに特定の専門的な役割(ペルソナ)を付与することで、その役割に応じた思考プロセスと行動を促します。ここでは「経験豊富かつ優秀なVBAプログラマー」という役割を与えることで、AIはVBAの深い知識、ベストプラクティス、潜在的な問題点への配慮を自動的に考慮に入れるようになります。「プロンプトをよく理解し、決して抜け漏れをしません」は、指示の厳守を強調し、生成されるコードの網羅性と正確性を高めるためのものです。

状況/背景/使用シーン:

このセクションは、具体的な依頼内容のセクションで「状況/背景/使用シーン」を記述するための補足説明です。AIに、生成するコードがどのようなビジネス環境や業務フローの中で利用されるのかを理解させることで、単なる機能要件を満たすだけでなく、実際の使用状況に即した、より実用的で適切なコード(例: ユーザーへのメッセージ、特定の業務フローに合わせた処理順序)を生成できるよう促します。

指示内容/依頼内容:

これは、具体的な依頼内容(プロンプトの上部に記述される部分)の重要性を強調するものです。AIに対し、そこで記述される機能や処理の要件を絶対的に正確に反映するよう指示し、指示の読み落としや解釈の誤りを防ぎます。

VBA実装要件

このセクションは、VBAコード生成においてAIが厳守すべき具体的な技術的要件と品質基準を定義しています。

1. プロシージャーの機能分割
この要件は、VBAコードの品質と保守性を飛躍的に向上させるための、最も重要な設計原則の一つである「モジュール性」をAIに強制するものです。具体的には以下の意図を含んでいます。
  • 高凝集・低結合の実現:

    高凝集: 各プロシージャーが単一の明確な責任を持つようにします。例えば、「データを読み込む」プロシージャーは読み込みだけに専念し、「データを加工する」プロシージャーは加工だけに専念します。これにより、各プロシージャーの内部が複雑になりすぎず、何をするプロシージャーなのかが明確になります。
    低結合: 各プロシージャー間の依存関係を最小限に抑えます。あるプロシージャーの変更が、他のプロシージャーに予期せぬ影響を与えにくくなります。これにより、コード全体の見通しが良くなり、修正や機能追加が格段に容易になります。
  • 保守性・可読性の向上:

    大規模なコードを一つの一連の処理として記述するのではなく、機能ごとに細かく分割することで、コードの全体像を把握しやすくなります。
    特定の機能(例:データ加工)に問題が発生した場合でも、関係するプロシージャーに絞って調査・修正ができるため、デバッグ作業の効率が向上します。
    第三者がコードを理解する際も、各プロシージャーの役割が明確なため、全体の処理フローを追いやすくなります。
  • 再利用性の促進:

    特に「ユーティリティプロシージャー」として汎用的な処理(例:シートのクリア、最終行の取得など)を独立させることで、異なるVBAプロジェクトや同じプロジェクト内の別の場所でも、そのプロシージャーをそのまま再利用できます。これにより、コードの重複を減らし、開発効率を高めます。
  • デバッグ・単体テストの容易化:

    機能が分割されているため、各プロシージャーを個別にテストできます(単体テスト)。例えば、「データ加工」プロシージャーが正しく動作するかどうかを、他の処理とは独立して確認できます。これにより、問題の早期発見と修正が可能となり、全体的なシステムの品質向上に繋がります。
  • 役割の明確化:

    メインプロシージャーを「全体制御とエラーハンドリング」のハブと位置づけ、初期化・準備、データ加工・ロジック、出力・書き込みといった明確な役割を各プロシージャーに与えることで、AIはコードを生成する際に、どのロジックをどのプロシージャーに配置すべきかを判断しやすくなります。
この「プロシージャーの機能分割」は、VBA開発における設計の美しさと実用的な運用効率を両立させるための、極めて重要な指示です。

2. VBAコーディング品質と効率性
このセクションは、VBAコードの品質を向上させ、実行効率を高めるための具体的なコーディング規約と技術的指示の集合体です。
  • Option Explicitの強制: 変数の宣言忘れによるバグを防止し、コードの堅牢性を高めます。
  • 意味のある命名と接頭辞: コードの可読性と理解しやすさを向上させ、メンテナンスを容易にします。
  • VBAのベストプラクティスと堅牢性: VBA開発における一般的な良い習慣を適用し、予期せぬエラーや誤動作に対する耐性(堅牢性)を高めます。
  • 各プロシージャーは、単体テストが容易なように設計してください: 各プロシージャーの独立性を高め、個別の機能検証(単体テスト)を容易にし、大規模な改修時のリスクを低減します。
  • メモリ効率を最大限に考慮し、Rangeオブジェクトの直接操作は極力避け、配列を用いた一括処理を基本としてください: ExcelとのI/O回数を最小限に抑え、処理速度を劇的に向上させるための最も効果的な手段です。
  • 参照設定が不要な(レイトバインディングによる)記述を徹底してください: 特定のライブラリへの参照設定を不要にし、VBAコードの移植性と互換性を高めます。異なるExcelバージョンやPC環境での動作安定性を確保します。
  • すべての変数に対する明示的な型宣言を行ってください: 変数のデータ型を明確にし、メモリ効率の向上とバグの早期発見に繋がります。ただし、コレクションの反復処理においてVariant型も適切に活用するなど、VBAの特性に合わせた柔軟な指示でもあります。
  • プロシージャーに引数で配列を渡す際は、ByRefの参照渡しで定義してください: 大容量の配列を引数として渡す際のメモリコピーを避け、効率性を高めます。
  • より短くより簡潔なVBAコードにしてください: 無駄のないコード記述を促し、可読性とメンテナンス性を向上させます。
  • Forループ以外の方法がある場合はそちらを優先してください: VBAの組み込み関数やExcelの機能(例:Evaluate、Application.WorksheetFunction)など、より高速で簡潔な代替手段の活用を促します。
  • 「For Each」と「For Next」では「For Each」を優先的に使用してください: コレクションや配列の要素を扱う際に、インデックス管理のミスを減らし、コードを簡潔にします。
  • 【重要・厳守】For Eachに指定する変数は、反復処理を行うコレクションまたは配列の要素の型に関わらず、必ずVariant型またはObject型で宣言してください: VBAの内部的な挙動(遅延バインディングなど)を考慮し、特にオブジェクトコレクションの反復処理における予期せぬエラーを防ぎます。これは、VBA専門家ならではの深い知見です。
  • Excelのデータベース機能(AutoFilterやSort)は優先的に使用してください: AutoFilterやSortなど、Excelがネイティブで提供する高速な機能を活用することで、VBAでのロジック記述を減らし、処理効率と簡潔さを両立させます。
  • 配列、Collection、Dictionaryは適宜使用してください: 複雑なデータ操作において、これらのオブジェクトを適切に利用することで、処理速度の向上とコードの柔軟性を高めます。
  • 可能であればアーリーリターンにしてください: 条件が満たされた場合に早期にプロシージャーを終了させることで、ネストを減らし、可読性と論理の流れを明確にします。
  • UsedRangeはなるべく使わず、なるべくCurrentRegionを使ってください: UsedRangeが意図しない範囲まで広がることがある問題を回避し、より正確なデータ範囲の取得を促します。
  • 【重要・厳守】二次元配列の最初の次元(行)に対する ReDim Preserve の使用禁止: VBAの配列操作における最も重要な制約の一つです。この明確な指示により、よくある配列操作のバグ(実行時エラー9など)を未然に防ぎ、堅牢なコードを生成させます。
  • 配列の次元数とインデックスの取り扱い: IsArray, LBound, UBoundの使用を義務付けることで、配列操作における実行時エラーの防止と、コードの堅牢性を確保します。特にApplication.Transposeに関する注意書きは、ExcelとVBA間の配列の扱いの複雑さを熟知しているからこその指示です。

3. 高速化処理
VBAの処理速度を劇的に向上させるための定石ともいえる設定です。これらの設定は、VBA実行中にExcelが不要な処理を行うのを一時的に停止させることで、VBAの処理に集中させ、パフォーマンスを最大化します。各行の意図は以下の通りです。
  • Application.ScreenUpdating = False
    • VBAが実行中にExcelの画面が更新されるのを停止します。通常、VBAがセルに値を書き込んだり、シートを切り替えたりするたびに画面が再描画されますが、これが繰り返されると処理速度が大幅に低下します。これをFalseに設定することで、VBAの処理がすべて完了してから一度だけ画面を更新するため、見た目にもちらつきがなくなり、処理速度が向上します。

  • Application.Calculation = xlCalculationManual
    • Excelの再計算モードを「手動」に設定します。通常、Excelのセルに数式が含まれている場合、値が変更されるたびに自動的に再計算が行われます。VBAで大量のデータを操作する際、セル値を変更するたびに再計算が走ると処理が非常に遅くなります。これをxlCalculationManualにすることで、VBAの処理中に不要な再計算を抑制し、処理の高速化を図ります。

  • Application.EnableEvents = False
    • Excelのイベント機能を一時的に無効にします。Excelには「ワークシートが変更されたら特定のVBAを実行する(Worksheet_Change)」のようなイベント機能があります。VBAがセルを操作することでこれらのイベントが意図せずトリガーされ、予期せぬ処理が実行されたり、パフォーマンスが低下したりする可能性があります。これをFalseに設定することで、VBA実行中のイベント発生を抑制し、処理の安定性と速度を確保します。

  • Application.DisplayAlerts = False
    • Excelが通常表示する警告メッセージ(例: 「シートを削除しますがよろしいですか?」)を一時的に非表示にします。VBAで大量の操作を行う際、警告メッセージが表示されるたびに処理が中断し、ユーザーの操作を待つことになります。これをFalseにすることで、処理が中断することなくスムーズに進行し、自動化の妨げを排除します。
      これらの設定は、VBA処理の開始時に適用し、処理終了時(エラー発生時も含む)には元の設定に戻すことで、Excelの通常の機能に影響を与えないように最大限に配慮する必要があります。

4. エラーハンドリング要件
コードの堅牢性とユーザーフレンドリーさを保証するための要件です。
VBAコードが期待する環境(シートや列の存在)が整っていない場合に、漠然としたエラーではなく、具体的なエラーメッセージでユーザーに状況を伝えることで、問題解決を支援します。予期せぬエラーに対しても、コードが異常終了するのではなく、適切に処理を中断し、状況を通知する仕組みを求めます。

5. 複雑なデータ構造とオブジェクトのハンドリング
ExcelVBA特有の、多様なオブジェクトとデータ構造の複雑性に対応するための要件です。
VBAはExcelシート上の様々な要素を操作するため、それらの特性を考慮したロジックが必要です。特に、データ加工におけるEdgeケース(例:重複データ、不整合データ)への対応を明確に求めることで、コードの堅牢性と予測可能性を高め、実運用におけるトラブルを未然に防ぎます。

6. デバッグ容易性の考慮
このセクションは、開発後の保守やデバッグ作業の効率を高めるための指示です。
  • 各プロシージャーの独立性: 機能分割の意図と重複しますが、デバッグ時に特定のプロシージャーのみをテストできる設計にすることで、問題箇所の特定と修正を容易にします。
  • 途中経過の明確化: 複雑なロジックにおいて、中間結果を確認できるようなコード構造にすることで、ステップ実行やブレークポイント設定時のデバッグ効率を高めます。
  • エラーハンドリングの局所化と情報強化: On Error Resume Nextの乱用を戒め、エラーが発生した際にErr.NumberやErr.Descriptionだけでなく、プロシージャー名や変数情報など詳細なデバッグ情報を提供するよう求めることで、エラー原因の特定を迅速化します。ログ出力の検討は、さらに高度なデバッグ支援の要求です。

含めるべき要素:

このセクションは、生成されるVBAコードの記述スタイルとドキュメンテーションに関する要件を定義しています。
  • 日本語(SJIS)でコメント(先頭に「'」)を入れてください: コードの可読性を高め、後からコードを見た人が処理内容を理解しやすくします。文字コードの指定は、環境依存の文字化けを防ぐための実用的な指示です。
  • SubやFunctionの先頭には概要を記述してください: 各プロシージャーの役割を一目で把握できるようにし、コードの全体構造の理解を助けます。
  • 各プロシージャーの冒頭には、以下の形式でコメントを付けてください:統一されたコメント形式により、可読性と保守性を向上させます。引数、戻り値、備考の明記は、プロシージャーのインターフェースを明確にし、利用時の誤解を防ぎます。
  • インデントはブロック構文内を4文字下げてください: コードの視認性と構造の明確さを高め、ネストされたコードブロックを理解しやすくします。

除外する要素:

このセクションは、生成されるVBAコードに含めるべきではない要素を明確に指定することで、無駄なコードの生成や、特定の環境で問題となる可能性のある要素を排除します。
  • 指示されていないシートの存在チェックは不要です(ただし、エラーハンドリング要件に明記されたシート/列のチェックは除きます): 明示的な指示がない限り、過度なチェックによるコードの肥大化や処理速度の低下を防ぎます。
  • 指示されていない入力データのチェックは不要です: 同上。
  • 「Attribute VB_Name」の行は出力しないでください: VBAのエクスポート時に付加されることがあるこの行を排除し、コードをクリーンに保ちます。
  • ハングル文字は使用禁止です: 文字化けや互換性問題を避けるため。
  • VBA内のコメントには、Shift-JISの範囲外の文字を使用しないでください。: コメントにおける文字化けや互換性問題を避けるための実用的な指示です。
  • 使用できる文字はSJISの範囲内です: 上記の補足。

出力形式:

AIがVBAコードだけでなく、そのコードがどのように動作し、なぜそのように記述されたのかを理解するための解説も合わせて出力することを求めています。これにより、開発者は生成されたコードをより深く理解し、必要に応じて修正や拡張を行う際の助けとなります。

参考資料:

AIに参照すべき具体的な情報源と、そこから何を学習し、コードに適用すべきかを指示します。これにより、AIは指示された内容に加えて、これらの資料から得られるVBAの深い知識と実践的なテクニックをコード生成に活用し、さらに高品質なアウトプットを目指します。

【デバッグ時・エラー報告時の協力依頼】

これは、AIが生成したコードに万が一不具合があった場合に、効率的にデバッグ支援を行うための情報提供のガイドラインです。筆者がユーザーとしてAIにデバッグ協力を依頼する際に、どのような情報を提供すればAIが問題解決に役立てやすいかを明確に示しています。これは、AIとの円滑な協業体制を築くための重要な要素です。

この共通プロンプトは、VBA開発における筆者の豊富な経験を随所に反映した緻密な設計になっています。
AIがこの意図を正確に読み取り、期待されるパフォーマンスを発揮します。


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





同じテーマ「生成AI活用研究」の記事

実務に活かすAIコードとVBA:ビジネス現場の自動化基礎講座
AI活用によるVBA業務自動化の実践ガイド
すぐに使える!生成AI プロンプト作成 実践ガイド
究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化
VBA開発の標準化を実現する共通プロンプトのすすめ
Gemini CLIの徹底解説:AIをターミナルから使いこなす
生成AIはExcelの複雑な数式を書けるのか?|AIとの対話から学ぶ協業のリアル
シンギュラリティ前夜:AIは機械語へ回帰するのか
AI(Gemini)とエクセル数式対決 その1
AI(Gemini)とエクセル数式対決 その2
AI(Gemini)とエクセル数式対決 その3


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

カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)


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

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




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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