生成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本ノック 10本目:行の削除


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

第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方 |生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する! |生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



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