最近、世界中で話題になっている人工知能のチャットボット ChatGPT に私も夢中になっています。こちらがどんな質問をしても必ず何か答えてくれます。とはいえ、その返答が全部真実とは限りません。知らないことは知ったかぶりして、さも真実のように答えます。困ったものです。そんな ChatGPT に VBA コードを作ってもらうことにしました。そして、嘘を言ったら叱ることにしました。いちおう私は VBA のプロですから、ChatGPT がしょーもない嘘を言っても見抜く自信があります。
[K]:記事本文 (“KOBATO” の頭文字)、
[Q1], [Q2], … :質問文 (赤いアンダーライン)、
[ChatGPT]:ChatGPT の返答
ChatGPTにVBAコードを生成してもらいました
まず、初級的なマクロを書いてもらいます。
[Q1] セル A1 から A10 に、1 以上 100 以下のランダムな整数を書き込む VBA マクロを作成してください。
[ChatGPT] 以下は、セル A1 から A10 に 1 以上 100 以下のランダムな整数を書き込むVBAマクロです。
'ChatGPT generates VBA code [1] Sub RandomNumbers() Dim i As Integer 'セルA1からA10までをランダムな整数で埋める For i = 1 To 10 Range("A" & i).Value = Int((100 * Rnd) + 1) Next i End Sub
このマクロでは、Int((100 * Rnd) + 1) を使って 1 から 100 までのランダムな整数を生成しています。Rnd は 0 以上 1 未満のランダムな数を返す関数です。Int は引数を整数に変換する関数です。100 * Rnd は 0 以上 100 未満のランダムな数を返すので、それに 1 を加えることで 1 以上 100 以下のランダムな整数を生成しています。For ループを使用して、セル A1 から A10 までを順番に埋めていきます。
[K] 見事ですね。乱数の生成法も完璧です。しかも数秒で書きましたよ。上のコードを実行して、A1:A10 にランダムな数字が入力されたことを確認したうえで、次のマクロを作ってもらいましょう。
[Q2] セル A1 から A10 までの値を合計して、セル B1 に表示するマクロを作成してください。
[ChatGPT] 以下は、セル A1 から A11 までを罫線で囲むVBAマクロです。
'ChatGPT generates VBA code [2] Sub AddBorders() Range("A1:A11").Select With Selection.Borders .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub
このマクロでは、Range(“A1:A11”).Select でセル A1 から A11 までを選択しています。そして、With Selection.Borders で選択した範囲の罫線設定にアクセスしています。.LineStyle = xlContinuous で線のスタイルを連続線に、.Weight = xlThin で線の太さを薄く、.ColorIndex = xlAutomatic で線の色を自動色に設定しています。これにより、選択したセルの周囲に罫線が引かれます。
[K] これも完璧です。このコードも実行しておいてください。次の質問です。
[Q3] セル A1 から A10 までの値を合計して、セル B1 に表示するマクロを作成してください。
[ChatGPT] 以下は、セル A1 から A10 までの値を合計して、セル A11 に表示するVBAマクロです。
'ChatGPT generates VBA code [3] Sub SumValues() Dim sum As Double sum = Application.WorksheetFunction.Sum(Range("A1:A10")) Range("A11").Value = sum End Sub
このマクロでは、Application.WorksheetFunction.Sum(Range(“A1:A10”)) を使ってセル A1 から A10 までの値の合計を求めています。Sum関数は、引数で指定したセル範囲の合計値を返します。sum 変数に合計値を代入した後、Range(“A11”).Value = sum でセル A11 に合計値を表示しています。
[K] … ここまでノーミスです。近い将来、私の仕事がなくなってしまうのではないかと不安になってきましたよ。
[Q4] セル A1 から A10 までの値を昇順で並び替えるマクロを作成してください。
[ChatGPT] 以下は、セル A1 から A10 までの値を昇順で並び替えるVBAマクロです。
'ChatGPT generates VBA code [4] Sub SortAscending() Range("A1:A10").Sort Key1:=Range("A1"), _ Order1:=xlAscending, Header:=xlNo End Sub
このマクロでは、Range(“A1:A10”).Sort を使ってセル A1 から A10 までの値を並び替えています。Key1:=Range(“A1”) で並び替えの基準となるセルを指定しています。ここでは、セル A1 を基準として並び替えを行います。Order1:=xlAscending で昇順に並び替えるよう指定しています。Header:=xlNo は、範囲にヘッダーがないことを指定するためのオプションです。このマクロを実行すると、セル A1 から A10 までの値が昇順で並び替えられます。
[K] 怖くなってきました。「そろそろミスしてほしいかな」とか思ったりしますよ。
[Q5] セル A1 から A10 の範囲で、奇数の場合は背景色を赤色に、偶数の場合は背景色を青色に塗るマクロを作ってください。
[ChatGPT] 以下は、セル A1 から A10 の範囲で、奇数の場合は背景色を赤色に、偶数の場合は背景色を青色に塗るVBAマクロです。
'ChatGPT generates VBA code [5] Sub ColorOddEven() Dim cell As Range For Each cell In Range("A1:A10") If cell.Value Mod 2 = 0 Then '偶数の場合は青色に塗る cell.Interior.Color = RGB(135, 206, 250) 'ライトブルー Else '奇数の場合は赤色に塗る cell.Interior.Color = RGB(255, 99, 71) 'トマトレッド End If Next cell End Sub
このマクロでは、Range(“A1:A10”) で範囲を指定して、For Each cell In Range(“A1:A10”) でセルを 1 つずつ取り出しています。cell.Value Mod 2 = 0 で、cell の値が偶数かどうかを判定しています。偶数の場合は、cell.Interior.Color = RGB(135, 206, 250) で背景色を青色に塗ります。奇数の場合は、cell.Interior.Color = RGB(255, 99, 71) で背景色を赤色に塗ります。このマクロを実行すると、セル A1 から A10 の値が奇数か偶数かに応じて、背景色が塗り分けられます。
[K] … このサイトの存在価値が否定されているような気分になってきました … でも、なんとか気を取り直して、さらなる挑戦状を突きつけます。
[Q6] セル C3 付近にチェックボックスを出現させる VBA マクロを作ってください。チェックボックスをオンにすると、セル A1 に “Hello” が入力され、チェックボックスをオフにすると、セル A1 の値がクリアされるようにします。
[ChatGPT] 以下は、セル C3 付近にチェックボックスを出現させ、チェックボックスのオン/オフに応じてセル A1 に “Hello” を入力する VBA マクロの例です。
'ChatGPT generates VBA code [6] Sub AddCheckbox() Dim chkBox As CheckBox Set chkBox = ActiveSheet.CheckBoxes.Add(Left:=Range("C3").Left, Top:=Range("C3").Top, Width:=50, Height:=15) chkBox.OnAction = "UpdateCellA1" End Sub Sub UpdateCellA1() If ActiveSheet.CheckBoxes(1).Value = 1 Then Range("A1").Value = "Hello" Else Range("A1").ClearContents End If End Sub
上記のコードを実行すると、セル C3 付近にチェックボックスが追加されます。チェックボックスをオンにすると、セル A1 に “Hello” が入力され、チェックボックスをオフにすると、セル A1 の値がクリアされます。チェックボックスの位置やサイズを変更する場合は、AddCheckbox 関数のパラメーターを調整してください。また、このコードを実行するには、マクロを実行する Excelブックでマクロが有効になっている必要があります。
[K] … 完敗です … 生意気言って申し訳ありませんでした。もっと VBA について勉強して出直してきます。最後に、ChatGPT さんに、VBA が上達する方法を教えてもらいます。
[Q7] VBA のコーディングスキルを上達させる秘訣を教えてください。
[ChatGPT] VBAのコーディングスキルを上達させるためには、以下のようなポイントがあります。
1. VBA の基礎を学ぶ:まずは VBA の基礎をしっかりと学ぶことが大切です。VBA のデータ型、制御構造、関数、オブジェクト指向プログラミングなど、基礎的な知識を身につけることが必要です。
2. 問題を解決するために自分でコードを書く:VBAのスキルを向上させるためには、実際に問題を解決するためのコードを自分で書いてみることが重要です。例えば、Excelの自動化やデータ処理など、自分が取り組みたい問題を設定し、解決するためのコードを書くことでスキルを磨くことができます。
3. 質問して学ぶ:VBA についてわからないことがあれば、インターネット上の情報やコミュニティを利用して質問し、学ぶことができます。VBA に詳しい人に質問をすることで、より深い知識を身につけることができます。
4. コードの可読性を高める:VBA のコーディングスキルを上達させるためには、コードの可読性を高めることが大切です。インデントやコメントを使って、コードの意図や処理内容を明確にすることで、自分や他人がコードを理解しやすくなります。
5. テストを行う:VBA のコードを書く際には、テストを行うことも重要です。自分で想定した入力値や条件を使って、コードの正しさを確認することで、バグを発見し修正することができます。
6. 定期的に練習する:VBA のスキルを上達させるためには、定期的に練習することが大切です。簡単な問題から難しい問題まで、幅広いレベルの問題に取り組むことで、スキルを向上させることができます。また、練習することで、自分が VBA の得意な分野や不得意な分野を把握することができます。
以上が、VBA のコーディングスキルを上達させるためのポイントです。
コメント
【ChatGPT×VBA】AIのVBA学習方法
[Q] あなたはVBAのプログラミング技術をどのように習得したのですか? 子供にもわかるように易しく説明してください。
[ChatGPT] 私は人工知能であり、独自の方法でプログラムされています。私は、OpenAIと呼ばれる企業によって開発された大規模な自然言語処理のモデルを使用しています。このモデルは、膨大なデータセットから学習し、様々な言語の文法や語彙を理解することができます。具体的には、VBAのプログラミング技術については、OpenAIがトレーニングに使用した多数のテキストデータ、Webページ、電子書籍、コーディングサイトなどから学習しています。これらの情報源から、VBAの文法や構文、一般的なコーディングパターンを理解し、それらを使って質問に回答することができます。簡単に言うと、私は人工知能であり、大量のデータから学習してVBAのプログラミング技術を習得しています。