最近噂の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で最大値が小さい
VBAから ADO を使わずにODBC経由でデータベースにアクセスする方法です。 サンプルデータベース 次のようなアクセスのデータベースがあるとします。 テーブル名は「商品マスター」 カラム名は、ID, 商品名, 金額 保存してあるファイルは C:\Test\SampleDB.accdb DSNの用意 このファイルにアクセスするための DSN を作成します。(作成方法は後述) VBAの実行 Excel でシートを開き、次のプロシージャーを実行します。これはテーブルを作成するプロシージャーなので、最初に一回実行するだけです。 Private Sub uCreateTableWithQuery() Dim uWS As Worksheet Dim uList As ListObject Set uWS = ActiveSheet Set uList = uWS.ListObjects.Add( _ SourceType:=xlSrcQuery, _ Source:="ODBC;DSN=NK Test", Destination:=Range("A3")) uList.DisplayName = "ExcelProductMaster" End Sub DSN=にDSN名を指定します。この例では、NK Test。 Destination はテーブルの左上を配置するセルです。この例ではA3セル。 DisplayName はテーブル名を指定します。この例ではExcelProductMaster。 実行すると次のようにテーブルが作成されます。テーブルはQueryTableに接続され、QueryTableはDSNを利用可能です。 次のプロシージャーを実行します。 Public Sub uRefleshQueryTable() Dim uList As ListObject Dim uSQL As String Set uList = ActiveSheet.ListObjects("ExcelProductMaster") uSQL = "SELEC
コメント
コメントを投稿