• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[Excel VBA]複数ファイルで条件を満たす行)

[Excel VBA]マルチファイルで条件に該当する行を削除する方法

このQ&Aのポイント
  • Office 365を使用して複数のExcelファイルで条件に該当する行を削除する方法について説明します。
  • 具体的には、3つのExcelファイルの中で特定の条件を満たす行を削除する方法をマクロで記述する方法について解説します。
  • それぞれのファイルでの削除対象の条件と処理内容を詳しく説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.3

削除したら元に戻せないので念のために Ws3.Cells(Ws3Row, "H").Offset(0, 2).Value = "Delete" ↑コメントにしているこれを有効にして(H列の2列右のセルにDeleteと書き込みます) ↓これをコメントにして Ws3.Rows(Ws3Row).Delete ここも同じようにして(B列の2列右のセルにDeleteと書き込みます) Ws2.Cells(Ws2Row, "B").Offset(0, 2).Value = "Delete" Ws2.Rows(Ws2Row).Delete テストしてください。 Deleteと書き込まれた行が削除になりますから間違いがないか確認してください。 テストがうまくいけば Ws3.Rows(Ws3Row).Delete と Ws2.Rows(Ws2Row).Delete を有効にして実行してください。 Sheet1は実際のシート名に変更してください。 それぞれのファイルは開いておいてください。 If Ws1.Cells(Ws1Row, "F").Value = "1-1" Then の "1-1"は実際のグループ番号を記載してください。 Sub Test() Dim Ws1 As Worksheet, Ws2 As Worksheet, Ws3 As Worksheet Dim Ws1Row As Long, Ws2Row As Long, Ws3Row As Long Set Ws1 = ThisWorkbook.Sheets("Sheet1") Set Ws2 = Workbooks("一般顧客ファイル.xlsx").Sheets("Sheet1") Set Ws3 = Workbooks("特別顧客ファイル.xlsx").Sheets("Sheet1") For Ws1Row = 1 To Ws1.Cells(Rows.Count, "G").End(xlUp).Row If Ws1.Cells(Ws1Row, "F").Value = "1-1" Then For Ws2Row = Ws2.Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1 If Ws2.Cells(Ws2Row, "B").Value = Ws1.Cells(Ws1Row, "G").Value Then For Ws3Row = Ws3.Cells(Rows.Count, "H").End(xlUp).Row To 1 Step -1 If Ws3.Cells(Ws3Row, "H").Value = Ws2.Cells(Ws2Row, "A").Value Then ' Ws3.Cells(Ws3Row, "H").Offset(0, 2).Value = "Delete" Ws3.Rows(Ws3Row).Delete End If Next Ws3Row ' Ws2.Cells(Ws2Row, "B").Offset(0, 2).Value = "Delete" Ws2.Rows(Ws2Row).Delete End If Next Ws2Row End If Next Ws1Row Set Ws1 = Nothing Set Ws2 = Nothing Set Ws3 = Nothing End Sub

genesis50
質問者

補足

ありがとうございました。 .deleteでなく、.Interior.ColorIndex =XXで削除予定行を確認しました 問題はございませんでした。 大変申し訳ございませんが、Ws2シート、Ws3シートで削除合計をMsgBox関数などで 表示したいのですが、どのようにしたら良いでしょうか?

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.4

> Ws2シート、Ws3シートで削除合計をMsgBox関数などで > 表示したいのですが、どのようにしたら良いでしょうか? カウントをどうするのか聞こうと思って忘れてました。 Dim Ws2Count As Long, Ws3Count As Long: Ws2Count = 0: Ws3Count = 0 を追加して それぞれ削除後にカウントアップして Ws3.Rows(Ws3Row).Delete の後に Ws3Count = Ws3Count + 1 Ws2.Rows(Ws2Row).Delete の後に Ws2Count = Ws2Count + 1 最後に MsgBox "一般顧客 削除件数 [ " & Ws2Count & " 件 ]" & vbCrLf & _ "特別顧客 削除件数 [ " & Ws3Count & " 件 ]" シート名がいい場合は MsgBox Ws2.Name & " 削除件数 [ " & Ws2Count & " 件 ]" & vbCrLf & _ Ws3.Name & " 削除件数 [ " & Ws3Count & " 件 ]" で試してみてください。

回答No.2

それだと質問というよりは、仕事用のVBA作成依頼になってしまう。 意地悪では無く、全部回答するのは難しい。特にソースコードは、あとで質問と回答を参照するOKWAVEユーザーの参考になりにくいので。 問題の1点だけを解決・解説するような単純な・上手く動かないソースコードを提示してくれれば、とても回答しやすい。

回答No.1

条件判定で、andとorを正しく書く。 例えば、 if (A or B) and C then D で処理の流れは、 AもCも成り立つ →D。 BもCも成り立つ →D。 AもBもCも成り立つ →D。 Cだけ成り立つ →Dにはならない。 となる。

genesis50
質問者

補足

ありがとうございます。 大変もうしわけございませんが、可能でしたら具体的なサンプルコードをいただけませんでしょうか?

関連するQ&A