導入
第2編では複雑な課題を通じて、ChatGPTとVBAの連携を実践し、考察しました。最終編では、現実的な業務において、VBAを活用した業務改善に焦点を当て、効率的な指示を行なうために最小限必要となる知識と方法について整理した上で、ChatGPTとの連携によるVBAによる業務改善プロセスを整理し提案したいと思います。
参考)
ここまでの流れを知りたい方は、以下の記事をお読みください。
ChatGPTとコラボしてVBAを業務改善に活かそう! – 実践的なプログラミングガイド① – ライフ&ジョブブログ (life-and-job.com)
ChatGPTとコラボしてVBAを業務改善に活かそう! – 実践的なプログラミングガイド② – ライフ&ジョブブログ (life-and-job.com)
https://chat.openai.com/ ChatGPTはOpen AIのサイトで登録できます。
ChatGPTの使い方についての記事です。
【その2】ChatGPTとは?使い方や機能、活用方法を徹底解説 – ライフ&ジョブブログ (life-and-job.com)
ChatGPTとの連携におけるポイント
前回複雑な業務課題を達成した際のポイントは以下の通りでした。
- 具体的な手順:処理手順を具体的かつ段階的に進めるようなプロンプトを作成すること
- 変数の定義:必要な変数やその目的を明確に定義し、理解しやすいようにすること
- 適切な用語の使用:関数やセル表現をVBA用語を使用して、理解しやすいようにすること
これを行なう上で、まず最低限必要となる知識・理解があると感じました。それを最初に整理します。
これらはChatGPTが基本的にコードを作成してくれるので知らなくても良いのですが、上手くいかないときにChatGPTへ伝えたり、説明を受けるうえで必要になってきます。
最低限必要なVBAスキル
VBA初学者でも実践的な業務プロセスを実行できるために以下のような項目に対する知識が望ましいと思います。
- VBAの基本概念:プログラムの構造、変数、データ型、演算子、条件分岐、繰り返し処理などの基本概念が必要です。
- オブジェクト、プロパティ、メソッド、セル範囲の指定: VBAにおいて、オブジェクト、プロパティ、メソッドの概念を理解することが重要です。そのうえで、特にセル範囲の指定をする方法について説明します。
- 変数とデータ型: 変数の宣言やデータ型についての理解。
- 条件分岐と繰り返し処理: 条件分岐や繰り返し処理の構文によるプログラムの流れを理解する必要があります。
- ワークシート関数の利用: VBA内でワークシート関数を使用する場面があるため、基本的なワークシート関数の使い方を理解しておくことが望ましいです。
- VBAエディタの基本的な使い方: VBAエディタ(VBE)の基本的な使い方を把握すると、コードの編集やデバッグが効率的に行えます。
VBAの基本概念
VBA(Visual Basic for Applications)の基本概念は、プログラムの基本的な構造や概念に関する理解を指します。以下に、それぞれの要素について簡単な説明を示します。このあたりの知識はある程度聞いたことがあると思います。
基本的にはChatGPTが正しくコード生成したり、修正してくれるので説明はこの程度とします。
- プログラムの構造: VBAプログラムは一般的にサブルーチン(Sub)や関数(Function)の形で構造化されます。これらは特定のタスクを実行するためのコードブロックであり、必要に応じて呼び出されます。
- 変数: 変数はデータを格納するための名前付きのメモリ領域です。VBAでは変数を宣言し、それに対するデータ型を指定する必要があります。
- データ型: データ型は変数が保持できるデータの種類を示します。例えば、整数型(Integer)、文字列型(String)、浮動小数点型(Double)などがあります。
- 演算子: 演算子は数学的な演算や比較を実行するための記号やキーワードです。加算、減算、比較などの演算子があります。
- 条件分岐: 条件分岐は、ある条件が真か偽かに応じて異なる処理を実行するための構造です。主な構文としては、If…Then…Elseがあります。
- 繰り返し処理: 繰り返し処理は同じ処理を複数回繰り返すための構造です。ForループやDoループなどがあります。
オブジェクトとプロパティとメソッド、セル範囲の指定
オブジェクトとプロパティ、メソッドは、VBAやプログラミングの一般的な概念であり、VBAを含む多くのプログラミング環境で使われています。
初心者には非常に分かりずらいのですが、概要について以下に記載します。実践的にはセル範囲の指定方法を理解しておくことが重要になりますが、概念をある程度分かっておく必要があるため説明します。
オブジェクト(Object)
オブジェクトは、操作の対象となる「モノ」ということで、Excelでは、ワークブック、ワークシート、セル、フォントやグラフなどがオブジェクトとなります。プログラミングにおいては、オブジェクトに対して操作やプロパティの取得・設定などを行うことになります。
プロパティ(Property)
プロパティはオブジェクトの特性や状態を表すもので、オブジェクトが持っているデータや設定の一部です。例えば、Excelのワークシートオブジェクトには「名前」や「行数」などのプロパティがあります。これらのプロパティの値を取得したり、設定することで、オブジェクトが持っているデータや設定を取得したり変更することができます。
メソッド(Method)
メソッドは、オブジェクトに対して何かを行うように指示したり、実行する操作のことであり、プログラミングにおいて非常に重要な役割を果たします。
オブジェクト、プロパティ、メソッドの関係
- オブジェクト(Object): ワークシート、セルなど操作の対象になるもの。
- プロパティ(Property): オブジェクトの特性や状態を表す。データや設定の一部。
- メソッド(Method): オブジェクトに対して何かしらの動作を行わせる。
オブジェクト、プロパティ、メソッドの操作例(Excel VBA)
以下は、Excel VBAを使用してセルに値を設定する例です。ここで、Rangeがオブジェクト、Valueがプロパティ、Copyがメソッドです。
Sub SetValue()
' A1セルに"Hello, ChatGPT!"という値を設定する
Range("A1").Value = "Hello, ChatGPT!"
' A1セルの値をB1セルにコピーする
Range("A1").Copy Destination:=Range("B1")
End Sub
この例では、Range(“A1”).ValueのValueがオブジェクトであるA1セルの値を表すプロパティであり、Range(“A1”).CopyのCopyがオブジェクトであるA1セルに対して値をコピーするという操作を行なうメソッドとなります。
メソッドの呼び出しでは、特定の操作を行うために必要なパラメータ(この場合はDestintion)が指定されています。
セルの指定(RangeとCells)
Range
Excelを扱っている方はセル指定方法としてはA1のような表記が分かりやすいと思います。
VBAでは、Rangeを使ったセル表現は、以下のようになっています。多くは””(ダブルクォーテーション)で囲んで表現しており、複数のセルを選択するときはカンマ(,)で区切ります。
範囲を指定するときはコロン(:)で左上と右下のセルを繋ぐように記載します。またはRange(“A5″,”C5”)でも同様になるので、ダブルクォーテーションを付けるか付けないかの違いに注意が必要です。
同じ行や列全体を指定するときは列や行番号を省略することもできるなど、様々な表記方法があります。
表.Rangeによるセル範囲の表し方
Cells
ただし、コピーペーストをしたり、繰り返し処理を行なうVBAプログラミングにおいては、Rangeで固定のセル指定をする方法よりCellsでの表記が威力を発揮します。
Cellsは、行、列の順に番号で表現している点がRangeと異なることに注意が必要です。
オブジェクトかプロパティか?
VBAの解説書や動画、ブログなどを見ると、Rangeはオブジェクトでもありプロパティでもあると出てくるので混乱します。十分理解していませんが、次のような違いがあるとのことですが、よくわかりません。セル位置を表す時のRangeはプロパティと思っていてよいのではないかと思います。
どなたか分かり易い説明をしていただけると幸いです。
オブジェクトとしてのRange
定義
- Rangeは Excel ワークシート上のセルやセル範囲を表すオブジェクトです。
使い方
- セル範囲を指定するために使用され、様々なプロパティやメソッドが利用可能です。
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:B10")
プロパティとしてのRange
定義
- Rangeはワークシートオブジェクト内のプロパティとしても使用されます。この場合、ワークシートの使用されているセル範囲を表します。
使い方
- 特定のワークシートの使用されているセル範囲を取得するために使用されます。
Dim usedRange As Range
Set usedRange = Worksheets("Sheet1").UsedRange
よくわからんが・・・ドット(.)の左側に来るとオブジェクトで、右側だとプロパティになるのかな?
ま、あまり気にしないことにしよう!
Offset,Resize,Endプロパティを使ったセル表現
Offset プロパティ
- 定義: Offsetプロパティは、指定されたセルから相対的な位置にあるセルを取得するために使用されます。
- 使い方: Offsetの後に指定した行数および列数を指定することで、元のセルからの相対的な位置にあるセルにアクセスできます。Offset(3,4)であれば、元のセルから下方向に3行移動、右方向に4列移動したセルを指定することになります。(下の図参照)
Resize プロパティ
- 定義: Resizeプロパティは、セル範囲のサイズを変更するために使用されます。
- 使い方: Resizeの後に指定した行数および列数を指定することで、元のセルを起点としてサイズを変更した範囲にアクセスできます。Resize(3,4)であれば起点のセルを含めて(下方向に)3行、(右方向に)4列の範囲を指定します。
Rows.Count プロパティ
- 定義: Rows.Countプロパティは、ワークシート内の行の総数を取得するために使用されます。これはExcelワークシート内の全行数を表します。
- 使い方: 通常、Rows.Countはセル範囲やデータの処理において、行数を取得するために利用されます。この次に来るEndプロパティと組み合わせ、Rows.Count.End(xlUP)で最終行から上に行って、最初に値が入っているセルを指定するのによく使われます。
行でなく列の場合はColumnsプロパティを用います。
また、rowやcolumnプロパティもあり、間違えないよう注意が必要です。(行や列の数でなく番号を表します)
End プロパティ
- 定義:
End
プロパティは、指定されたセルからデータの終端までを取得するために使用されます。 - 使い方:
End
の後にxlDown
やxlToRight
を指定することで、指定した方向にデータの終端までのセルを取得できます。
変数とデータ型
変数はデータを一時的に格納するための箱であり、その箱の性質を指定するのがデータ型です。例えば、整数や文字列などがあり、正しいデータ型を指定することで適切な処理が可能です。
変数の宣言はDimステートメントを用い、その後に変数名とデータ型を指定します。例えば、Dim num As Integerのようにします。これによりnumという変数が整数型で宣言されます。
また、ひとつの変数に複数のデータを入れることができる、配列変数も使用することがあります。ここでは割愛しますが、変数名の後に配列内のデータの番号(インデックス)を表す( )がついています。
Dim arr(2) As Integer ' 3つの整数を格納できる配列
arr(0) = 1
arr(1) = 2
arr(2) = 3
データ型としてよく使われるのは、Integer、Long、String、Variantあたりです。ここではひとつひとつ細かく覚える必要はなく、型が間違うとエラーの原因にもなるということを知っておけば良いと思います。型の宣言をしないとVariantになります。極論するとVariantでもほとんど問題はないようですが、このあたりはChatGPTに任せておけば良いと思います。
また、Objectは、RangeやWorkbook、Worksheetなどのオブジェクトを保持するためのデータ型です。
オブジェクト型変数を宣言するには「Dim 変数名 As オブジェクト型」と宣言し、「Set 変数名 = オブジェクト」で設定します。
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:B10")
As Objectにすると、すべてのオブジェクトを宣言することになるので、ふつうはRangeやWorksheetなどを使うことが多いようです。
条件分岐と繰り返し処理
条件分岐と繰り返し処理は、プログラムが特定の条件に基づいて異なる動作をするための機能です。
条件分岐(If…Then…Else)
条件分岐は、ある条件が真か偽かを判定し、その結果に基づいてプログラムを分岐させます。例えば、以下のVBAのコードでは、変数xが10より大きい場合とそうでない場合で異なるメッセージが表示されます。
If x > 10 Then
MsgBox "xは10より大きいです"
Else
MsgBox "xは10以下です"
End If
繰り返し処理(Forループ、Doループ)
繰り返し処理は同じ処理を複数回繰り返すための仕組みです。Forループは指定された回数だけ処理を繰り返し、Doループは条件が満たされている間処理を続けます。以下はForループとDoループの例です。
' Forループの例
For i = 1 To 5
MsgBox "現在のiの値は: " & i
Next i
' Doループの例
Do While x < 10
MsgBox "xはまだ10未満です"
x = x + 1
Loop
これらの機能を理解することで、プログラムが特定の条件に基づいて柔軟に動作し、同じ処理を繰り返す際に冗長なコードを避けることができます。
実務においても、条件分岐で作業内容が変わったり、繰り返し処理を行なう場面があります。プログラミングは、実務の作業手順を分解し、1つ1つの作業工程を条件分岐や繰り返し処理を順番に組み合わせて表現し、適切なコーディングを行なうことが必要になります。VBA言語がわからなくても概念や作業手順(フロー)を適切に説明できればChatGPTが補ってくれます。
ワークシート関数の利用
VBA内でワークシート関数を使用することで、Excelのワークシート上で行うような計算や処理をVBAコード内で実現できます。例えば、SUM関数やVLOOKUP関数などのワークシート関数をVBA内で使用することがあります。以下は例です。
' SUM関数の利用
result = Application.WorksheetFunction.Sum(Range("A1:A10"))
' VLOOKUP関数の利用
lookupResult = Application.WorksheetFunction.VLookup("Apple", Range("A1:B10"), 2, False)
Excel関数は比較的使われる方も多いと思います。便利な関数は積極的に利用した方が良いと思います。実際はChatGPTに指示することで、コーディングは考えてくれます。
VBAエディタの基本的な使い方
VBAエディタ(VBE)はVBAコードを編集するための環境であり、基本的な使い方を理解することが重要です。VBEを開くには、ExcelでAlt + F11を押すとエディタが起動します。
VBEの使用については以下の記事も参照ください。
Excelの魔法を解き放つ!VBA入門:ステップバイステップガイド – ライフ&ジョブブログ (life-and-job.com)
ここでは、エラーが発生したときのトラブルシューティング方法として、以下の機能を記載しておきます。
デバッグウィンドウ: コードの実行中に変数の値などを確認できるデバッグ機能があります。
F8キー(ステップ実行)の機能: VBAエディタ(VBE)内でコードをデバッグする際に使用されるF8キーは、ステップ実行機能を提供します。これにより、コードを一行ずつ実行しながら進めることができます。
ChatGPTへの具体的な指示
ChatGPTに対する効果的な指示(プロンプト)を作成するためには、上述のVBAスキルも意識したうえで具体的で分かりやすい要素を組み込むことが重要です。以下は、ChatGPTへの指示作成のポイントです。
- 具体的な処理手順の提示
ChatGPTに対して、処理手順を具体的で分かりやすく提示しましょう。ステップバイステップで進めるプロンプトは、効果的なコード生成につながります。 - 変数やオブジェクトの適切な定義
指示内で変数やオブジェクトの目的や定義を明確に説明することで、ChatGPTがより適切なコードを生成できます。例えば、処理の中で使用する変数やオブジェクトを適切に指定し、それに基づいて作業を進めるよう指示します。 - 適切な用語の使用
VBAの用語を正確に使用することで、適切なコードが生成されやすくなります。VBAの関数やメソッド、プロパティについて、適切な用語をプロンプト内で指定しましょう。 - 具体的な例やサンプルデータの提示
ChatGPTがコードを生成する際に役立つのは、具体的な例やサンプルデータの提示です。処理の例や入力データ、期待される出力を具体的に提示することで、ChatGPTはより適切なコードを生成できます。 - エラー処理や特殊な条件の考慮
プロンプト内でエラー処理や特殊な条件に対する指示を与えることで、生成されたコードが堅牢で実用的なものになります。ChatGPTに対して、特定の条件に対する処理やエラーハンドリングについて指示しましょう。
【プロンプトエンジニアリングに学ぶ】上手なAIとの対話や質問の仕方
言語モデルを効率的に使用するためのプロンプト開発および最適化する研究分野がプロンプトエンジニアリングと呼ばれ、その内容が「Prompt Engineering Guide」に纏められています。AIへの質問の仕方、回答のさせ方のコツを纏めます。
life-and-job.com
2023.05.03
【プロンプトエンジニアリングに学ぶ】上手なAIとの対話や質問の仕方 – ライフ&ジョブブログ (life-and-job.com)
ChatGPTとの連携によるVBAを活用した業務改善プロセス
最後に、ここまでのまとめとして、ChatGPTと効果的に連携しながら、VBAを活用した業務改善を実現するためのプロセス例を以下に示します。
- 要件の整理および具体的な目標設定と効果的な指示
業務において課題や改善したい事柄(要件)を具体的に整理し、どのような目標を達成したいのか、生成AIに対して具体的、明確に伝えることが重要です。
その際、具体的処理手順、変数・オブジェクトの定義、適切なVBA用語、具体例やデータを提示することによりプロンプトの精度を高めることができます。
この時点で、まずイメージを伝えて生成AIが回答する内容についてコミュニケーションを取り、具体的に何をしたいか整理したうえでプロンプトを与えていく方法も有効かと思います。 - 生成されたコードの検証とフィードバックによる修正
生成AIが生成したコードを検証し、必要に応じて修正を行います。これにはVBAの知識が必要ですが、生成AIが提供するコードを元に、調整や最適化をおこないます。
生成されたコードを実際に適用してみて問題があれば生成AIにフィードバックし、修正を促します。
または最初にコードを実行して、エラーが発生した場合にコードの検証を行ない、生成AIへフィードバックしてコミュニケーションを取りながら修正を行なっても良いでしょう。 - 最終的な目標の達成
上記の生成AIとの連携、コミュニケーションを繰り返し行なうことによって、目標を達成させます。
もちろんこれが万全のプロセスであると保証できるものではありません。また、比較的簡単なコードであればここまでする必要はないかもしれません。あくまで状況に応じた対応の一つです。
素人でもChatGPTとコラボし、自らのスキルも高めながら、それまで実現することのなかったVBAの活用によって業務改善ができるかもしれないと、少しでも魅力に思っていただければ嬉しいです。
おわりに
3部構成で、ChatGPTとのコラボによるVBA活用による業務改善について考えてきました。
VBA経験がない人でもChatGPTの高いコード生成能力を活かして業務に利用できるのではないかと考え、基本的な知識から始め、少し複雑な業務課題も実際にコーディングしてみました。VBAについての基本的な知識を意識してChatGPTへプロンプトを与えることで、高いコード生成能力をもつChatGPTがプログラムを生成してくれることを確認し、そのプロセスを例示しました。参考になれば幸いです。
Pythonや他の言語でも同様だと思いますので私自身はさらにチャレンジしたいと思います。
コメント