究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化
VBA開発において避けては通れないのがデータ転記です。
しかし、単純なセルのコピー&ペーストだけでは解決できない、複雑な条件や加工が必要となり、VBA作成に苦労した経験がある人も多いのではないでしょうか。
このプロンプトを使えば、もうゼロからコードを記述する必要はありません。
あなたが求める転記条件をAIに日本語の文章で伝えるだけで、瞬時にVBAコードが生成されます。
AI×VBAの開発手法の詳細については、以下を参照してください。
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
なぜこのプロンプトが「究極」なのか?
- 圧倒的な汎用性
- 単一セルから複数範囲、異なるシートやブック間での転記に対応。
- 条件付き転記、データの加工を伴う転記など、様々なニーズに対応可能です。
- あなたの業務フローに合わせて柔軟にカスタマイズできます。
- 時間の節約と効率化
- 手作業でのコーディング時間を大幅に削減。
- 繰り返し発生する転記作業を自動化し、生産性を向上させます。
- VBAの知識が浅い方でも、プロンプトに沿って入力するだけでプロフェッショナルなコードを入手できます。
- ミスの削減
- 手作業によるコーディングミスを排除し、正確なデータ転記を実現します。
- AIが生成するコードは、VBAのベストプラクティスに基づいています。
こんな方におすすめです
- 毎日のようにデータ転記作業に追われている事務職の方
- VBAの知識はあるけれど、コーディング時間を短縮したい開発者
- VBA学習中で、実践的なコードを手軽に手に入れたい方
- もっと効率的に業務を進めたいと考えているすべての方
「究極のVBA転記プロンプト」本体
このプロンプトを生成AIに与えることで、あなたの意図に沿ったVBAコードが生成されます。このプロンプトは、以下の「# 汎用の転記VBA作成依頼プロンプト」から始まる部分が汎用的な内容です。
この汎用プロンプトの上部に、今回の依頼における具体的な指示内容を追記して使用します。
# 汎用の転記VBA作成依頼プロンプト
## 目的
Excel VBAを用いて、特定の条件に基づきシート間でデータを転記する自動化コードを作成してください。このコードは、**機能分割**を徹底し、**高速処理**を実現するとともに、VBAにおける**配列の取り扱いに関する厳格な制約**を遵守するものとします。
---
## 要件詳細
### 1. シート構成
- 転記元シート: 別途に名前で指定します。
- 転記先シート: 別途に名前で指定します。
- 両シートの**1行目はヘッダー行**とします。
- ヘッダー名は一意であると仮定し、**列位置は見出し名で判断**するため、見出しの並び順や位置は可変です。
### 2. データ条件
- 「転記元シート」 に 条件で指定された特定の列が存在しない場合は処理を中断し、ユーザーに分かりやすいエラーメッセージを表示してください。
- その他、必要なシートや列が存在しない場合にも、ユーザーに分かりやすいエラーメッセージを表示してください。
- 別途、対象行・列の条件がる場合は指示します。
### 3. 転記対象列
- 「転記元シート」と「転記先シート」で**見出し(1行目)が完全に一致する列**のみを転記対象とします(大文字・小文字・全角・半角・空白の違いは無視する。)。
- 一致しない列(どちらか一方にしかない列)は転記せず、無視してください。
### 4. クリア処理
- 転記を開始する前に、「転記先シート」 の **2行目以降(A2セルから最終使用セルまで)の全データをクリア**してください。
---
## 実装要件
### A. プロシージャーの機能分割
* コード全体を、以下の機能ブロックに分割した複数のプロシージャー(SubまたはFunction)で構成すること。
- メインプロシージャー**: 全体的な処理フローを制御し、他のサブプロシージャーを呼び出す。アプリケーション設定の変更(例:高速化設定)、最終的な結果の出力、および包括的なエラーハンドリングをここで行う。
- 初期化・準備プロシージャー**: 処理に必要な初期設定、データの読み込み、または環境の準備を行う機能。
- データ加工・ロジックプロシージャー**: 特定のデータに対する複雑な計算、フィルタリング、変換、またはビジネスロジックを実行する機能。
- 出力・書き込みプロシージャー**: 処理結果をファイルやシートなどの最終的な出力先に書き出す機能。
- ユーティリティプロシージャー**: 複数の場所で再利用可能な汎用的な処理(例:シートのクリア、列インデックスの取得など)を提供する機能。
### B. VBAコーディング品質と効率性
- **VBAのベストプラクティス**を徹底し、保守性と堅牢性の高いコードを作成してください。
- **メモリ効率**を最大限に考慮し、Rangeオブジェクトの直接操作は極力避け、**配列を用いた一括処理**を基本とします。
- **参照設定が不要な(レイトバインディングによる)記述**を徹底してください。
- 全ての変数に対して**明示的な型宣言**を行ってください。ただしコレクションの反復処理(`For Each` ループなど)においてはコンパイルエラーを回避するため、`Variant` 型もを適切に活用してください。
- **二次元配列の `ReDim Preserve` は、最後の次元(列)のサイズ変更にのみ使用可能**です。**最初の次元(行)のサイズ変更はVBAではできません。
- プロシージャーに**引数で配列を渡す際は、`ByRef` の参照渡し**で定義してください。
### C. 高速化処理
`Main` プロシージャーの処理開始時に以下の設定を適用し、処理終了時(エラー発生時も含む)に元の設定に戻してください。これにより、**処理の高速化**を図ります。
```vba
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayAlerts = False
プロンプトの活用方法と具体例
実際にVBAコードを生成する際は、以下の例のように、汎用プロンプトの上部にあなたの具体的な要件を追記してください。

例:特定の条件でデータを転記し、完了メッセージを表示する場合
# VBA作成依頼:汎用的な転記
## 今回の依頼における具体的な指示内容
汎用のプロンプト「# 汎用の転記VBA作成依頼プロンプト」に対して、以下を具体的に指定します。
- 転記元シート: "Sheet1"
- 転記先シート: "Sheet2"
- 転記元シートにおいて、「項目A」という見出しの列のセルの値が、文字列 "A2" または "A3" である行を転記対象とする。
- 転記が完了したらメッセージ出力で知らせること。
---
# 汎用の転記VBA作成依頼プロンプト
## 目的
Excel VBAを用いて、特定の条件に基づきシート間でデータを転記する自動化コードを作成してください。このコードは、**機能分割**を徹底し、**高速処理**を実現するとともに、VBAにおける**配列の取り扱いに関する厳格な制約**を遵守するものとします。
---
## 要件詳細
### 1. シート構成
- 転記元シート: 別途に名前で指定します。
- 転記先シート: 別途に名前で指定します。
- 両シートの**1行目はヘッダー行**とします。
- ヘッダー名は一意であると仮定し、**列位置は見出し名で判断**するため、見出しの並び順や位置は可変です。
### 2. データ条件
- 「転記元シート」 に 条件で指定された特定の列が存在しない場合は処理を中断し、ユーザーに分かりやすいエラーメッセージを表示してください。
- その他、必要なシートや列が存在しない場合にも、ユーザーに分かりやすいエラーメッセージを表示してください。
- **転記元シートにおいて、「項目A」という見出しの列のセルの値が、文字列 "A2" または "A3" である行を転記対象とする。**
### 3. 転記対象列
- 「転記元シート」と「転記先シート」で**見出し(1行目)が完全に一致する列**のみを転記対象とします(大文字・小文字・全角・半角・空白の違いは無視する。)。
- 一致しない列(どちらか一方にしかない列)は転記せず、無視してください。
### 4. クリア処理
- 転記を開始する前に、「転記先シート」 の **2行目以降(A2セルから最終使用セルまで)の全データをクリア**してください。
---
## 実装要件
### A. プロシージャーの機能分割
* コード全体を、以下の機能ブロックに分割した複数のプロシージャー(SubまたはFunction)で構成すること。
- メインプロシージャー**: 全体的な処理フローを制御し、他のサブプロシージャーを呼び出す。アプリケーション設定の変更(例:高速化設定)、最終的な結果の出力、および包括的なエラーハンドリングをここで行う。
- 初期化・準備プロシージャー**: 処理に必要な初期設定、データの読み込み、または環境の準備を行う機能。
- データ加工・ロジックプロシージャー**: 特定のデータに対する複雑な計算、フィルタリング、変換、またはビジネスロジックを実行する機能。
- 出力・書き込みプロシージャー**: 処理結果をファイルやシートなどの最終的な出力先に書き出す機能。
- ユーティリティプロシージャー**: 複数の場所で再利用可能な汎用的な処理(例:シートのクリア、列インデックスの取得など)を提供する機能。
### B. VBAコーディング品質と効率性
- **VBAのベストプラクティス**を徹底し、保守性と堅牢性の高いコードを作成してください。
- **メモリ効率**を最大限に考慮し、Rangeオブジェクトの直接操作は極力避け、**配列を用いた一括処理**を基本とします。
- **参照設定が不要な(レイトバインディングによる)記述**を徹底してください。
- 全ての変数に対して**明示的な型宣言**を行ってください。ただしコレクションの反復処理(`For Each` ループなど)においてはコンパイルエラーを回避するため、`Variant` 型もを適切に活用してください。
- **二次元配列の `ReDim Preserve` は、最後の次元(列)のサイズ変更にのみ使用可能**です。**最初の次元(行)のサイズ変更はVBAではできません。
- プロシージャーに**引数で配列を渡す際は、`ByRef` の参照渡し**で定義してください。
### C. 高速化処理
`Main` プロシージャーの処理開始時に以下の設定を適用し、処理終了時(エラー発生時も含む)に元の設定に戻してください。これにより、**処理の高速化**を図ります。
```vba
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayAlerts = False
このように、あなたの具体的な要件を汎用プロンプトの上部に追記するだけで、AIが最適なVBAコードを生成してくれます。
プロンプトの各要素の解説
各要素がなぜ含まれているのか、その重要性を解説します。
1. # 汎用の転記VBA作成依頼プロンプト
- これが汎用的なプロンプトの開始を示す目印です。生成AIがこの部分からを「テンプレート」として認識し、具体的な指示と区別するために使用します。
- プロンプトの構造を明確にし、AIが指示を正確に解釈するために不可欠です。
2. ## 目的
- 作成するVBAコードの全体的な目標と、特に重視する品質(機能分割、高速処理、配列の制約遵守)を明記しています。
- AIがコードを生成する際の「方向性」を決定します。特に「機能分割」「高速処理」「配列の厳格な制約」は、VBA開発におけるベストプラクティスであり、保守性・パフォーマンスの高いコードを生成させるための重要な指示です。
3. ## 要件詳細
重要性:
- 別途に名前で指定します: プロンプトの汎用性を保ち、利用者が毎回シート名を変更できるようにするためです。
- 行目はヘッダー行: データ範囲の開始位置を明確にし、ヘッダーをデータとは別に扱うための前提条件です。
- 位置は見出し名で判断: 列の物理的な位置に依存せず、見出し名(例: "氏名", "住所")で柔軟に列を特定できるようにするためです。これにより、列の追加や移動があってもコードの修正が不要になります。
- 必須の列が存在しない場合や、その他の必要なシート・列が存在しない場合に、エラーメッセージを表示して処理を中断するよう指示しています。また、具体的な転記条件は別途指示する旨を伝えています。
- エラーメッセージの表示: ユーザーがコードを実行した際に、何が問題で処理が中断されたのかを明確に伝えることで、デバッグや問題解決を容易にします。堅牢なVBAコードには必須の要素です。
- 別途、対象行・列の条件がる場合は指示します: プロンプトの汎用性を高め、様々な条件に対応できるようにするためです。
- 転記元と転記先でヘッダー名が完全に一致する列のみを転記対象とし、大文字・小文字・全角・半角・空白の違いは無視して比較するよう指示しています。一致しない列は無視されます。
- 見出しが完全に一致する列のみ: 余計な列の転記を防ぎ、必要なデータのみを正確に転記するための指示です。大文字・小文字・全角・半角・空白の違いは無視:
実際のExcel運用では、見出しの表記ゆれが発生しやすいため、これらを吸収して柔軟に列をマッチングさせるための重要な指示です。
- 転記を開始する前に、転記先シートの2行目以降の全データをクリアするよう指示しています。
- 前回の転記データが残ってしまうことによるデータの重複や不整合を防ぎ、常にクリーンな状態で新しいデータを転記するための重要な処理です。
4. ## 実装要件
- A. プロシージャーの機能分割
- 意味:
- コードを「メイン」「初期化・準備」「データ加工・ロジック」「出力・書き込み」「ユーティリティ」という明確な役割を持つ複数のプロシージャーに分割するよう指示しています。
- 重要性:
- 保守性: 各プロシージャーが独立した機能を持つため、特定の機能に変更が必要な場合に、その部分だけを修正すればよく、コード全体への影響を最小限に抑えられます。
- 可読性: コードの構造が明確になり、何がどこで行われているのか理解しやすくなります。
- 再利用性: 汎用的なユーティリティプロシージャーなどは、他のVBAプロジェクトでも再利用しやすくなります。
- デバッグの容易性: 問題が発生した場合に、どの機能ブロックで問題が起きているのか特定しやすくなります。
- 意味:
- B. VBAコーディング品質と効率性
- 意味:
- VBAのベストプラクティス(良い習慣)に従い、メモリ効率を考慮して配列を用いた一括処理を基本とすること、参照設定不要な記述(レイトバインディング)を徹底すること、変数の明示的な型宣言、Variant 型の適切な活用、二次元配列のReDim Preserveの制約、引数での配列の参照渡しを指示しています。
- 重要性:
- ベストプラクティス: 汎用性が高く、エラーが少なく、将来的に修正しやすいコードを生成させるための指示です。
- 配列を用いた一括処理: Excel VBAはセルへの直接アクセスが非常に遅いため、データを一度配列に読み込み、配列内で処理してから一括でシートに書き戻すことで、処理速度を劇的に向上させます。
- 参照設定が不要な(レイトバインディングによる)記述: 特定のライブラリへの参照設定が不要になるため、異なる環境でのVBAコードの互換性を高めます。
- 明示的な型宣言: コードの可読性を高め、意図しない型変換によるエラーを防ぎます。
- Variant型の適切な活用: コレクションの反復処理など、VBAの言語仕様上Variant型が適している場面で適切に利用することで、コンパイルエラーを回避しつつ柔軟なコードを記述できます。
- 二次元配列の ReDim Preserve の制約: VBAにおける配列の挙動に関する重要な制約を明記することで、生成されるコードが実行時エラーを起こさないようにします。これは、AIがVBAの深い知識を持ってコードを生成するためのガイドラインです。
- 引数で配列を渡す際は、ByRef の参照渡し: 配列を関数やサブルーチンに渡す際に、メモリのコピーを避けて元の配列を直接操作できるようにするため、効率的です。
- 意味:
- C. 高速化処理
- 意味:
- Application.ScreenUpdating などの設定を処理開始時にFalseにし、終了時(エラー時も含む)に元の状態に戻すよう指示しています。
- 重要性:
- Application.ScreenUpdating = False: 画面の再描画を停止することで、処理中の画面のちらつきをなくし、処理速度を大幅に向上させます。
- Application.Calculation = xlCalculationManual: 自動計算を停止し、手動計算に切り替えることで、大量のデータ処理中にExcelが再計算を行うことによる速度低下を防ぎます。
- Application.EnableEvents = False: イベントの発生を一時的に停止することで、処理中に予期せぬマクロが実行されるのを防ぎ、安定した動作を保証します。
- Application.DisplayAlerts = False: 警告メッセージ(例: 上書き保存の確認)の表示を停止することで、処理の中断を防ぎ、完全に自動化された処理を実現します。
- これらの設定は、VBAで大量のデータを扱う際に必須の高速化テクニックであり、コードのパフォーマンスを保証するために非常に重要です。
- 意味:
開発秘話:最初のアイデアから「究極」へ
VBA開発における共通の課題を解決したいという強い思いから、何十回にもわたる試行錯誤を重ねて少しずつ進化してきました。
汎用的なプロンプトを作成することの難しさ、そしてそれを実現するための道のりをご紹介します。
その出発点となったのは、以下のようなシンプルなプロンプトでした。
## VBAを作成
- "Sheet1"を"Sheet2"に転記します。
- "Sheet1"、"Sheet2"ともに、1行目は列見出しです。
- "Sheet2"は2行目以下を消去してから転記します。
- "Sheet1"と"Sheet2"の項目の列位置は違います。
- 1行目の **列見出しが一致する列**へ転記します。
- "Sheet1"の列見出し"項目A"の値が"A2"と"A3"のみ転記します。
この最初のプロンプトは、基本的な転記要件をAIに伝えるものでした。
しかし、実際に生成されたVBAコードをExcelに貼り付け、テストを実行するたびに、様々な課題が浮上しました。
- パフォーマンスの問題: 大量のデータを扱う場合、セルへの直接アクセスを繰り返すコードでは処理に時間がかかりすぎることが判明しました。
- 保守性の問題: 全ての処理が一つのプロシージャーにまとめられていると、後から修正や機能追加を行う際に、コード全体を読み解く必要があり、非常に困難でした。
- エラーハンドリングの不足: 必要なシートや列が存在しない場合、VBAがエラーで停止してしまい、ユーザーが原因を特定するのが難しいという問題がありました。
- 汎用性の限界: 列見出しの表記ゆれ(全角/半角、大文字/小文字など)に対応できない、といった点が課題として見えてきました。
これらの課題を解決するため、
「プロンプトを変更」→「VBA生成」→「実際にExcelでテスト」→「バグ修正」→「問題点をプロンプトに追記」
というサイクルを、文字通り何十回も繰り返しました。

パフォーマンスの問題に直面した際には、プロンプトに「配列を用いた一括処理」や「Applicationオブジェクトの高速化設定」を追記し、AIがそれらを適切に反映できるか何度も検証しました。
保守性の問題に対しては、「機能分割」の概念を導入し、具体的なプロシージャーの役割までプロンプトで指示することで、AIがより構造化されたコードを生成するように誘導しました。
VBA特有の「二次元配列のReDim Preserveの制約」のような、AIが陥りやすいVBAの深い知識をプロンプトに盛り込むことも、非常に骨の折れる作業でした。
これらの制約を明確に伝えることで、AIがより正確で実行可能なコードを生成できるようになります。
※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。
同じテーマ「生成AI活用研究」の記事
ダウンロードフォルダのExcelファイルブロック解除
AIがあればVBAはできる:セルに絵文字を入れる
VBA開発の現場で生成AIはどう使う? そのメリットと潜むリスク
実務に活かすAIコードとVBA:ビジネス現場の自動化基礎講座
AI活用によるVBA業務自動化の実践ガイド
すぐに使える!生成AI プロンプト作成 実践ガイド
究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化
AI(Gemini)とエクセル数式対決 その1
AI(Gemini)とエクセル数式対決 その2
新着記事NEW ・・・新着記事一覧を見る
エクセル関数辞典 AI版|エクセル入門(6月10日)
生成AIと100本ノック 28本目:シートをブックに分割|生成AI活用研究(6月8日)
生成AIと脱Excelの時代:ブラックボックスと共に進む知的変革|生成AI活用研究(2025-06-08)
生成AIと100本ノック 27本目:ハイパーリンクのURL|生成AI活用研究(6月7日)
生成AIと100本ノック 26本目:ファイル一覧作成|生成AI活用研究(6月6日)
AI時代のプログラミング再考:記述の自由と知の民主化|生成AI活用研究(2025-06-06)
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門|生成AI活用研究(2025-06-04)
AI×ひらめき ― 「ネタ」が飛躍する創造の増幅プロセス|生成AI活用研究(2025-06-03)
Googleカレンダーの日本の祝日をGASとExcelで取得する ~APIキー不要、XML連携ガイド~|生成AI活用研究(2025-06-02)
究極のVBA転記プロンプト公開!あなたの事務作業を劇的に効率化|生成AI活用研究(2025-06-02)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。