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

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

Geminiと100本ノック 5本目:セルの計算


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


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


VBA100本ノックの出題と解答

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


Geminiへの出題とGeminiの回答

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

VBA問題
画像のようにB2から始まる表があります。
B列×C列を計算した値をD列に入れ、通貨\のカンマ編集で表示してください。
ただしB列またはC列が空欄の場合は空欄表示にしてください。
例.D3にはB3×C3の計算結果の値を「\234,099」で表示、D5は空欄
※ブック・シートは任意
VBA マクロ Gemini 100本ノック
エクセル Excel サンプル画像

VBA
Sub CalculateAmount()

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim cellB As Range
Dim cellC As Range
Dim cellD As Range

' アクティブなシートを設定(必要に応じてシート名を変更してください)
Set ws = ThisWorkbook.ActiveSheet

' データの最終行を取得
lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row

' データがある行(2行目から最終行まで)をループ
For i = 2 To lastRow

' 各列のセルを設定
Set cellB = ws.Cells(i, "B")
Set cellC = ws.Cells(i, "C")
Set cellD = ws.Cells(i, "D")

' B列とC列の両方が空欄でないかチェック
If Not IsEmpty(cellB.Value) And Not IsEmpty(cellC.Value) Then
' 計算結果をD列に格納し、通貨表示にフォーマット
cellD.Value = cellB.Value * cellC.Value
cellD.NumberFormat = "\#,##0" ' 通貨(円)のカンマ区切りフォーマット
Else
' B列またはC列が空欄の場合はD列を空欄にする
cellD.ClearContents
End If

Next i

MsgBox "計算が完了しました。", vbInformation

End Sub

コードの説明:
  1. Sub CalculateAmount(): このプロシージャがVBAの実行開始点です。
  2. Dim ws As Worksheet, Dim lastRow As Long, Dim i As Long, Dim cellB As Range, Dim cellC As Range, Dim cellD As Range: 使用する変数とオブジェクトを宣言しています。
  3. Set ws = ThisWorkbook.ActiveSheet: 現在アクティブなシートを対象とします。もし特定のシート名を指定したい場合は、Set ws = ThisWorkbook.Sheets("シート名")のように変更してください。
  4. lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row: B列の最終行を取得します。これにより、データの範囲を正確に判断します。
  5. For i = 2 To lastRow: 2行目から最終行まで、各行をループ処理します。
  6. Set cellB = ws.Cells(i, "B"), Set cellC = ws.Cells(i, "C"), Set cellD = ws.Cells(i, "D"): 現在の行のB、C、D列のセルをそれぞれオブジェクトとして設定します。
  7. If Not IsEmpty(cellB.Value) And Not IsEmpty(cellC.Value) Then: B列とC列のセルの値が両方とも空欄でない場合に処理を実行します。
  8. cellD.Value = cellB.Value * cellC.Value: B列の値とC列の値を乗算し、その結果をD列のセルに代入します。
  9. cellD.NumberFormat = "\#,##0": D列のセルの表示形式を通貨(円)のカンマ区切りにします。\記号と#,##0の組み合わせで、画像のような表示になります。
  10. Else: B列またはC列のどちらか、あるいは両方が空欄の場合の処理です。
  11. cellD.ClearContents: D列のセルの内容を消去し、空欄にします。
  12. Next i: ループの次の行へ進みます。
  13. MsgBox "計算が完了しました。", vbInformation: 計算が終了したことをユーザーに知らせるメッセージボックスを表示します。

このコードをExcelのVBAエディターに貼り付けて実行すると、指定された処理が行われます。

VBAの回答としては素晴らしいです。
完璧です。
ですが・・・
なぜインデントされていないのでしょうか・・・


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

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

インデントしてください。
VBA マクロ Gemini 100本ノック

はい、承知いたしました。先ほどのVBAコードにインデントを付けて、読みやすく整形します。

VBA
Sub CalculateAmount()

  Dim ws As Worksheet
  Dim lastRow As Long
  Dim i As Long
  Dim cellB As Range
  Dim cellC As Range
  Dim cellD As Range

  ' アクティブなシートを設定(必要に応じてシート名を変更してください)
  Set ws = ThisWorkbook.ActiveSheet

  ' データの最終行を取得
  lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row

  ' データがある行(2行目から最終行まで)をループ
  For i = 2 To lastRow

    ' 各列のセルを設定
    Set cellB = ws.Cells(i, "B")
    Set cellC = ws.Cells(i, "C")
    Set cellD = ws.Cells(i, "D")

    ' B列とC列の両方が空欄でないかチェック
    If Not IsEmpty(cellB.Value) And Not IsEmpty(cellC.Value) Then
      ' 計算結果をD列に格納し、通貨表示にフォーマット
      cellD.Value = cellB.Value * cellC.Value
      cellD.NumberFormat = "\#,##0" ' 通貨(円)のカンマ区切りフォーマット
    Else
      ' B列またはC列が空欄の場合はD列を空欄にする
      cellD.ClearContents
    End If

  Next i

  MsgBox "計算が完了しました。", vbInformation

End Sub

このようにインデントすることで、ForループやIf...Else...End Ifの構造が視覚的に分かりやすくなります。




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

Geminiと100本ノック 2本目:セルのコピー
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本目:セル結合の解除


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

シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|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」をお願いいたします。
本文下部へ