
ChatGPTでエクセルVBAを書く!
エクセルVBAキーワードマスター講座
第1回:VBAの基本構造とキーワードの役割
はじめまして。これまでIT大手の上場企業で財務経理部門の幹部を務め、経営企画からシステム導入まで広範囲の業務に携わってきた者として、数多くの自動化や効率化に取り組んできました。その中でもExcel VBAの活用は必須といえるほど活躍の場が広く、多様なシーンで威力を発揮します。今回は「ChatGPTでエクセルVBAを書く!エクセルVBAキーワードマスター講座 」と銘打ち、特に「第1回:VBAの基本構造とキーワードの役割」をテーマに深く掘り下げていきます。
プログラミングに初めて触れる方から既に基礎を押さえている方まで、あらためて理解を深める機会となれば幸いです。今後、ChatGPTでVBAのコードを生成させるためのプロンプトを活用するうえでも、この基本構造やキーワードへの理解は大いに役立つでしょう。
本記事では「ChatGPTでエクセルVBAを書く!エクセルVBAキーワードマスター講座 」という切り口から、Excel VBAで頻繁に用いられるキーワードと、コードをスムーズに生成させるためのポイントを可能な限り詳しく解説していきます。VBAに慣れていない方でも安心して読み進められるように、丁寧かつ詳細な内容を盛り込みました。
なお、文中での記載は実務や現場感を踏まえつつ、専門知識を整理する形をとっています。全体を通してExcel VBAの土台となる部分に加えて、ChatGPTにVBAコードを書かせる際のプロンプト例もご紹介していますので、ぜひご参照ください。
それでは、さっそく始めましょう。
第1章:VBAの位置づけと概要
1-1. VBAとは何か
Visual Basic for Applications、通称VBAは、Microsoft Office製品に組み込まれたプログラミング言語です。主にExcelやWord、Accessなどで動作し、これらのソフトの機能を拡張したり、自動化したりするために用いられます。
たとえばExcelでは、単なる表計算で終わるのではなく、マクロとして作業を自動化したり、複雑な処理をスクリプト化したりすることで、多大な工数を削減できます。過去に財務経理部門の立場として数多くの会計データを扱ってきた経験上、月次・四半期・年次決算のプロセスをVBAで効率化する取り組みは非常に効果的でした。
Microsoft Office製品同士は比較的容易に連携できるため、Excelで生成したデータをOutlookでメール送信したり、Accessに取り込んだり、PowerPointで資料に落とし込んだりといった応用も可能です。その根幹にあるのがVBAという言語で、Officeの操作をプログラムで記述できる点こそが大きな魅力といえます。
1-2. VBAを扱うメリット
- 手作業の自動化
定形業務を自動化することで、人的ミスを減らし、品質と効率を格段に上げられます。たとえば決算処理でのエクセル集計や、各種文書の繰り返し作成などで大活躍です。 - 業務の標準化
部門によってバラバラに進めていたエクセル作業を統一的なマクロで管理できるようになると、集計や提出のフォーマットを揃えることが可能です。 - Microsoft製品の高い親和性
Excelだけでなく、WordやPowerPoint、Outlookなどとも連携できるため、レポート生成からメール送信、資料作成まで自動化が広がります。
第2章:SubとFunctionの違い
VBAでプログラム(マクロ)を作成するうえで、SubとFunctionは必須のキーワードです。両者とも「手続き」のかたまりを表しますが、目的や使い方に若干の違いがあります。
2-1. Subプロシージャとは
Subプロシージャは、いわゆる「作業手順」をまとめたものです。ExcelのVBAエディタ(Visual Basic Editor)上で「Sub ○○() … End Sub」という形式で記述し、特定の処理を行わせます。
- 呼び出し方法: Subプロシージャは、マクロとして実行したり、他のプロシージャから呼び出すことができます。
- 戻り値: 基本的には戻り値を返しません。
- 用途の例: メッセージを表示したり、セルの値を変更したり、ファイルを開いたりといった一連の処理手順をまとめるのに適しています。
Subプロシージャのサンプル
Sub SampleProcess()
MsgBox "こんにちは、Subプロシージャです。"
End Sub
上記の例は単純にメッセージを表示するだけですが、実際にはここにファイル操作や複数のデータ処理をまとめて実行させることができます。
2-2. Functionプロシージャとは
一方で、Functionプロシージャは「何らかの値を返す処理」をまとめたものです。
- 呼び出し方法: ワークシート関数として使う場合は、セルに「=関数名(引数)」と記入することもできますし、Subプロシージャなどから呼び出すことも可能です。
- 戻り値: 値を返すことが目的であり、Functionプロシージャ名に値を代入することで返却します。
- 用途の例: 計算式や論理判定などを行い、結果を値として返す場合に適しています。
Functionプロシージャのサンプル
Function CalculateTax(ByVal amount As Long) As Long
CalculateTax = amount * 0.1
End Function
この例では、金額(amount)を引数に受け取り、その10%を「CalculateTax」という戻り値として返しています。セルに「=CalculateTax(A1)」のように入力すれば、A1にある金額の10%の値を返してくれます。
第3章:Dim / Set / Const の意味と役割
VBAで変数や定数を扱うとき、基本中の基本となるのがDimとConstです。また、オブジェクトを扱う際に欠かせないのがSetです。
3-1. Dimによる変数宣言
Dimは「Dimension」の略で、変数を宣言するキーワードです。宣言とは「これからこんな名前の変数を使いますよ」という宣言行です。
Dim total As Long
Dim itemName As String
Dim isFinish As Boolean
変数型はいろいろありますが、業務シーンではInteger(整数)やLong(より大きな整数)、String(文字列)が多用されます。Boolean(真偽値)やDouble(小数点を含む数値)、Variant(なんでも入る)なども要件次第で使い分けるのがコツです。
3-2. Setによるオブジェクト変数の代入
ExcelのRangeやWorksheet、Workbookなどは「オブジェクト」と呼ばれ、通常の数値や文字列とは区別されます。オブジェクトを変数に代入する場合は、Setを使う点がポイントです。
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
このように、オブジェクトを変数に割り当てる際には「Set 変数名 = オブジェクト」という書き方が必要になります。
3-3. Constによる定数宣言
Constは「Constant」の略で、変更しない値を定義したいときに使います。
Const TAX_RATE As Double = 0.1
一度定義すると、処理の途中で値を変更することはできません。税率や消費税額の端数処理ルールなど、固定値として決め打ちしたいものに使うと便利です。
第4章:MsgBox / Debug.Printを使ったデバッグ
プログラムが正しく動作しているかを確かめたり、変数の値を確認したりする際に便利なのが、MsgBoxとDebug.Printです。
4-1. MsgBoxで画面表示
MsgBox "処理が完了しました。"
ポップアップのメッセージウィンドウとして、テキストを表示する機能です。簡単かつ手軽にユーザーに通知する目的で使われます。ただし、何度も表示されると手間になるため、大規模な処理では使いすぎに注意します。
4-2. Debug.Printでイミディエイトウィンドウに表示
VBE(Visual Basic Editor)のイミディエイトウィンドウに値を表示して確認できるのがDebug.Printです。
Debug.Print "現在の在庫数は"; stockCount
MsgBoxと異なり、実行時にポップアップは表示されず、イミディエイトウィンドウにログのように出力されます。大量のデバッグ情報を確認するときにはこちらのほうが便利です。
第5章:ChatGPTでVBAコードを書かせるための重要ポイント
ここからは本題でもある「ChatGPT用プロンプト VBA キーワードマスター」という観点で、VBAコードを書かせたいときに押さえておきたいポイントを整理します。
5-1. 十分な文脈を与える
ChatGPTにVBAコードを生成させる場合、「VBAで○○のコードを書いてください」のように明確に用途を伝えることが大切です。以下の例を参考にするとイメージがわきやすいでしょう。
例: 「VBAで、Sheet1のA列にある数値データを合計してメッセージボックスで表示するコードを書いてください。」
このように、「何をしてほしいか」「どのような出力を期待しているか」を具体的に指示するのがおすすめです。
5-2. 必要なオブジェクトを指定する
Excelのどの部分を操作したいのか、ワークブックなのかシートなのかレンジなのか、またはファイルそのものを開くのか、あるいは外部アプリとの連携なのか——こうした要素をChatGPTに伝えると、的確なコードが返ってきます。
オブジェクト指定の例
- 「Worksheets(“Sheet1”)のA1セルに100を代入するVBAコードを書いてください。」
- 「VBAで、現在開いているワークブックを別のフォルダにコピーして名前を変更するコードを書いてください。」
ChatGPTは基本的に大まかな指示でも理解しますが、シチュエーションを具体的に指定したほうが理想に近いコードが得られます。
5-3. 戻り値を要するか否かをはっきり伝える
前述のSubとFunctionの違いを踏まえたうえで、ChatGPTに「Functionで書いてください」と伝えれば、戻り値があるVBAコードが返ってきます。一方「Subで十分です」といえば、単純に作業を行う形式のコードになります。
例: 「Functionプロシージャで、引数に数値を受け取り、その数値の10倍を返すVBAコードを書いてください。」
このような指定を行うことで、意図した形のプロシージャが生成されやすくなります。
第6章:より良いChatGPT活用のためのテクニック
ChatGPTにVBAコードを作成させるうえで、活用の幅を広げるためにはいくつかのコツがあります。
6-1. エラーメッセージの共有
実際に生成したコードをExcel VBAで実行してエラーが出た場合、そのメッセージをChatGPTにフィードバックするのが役立ちます。
例: 「実行時エラー ‘1004’: アプリケーション定義またはオブジェクト定義のエラー」と出ました。どこを修正したらよいでしょうか?
ChatGPTはエラーメッセージを手がかりに解決策を提案してくれる可能性が高まります。
6-2. 実行環境のバージョン情報
Excel 2013, 2016, 2019, 2021, Microsoft 365など、人によって利用環境はさまざまです。たいていのVBAコードは上位互換で動きますが、微妙な差異がある場合もあるため、バージョン情報や環境を明示するとより正確な回答が得やすいです。
6-3. 業務シーンの具体例
チャットAIは抽象的な質問より具体例のほうが得意です。財務経理の実務で扱う売上データや発注データなどを例示すると、より自分の環境にあったコードを作成してもらえます。
例: 「売上データがSheet1のA列からC列にあります。A列に日付、B列に商品名、C列に金額が入っています。これをSheet2に転記しつつ、金額の合計を算出してMsgBoxで表示してください。」
第7章:プロンプト例のまとめ
ここでは、「VBAで…」と始める実用的なプロンプトのサンプルをさらにいくつか示します。ぜひ日々のChatGPT活用に役立ててください。
- セルへのデータ入力サンプル 「VBAで、Sheet1のA1セルに“商品A”と入力し、B1セルに数値100を入力するコードを書いてください。」
- 複数セルの合計サンプル 「VBAで、Sheet1のA2からA10までの合計値を取得して、メッセージボックスに表示するSubプロシージャを書いてください。」
- ファイル操作サンプル 「VBAで、現在開いているブックを、指定したフォルダに“売上データ_YYYYMMDD.xlsx”という形式で保存するコードを書いてください。」
- Functionを使ったユーザー定義関数サンプル 「VBAで、引数としてセル範囲を受け取り、その中の数値がいくつあるかをカウントして返すFunctionを書いてください。」
- 外部アプリ連携サンプル 「VBAで、Outlookを起動して、新規メールの本文に“最新の売上データを送付いたします。”という文面を自動的に挿入するコードを書いてください。」
第8章:実務経験から見るVBAの価値
IT大手上場企業での財務経理幹部としての経験から言うと、Excelはデータ管理や分析の要となる場面が多く、その自動化はコスト削減とミス低減に直結します。
月次決算では数多くのExcelファイルを取り扱い、担当者が同じような集計作業を繰り返しているケースが少なくありません。こうした作業をVBAのマクロでまとめると、作業時間を大幅に短縮できるだけでなく、算出ミスや転記ミスも防げます。
また、Excelの標準機能だけでは物足りないデータ変換や加工を行うときも、少しのVBAスクリプトを書くことで飛躍的に可能性が広がります。頻繁に使うフォーマット変更やシート間連携なども、その都度コピペを繰り返す必要がなくなるため、現場のストレスを軽減できます。
第9章:VBAの学習とChatGPT活用の相乗効果
VBAを学ぶと同時にChatGPTを活用すると、疑問を抱いたタイミングで即座にコード例を提案してもらえます。
特にVBAの基本構造やキーワードが理解できていると、ChatGPTから返ってきたコードを容易にアレンジして、自分の環境に合わせることが可能になります。ChatGPTは万能ではないものの、大まかなコードの骨格をつくるには非常に役立ちます。
- ChatGPTは瞬時にサンプルコードを提案してくれる
- 細かいカスタマイズは利用者自身が調整する必要がある
この両面を上手に使い分けると、VBAの習得スピードと生産性が飛躍的に高まります。
第10章:今後の展望とVBAの可能性
AI技術が進化するにつれ、ノーコード/ローコードの開発環境も普及してきています。とはいえ企業現場では、まだまだExcelファイルと並行して働くシーンが多く、表計算をベースにした業務プロセスを完全に置き換えるのは容易ではありません。
VBAはローカル環境で気軽に使えるがゆえの便利さがあり、ちょっとした自動化が必要なときには最適なソリューションです。さらに、クラウド化が進む中でもOffice製品自体は引き続き広範に利用され続けています。
- 新たな連携先としてはPower AutomateやSharePointなども考えられる
- クラウドツールとVBAの両輪で業務効率を高める手段が確立しつつある
今後もExcel VBAがすぐに廃れることはないと見られ、学んでおいて損はありません。ChatGPTのような対話型AIを上手に組み合わせることで、開発生産性と学習効率を高められるため、ビジネスパーソンにとっては心強い味方となるでしょう。
免責事項
本記事の内容は筆者の経験および一般的に知られている情報をもとにまとめたものであり、あらゆる環境での動作保証や正確性を完全に保証するものではありません。実際のご利用にあたっては、ご自身の責任と判断のもとで行ってください。万が一の損失やトラブルに関しても、当方は一切の責任を負いかねます。ExcelやVBAに関する最新情報や技術仕様は、Microsoftの公式ドキュメント等もあわせてご確認いただくと安心です。