生成AI活用研究
Geminiと100本ノック 10本目:行の削除

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

Geminiと100本ノック 10本目:行の削除


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


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

2025年3月からGemsが無料で使えるようになりました。
そこで、独自に作成したGem(名前は「AI神髄VBA」)を使った回答も掲載するようにしました。


VBA100本ノックの出題と解答

VBA100本ノック 10本目:行の削除
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ


Geminiへの出題とGeminiの回答

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

VBA問題
画像のように「受注」シートに今月の受注データがあります。
受注数が空欄かつ備考欄に「削除」または「不要」の文字が含まれている行を削除してください。
行の削除は行全体を削除してください。
サンプルでは5行目と10行目を削除
VBA マクロ Gemini 100本ノック AI神髄VBA
VBA マクロ Gemini 100本ノック AI神髄VBA
VBA マクロ Gemini 100本ノック AI神髄VBA
VBA マクロ Gemini 100本ノック AI神髄VBA


はい、承知いたしました。「受注」シートで、受注数が空欄かつ備考欄に「削除」または「不要」が含まれる行を削除するVBAコードを作成します。

以下のVBAコードを標準モジュールに貼り付けて実行してください。

VBA
Sub DeleteRowsByConditions()

 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long

 ' 対象のシートを設定
 On Error Resume Next
 Set ws = ThisWorkbook.Sheets("受注")
 On Error GoTo 0

 If ws Is Nothing Then
  MsgBox "「受注」シートが見つかりません。", vbCritical
  Exit Sub
 End If

 ' データの最終行を取得
 ' 例としてA列を基準にしていますが、データが入っている可能性のある他の列でも構いません。
 lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row

 ' 最終行から2行目まで逆順にループ (1行目はヘッダーとしてスキップ)
 For i = lastRow To 2 Step -1

  ' 受注数(C列)が空欄 かつ 備考(D列)に「削除」または「不要」が含まれているか判定
  If IsEmpty(ws.Cells(i, "C").Value) And (InStr(ws.Cells(i, "D").Value, "削除") > 0 Or InStr(ws.Cells(i, "D").Value, "不要") > 0) Then

   ' 条件を満たす場合、行全体を削除
   ws.Rows(i).Delete

  End If

 Next i

 MsgBox "条件に一致する行の削除が完了しました。", vbInformation

End Sub

コードの説明:
  1. Dim ws As Worksheet, Dim lastRow As Long, Dim i As Long: 必要な変数を宣言します。
  2. Set ws = ThisWorkbook.Sheets("受注"): "受注"という名前のシートを変数wsに設定します。シートが見つからない場合はエラーメッセージを表示して終了します。
  3. lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row: データの最終行を取得します。ここではA列を基準にしていますが、実際にデータが入っている列に合わせて変更してください。
  4. For i = lastRow To 2 Step -1: 最終行から2行目まで1行ずつ逆順にループします。逆順にすることで、行を削除しても処理すべき行のインデックスがずれないようにします。1行目はヘッダー行と見なしてスキップしています。
  5. If IsEmpty(ws.Cells(i, "C").Value) And (InStr(ws.Cells(i, "D").Value, "削除") > 0 Or InStr(ws.Cells(i, "D").Value, "不要") > 0) Then: 条件判定を行います。
    • IsEmpty(ws.Cells(i, "C").Value): C列のセルが空欄であるかを確認します。
    • InStr(ws.Cells(i, "D").Value, "削除") > 0: D列のセルに「削除」という文字列が含まれているかを確認します。InStr関数は文字列が見つかればその開始位置を返し、見つからなければ0を返します。
    • InStr(ws.Cells(i, "D").Value, "不要") > 0: D列のセルに「不要」という文字列が含まれているかを確認します。
    • And (...): C列が空欄かつD列に「削除」または「不要」のどちらかが含まれている、という条件をANDで結合しています。
  6. ws.Rows(i).Delete: 条件を満たした場合、その行全体を削除します。
  7. Next i: 次の行に移ります。
  8. MsgBox "条件に一致する行の削除が完了しました。", vbInformation: 処理完了のメッセージを表示します。

コードの実行方法:
  1. Excelを開き、Alt + F11キーを押してVBAエディターを開きます。
  2. メニューバーの「挿入」から「標準モジュール」を選択します。
  3. 表示されたコードウィンドウに上記のVBAコードを貼り付けます。
  4. VBAエディターを閉じ、Excelシートに戻ります。
  5. Alt + F8キーを押してマクロダイアログを開きます。
  6. リストから「DeleteRowsByConditions」を選択し、「実行」ボタンをクリックします。
これにより、「受注」シートで指定した条件に合う行が削除されます。

これはもう何も言うことはないです。
画像から正確にエクセルシートを読み取ってVBAをしっかり記述しています。
大したものです。


AI神髄VBAへの出題とAI神髄VBAの回答

AI神髄VBAとは、GeminiのGems機能を使って作ったVBAに特化したカスタムAIです。
Gemのカスタム指示はシリーズを通して改良していきますので、シリーズ終了後に公開予定です。
AI神髄VBAの回答 AI神髄VBAへの出題
VBA マクロ Gemini 100本ノック AI神髄VBA

VBA問題
画像のように「受注」シートに今月の受注データがあります。
受注数が空欄かつ備考欄に「削除」または「不要」の文字が含まれている行を削除してください。
行の削除は行全体を削除してください。
サンプルでは5行目と10行目を削除
VBA マクロ Gemini 100本ノック AI神髄VBA
VBA マクロ Gemini 100本ノック AI神髄VBA
VBA マクロ Gemini 100本ノック AI神髄VBA

はい、承知いたしました。「受注」シートのデータについて、受注数が空欄かつ備考欄に「削除」または「不要」が含まれる行を削除するVBAコードを作成します。AutoFilter機能を使用して効率的に処理を行います。

VBA
Sub DeleteRowsBasedOnCriteria()

 ' 変数の宣言
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim dataRange As Range

 ' 処理対象シートの設定
 Set ws = ThisWorkbook.Sheets("受注")

 ' AutoFilterが設定されている場合は解除
 If ws.AutoFilterMode Then
   ws.AutoFilter.ShowAllData
 End If

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

 ' データ範囲を設定 (ヘッダー行を含む)
 Set dataRange = ws.Range("A1:D" & lastRow)

 ' AutoFilterを設定
 ' フィールド3 (受注数) が空白
 ' フィールド4 (備考) に "削除" または "不要" を含む
 dataRange.AutoFilter Field:=3, Criteria1:=""
 dataRange.AutoFilter Field:=4, Criteria1:="*削除*", Operator:=xlOr, Criteria2:="*不要*"

 ' 可視セル(フィルターで抽出された行)が存在するか確認し、ヘッダー行以外を削除
 On Error Resume Next ' 可視セルがない場合のエラーを無視
 ws.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
 On Error GoTo 0 ' エラーハンドリングを戻す

 ' AutoFilterを解除
 ws.AutoFilter.ShowAllData

 ' 後処理
 Set ws = Nothing
 Set dataRange = Nothing

End Sub

コードの説明:
  1. ws 変数に「受注」シートを設定します。
  2. もし既にAutoFilterが設定されていたら、ShowAllDataで解除します。
  3. データの最終行を取得し、dataRangeに変数を設定します。この範囲にはヘッダー行(1行目)を含めます。
  4. AutoFilterメソッドを使用してフィルタリングを行います。
    • Field:=3, Criteria1:="": 3列目(受注数)が空白の行を抽出します。
    • Field:=4, Criteria1:="*削除*", Operator:=xlOr, Criteria2:="*不要*": 4列目(備考)に"削除"または"不要"が含まれる行を抽出します。*はワイルドカードで、前後に任意の文字列があってもマッチします。Operator:=xlOrでOR条件を指定しています。
  5. ws.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible)で、フィルターによって表示されている行の中から、ヘッダー行を除いた部分の可視セル(実際に抽出された行)を取得します。
  6. .Delete Shift:=xlUpで、取得した可視セル(行)を削除し、下にあるセルを上方向にシフトします。可視セルがない場合はエラーになるため、On Error Resume Nextでエラーを一時的に無視しています。
  7. 行の削除後、ws.AutoFilter.ShowAllDataでAutoFilterを解除し、すべての行を表示状態に戻します。
  8. 使用したオブジェクト変数を解放します。
このコードを実行することで、条件に合致する行が効率的に削除されます。

本当に驚きました。
この出題に対して、一発目でこのVBAを回答してくるとは・・・
すごいです!AI神髄VBA
ぜひ元の私の解答・解説と比較してみてください。
VBA100本ノック 10本目:行の削除
・出題 ・頂いた回答 ・解説 ・補足 ・サイト内関連ページ




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

Geminiと100本ノック 7本目:日付データの扱い
Geminiと100本ノック 8本目:点数の合否判定
Geminiと100本ノック 9本目:フィルターコピー
Geminiと100本ノック 10本目:行の削除
Geminiと100本ノック 11本目:セル結合の警告
Geminiと100本ノック 12本目:セル結合の解除
Geminiと100本ノック 13本目:文字列の部分フォント
Geminiと100本ノック 14本目:社外秘シート削除
Geminiと100本ノック 15本目:シートの並べ替え
Geminiと100本ノック 16本目:無駄な改行を削除
Geminiと100本ノック 15本目:シートの並べ替え


新着記事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」をお願いいたします。
本文下部へ