生成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疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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