生成AI活用研究
Geminiと100本ノック 6本目:セルに計算式

Geminiを中心に生成AIの活用と研究の記録
公開日:2025-04-26 最終更新日:2025-05-08

Geminiと100本ノック 6本目:セルに計算式


AIのGeminiがVBA100本ノックに挑戦!


Googleが開発した生成AIモデルのGeminiにVBA100本ノックをやってもらいました。
AIがVBAをどこまで扱えるかの実証実験の6本目です。


VBA100本ノックの出題と解答

VBA100本ノック 6本目:セルに計算式
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ


Geminiへの出題とGeminiの回答

Geminiの回答 Geminiへの出題
VBA マクロ Gemini 100本ノック

VBA問題
画像のようにA1から始まる表があります。
D列にB列×C列の計算式を入れてください。
ただし商品コードに"-"の枝番が付いている場合は計算式を入れずそのままにしてください。
例.D2にはA2×B2の計算式を入れる。D4:D5には計算式を入れない。
VBA マクロ Gemini 100本ノック
VBA マクロ Gemini 100本ノック
VBA マクロ Gemini 100本ノック

はい、承知いたしました。画像のような表に対して、A列の「商品コード」にハイフンが含まれていない行のD列に、B列×C列の計算式を入力するVBAコードを作成します。

以下のVBAコードをVBE(VBAエディタ)に貼り付けて実行してください。

VBA
Sub CalculateAmount()

 Dim lastRow As Long
 Dim i As Long

 ' データの最終行を取得
 ' A列を基準に最終行を判定します
 lastRow = Cells(Rows.Count, "A").End(xlUp).Row

 ' 2行目から最終行までループ
 For i = 2 To lastRow

  ' A列の値にハイフンが含まれているかチェック
  If InStr(Cells(i, "A").Value, "-") = 0 Then
   ' ハイフンが含まれていない場合、D列に計算式を入力
   Cells(i, "D").Formula = "=" & Cells(i, "B").Address(False, False) & "*" & Cells(i, "C").Address(False, False)
  End If

 Next i

End Sub

コードの説明:
  1. Sub CalculateAmount(): このプロシージャ名でVBAコードが開始されます。
  2. Dim lastRow As Long: データの最終行を格納するための変数を宣言します。
  3. Dim i As Long: ループカウンターとして使用する変数を宣言します。
  4. lastRow = Cells(Rows.Count, "A").End(xlUp).Row: A列の一番下から上に辿って、データが入力されている最終行の行番号を取得します。
  5. For i = 2 To lastRow: 2行目から取得した最終行まで、各行に対して処理を繰り返します。(1行目はヘッダーなのでスキップします)
  6. If InStr(Cells(i, "A").Value, "-") = 0 Then: InStr関数を使って、現在の行のA列の値にハイフン("-")が含まれているかを確認します。
    • InStr(文字列, 検索文字)は、文字列の中に検索文字が見つかった場合にその位置を返します。見つからなかった場合は0を返します。
    • = 0 なので、ハイフンが見つからなかった場合(ハイフンが含まれていない場合)に条件が真となります。
  7. Cells(i, "D").Formula = "=" & Cells(i, "B").Address(False, False) & "*" & Cells(i, "C").Address(False, False): ハイフンが含まれていない場合、現在の行のD列に計算式を入力します。
    • Cells(i, "D").Formula: 現在の行のD列のセルに対して、計算式を設定することを示します。
    • Cells(i, "B").Address(False, False): 現在の行のB列のセルのアドレスを絶対参照(例: B2)ではなく相対参照(例: B2)で取得します。False, Falseは行と列の絶対参照指定をオフにしています。
    • Cells(i, "C").Address(False, False): 同様に、現在の行のC列のセルのアドレスを相対参照で取得します。
    • "=" & ... & "*": これらを組み合わせて、例えば =B2*C2 のような計算式文字列を作成し、D列のセルに設定します。
  8. Next i: ループの次の行に進みます。
    End Sub: プロシージャの終了です。

VBAコードの実行方法:
  1. Excelを開き、Alt + F11キーを押してVBEを起動します。
  2. VBEのメニューバーから「挿入」>「標準モジュール」を選択します。
  3. 表示されたコードウィンドウに上記のVBAコードを貼り付けます。
  4. Excelシートに戻り、Alt + F8キーを押して「マクロ」ダイアログを表示します。
  5. リストから「CalculateAmount」を選択し、「実行」ボタンをクリックします。
これにより、A列の商品コードにハイフンが含まれていない行のD列に、B列とC列を掛け合わせる計算式が入力されます。




GeminiへのVBAコードの改善提案

Geminiの回答 Geminiへの出題
VBA マクロ Gemini 100本ノック

R1C1形式でセルに計算式を入れてください。
VBA マクロ Gemini 100本ノック
VBA マクロ Gemini 100本ノック

承知いたしました。D列に計算式をR1C1形式で入力するVBAコードを作成します。

先ほどのコードの計算式を入力する部分を、R1C1形式に対応するように変更します。

VBA
Sub CalculateAmount_R1C1()

 Dim lastRow As Long
 Dim i As Long

 ' データの最終行を取得
 ' A列を基準に最終行を判定します
 lastRow = Cells(Rows.Count, "A").End(xlUp).Row

 ' 2行目から最終行までループ
 For i = 2 To lastRow

  ' A列の値にハイフンが含まれているかチェック
  If InStr(Cells(i, "A").Value, "-") = 0 Then
   ' ハイフンが含まれていない場合、D列にR1C1形式の計算式を入力
   ' D列(列番号4)から見て、B列(列番号2)は -2 のオフセット
   ' D列(列番号4)から見て、C列(列番号3)は -1 のオフセット
   Cells(i, "D").FormulaR1C1 = "=RC[-2]*RC[-1]"
  End If

 Next i

End Sub

変更点:
  • Cells(i, "D").Formula = ... の代わりに Cells(i, "D").FormulaR1C1 = "... を使用しています。
  • 入力する計算式文字列をR1C1形式の "=RC[-2]*RC[-1]" に変更しました。
    • RC は、計算式が入力されるセル(現在の行、現在の列 = D列)を指します。
    • RC[-2] は、現在の行の、現在の列から左に2列目のセル(つまりB列)を指します。
    • RC[-1] は、現在の行の、現在の列から左に1列目のセル(つまりC列)を指します。
    • したがって、=RC[-2]*RC[-1] は「現在の行のB列の値」と「現在の行のC列の値」を掛け合わせる計算式になります。

VBAコードの実行方法:

実行方法は先ほどと同様です。
  1. Excelを開き、Alt + F11キーを押してVBEを起動します。
  2. 「挿入」>「標準モジュール」を選択し、上記のVBAコードを貼り付けます。
  3. Excelシートに戻り、Alt + F8キーでマクロダイアログを開きます。
  4. 「CalculateAmount_R1C1」を選択し、「実行」ボタンをクリックします。
これにより、対象となるD列のセルにR1C1形式の =RC[-2]*RC[-1] という計算式が入力されます。




同じテーマ「生成AI活用研究」の記事

Geminiと100本ノック 3本目:セルの消去
Geminiと100本ノック 4本目:セルの消去
Geminiと100本ノック 5本目:セルの計算
Geminiと100本ノック 6本目:セルに計算式
Geminiと100本ノック 7本目:日付データの扱い
Geminiと100本ノック 8本目:点数の合否判定
Geminiと100本ノック 9本目:フィルターコピー
Geminiと100本ノック 10本目:行の削除
Geminiと100本ノック 11本目:セル結合の警告
Geminiと100本ノック 12本目:セル結合の解除
Geminiと100本ノック 13本目:文字列の部分フォント


新着記事NEW ・・・新着記事一覧を見る

最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)


アクセスランキング ・・・ ランキング一覧を見る

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ