ChatGPTが日本語からVBAのコードを生成できてたまげる

最近噂のChatGPT。大学受験問題も解ける賢いAIだとか。そこで私も試してみました。


指示は、「単価、数量、金額の列を持つExcelのテーブルを一行ずつ読み、金額を計算して更新するVBAを作りなさい。ListObjectとFor eachを用いなさい」です。

結果は次の通り正しく回答されました。

マジかと思いました。

自然言語からコードが生成されるだけで驚きですが、金額を計算しなさいと言っただけで、単価と数量を乗算しています。


試しに実行

上の画面のテキストをコピペしたものです。

ExcelのVBAでは、ListObjectを用いることで、Excelシート上のテーブルを操作することができます。以下は、単価、数量、金額の列を持つExcelのテーブルを一行ずつ読み、金額を計算して更新するVBAの例です。

Sub UpdateTable()
  Dim tbl As ListObject
  Dim row As ListRow
  
  ' テーブルを取得します
  Set tbl = ActiveSheet.ListObjects("Table1")
  
  ' テーブルの各行を取得します
  For Each row In tbl.ListRows
    ' 単価と数量から金額を計算します
    Dim unitPrice As Double
    Dim quantity As Integer
    unitPrice = row.Range(1, 1).Value
    quantity = row.Range(1, 2).Value
    row.Range(1, 3).Value = unitPrice * quantity
  Next row
End Sub

上記のVBAを実行すると、単価と数量から金額を計算し、テーブル内の金額の列が更新されます。 ListObjectを用いることで、Excelシート上のテーブルを簡単に操作することができるようになります。また、For Eachステートメントを用いることで、テーブルの各行を順番に取得し、処理を行うことができます。

できています。実際にテーブルを作って実行してみました。

実行結果

ちなみに、quantityのデータ型がintegerで最大値が小さい事について指摘をしたところ、ChatGPTはデータ型をdoubleに変更しました。


数値演算誤差

doubleのような浮動小数点数のデータ型を用いると演算誤差が生じます。そのため、誤差を許容できない会計システムでは、decimalやcurrencyを用います。試しにそれについて指摘をしてみました。

(笑)

時間をおいて再度トライさせたところ、次の結果が得られました。

途中で止まってはいるけれど、素晴らしい。

追記: 投稿した後で考えたら、この計算の場合、外貨でもない限り小数の計算は生じないので、doubleでも問題ありませんでした。


円周計算

A1セルに書かれた半径を読み取り、B1セルに円周を書き込むプロシージャーを作りなさい、と指示してみました。結果は次の通りでした。


ExcelのVBAでは、「Range」オブジェクトを用いることで、セルやセル範囲を操作することができます。以下は、A1セルに書かれた半径を読み取り、B1セルに円周を書き込むプロシージャーの例です。

Sub WriteCircumference()
  Dim radius As Double
  
  ' A1セルから半径を読み取ります
  radius = Range("A1").Value
  
  ' 円周を計算し、B1セルに書き込みます
  Range("B1").Value = 2 * 3.14 * radius
End Sub

上記のプロシージャーを実行すると、A1セルに書かれた半径を読み取り、円周を計算してB1セルに書き込むことができます。「Range」オブジェクトを用いることで、Excelシート上のセルやセル範囲を操作することができるようになります。また、半径を「Double」データ型として定義することで、膨大な値の範囲を扱うことができます。

こちらでも自動的に円周を求める公式を適用しています。落下速度を求める関数を作らせたらこちらも同様でした。


ChatGPTの実用性と将来

ChatGPTの回答は完全ではないため、このままどう実用化するのか疑問です。

とはいえ、自然言語でこれだけスムーズに会話ができるのは驚異的です。

ちなみに、HAL9000が発狂した理由や、シンギュラリティーについての意見を求めたりして遊んでいます。


ChatGPtのサイト

ChatGPTへのリンク。リンク先ページでTRY CHATGPT をクリックすればアカウント登録できます。

https://openai.com/blog/chatgpt/

アカウント登録はシンプルです。

Discordは登録しなくても使えます。私はうっかり登録してしまいましたが不要でした。


コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

オカムラ家具のOAチェアー、コンテッサを分解清掃

Excelのテーブルに行や列を挿入する際のエラー

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

Windows セキュリティーのビックリマークが消えない

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

Excel VBAからODBCを使ってデータを簡単に取得する