- ベストアンサー
エクセルマクロ 特定の文字列を含む行を削除
- エクセルのマクロを使用して、特定の文字列を含む行を削除する方法について教えてください。
- マクロ起動時に削除したい特定の文字列を記述したファイルを読み込み、それから削除できるようにしたいです。
- 行中に特定の文字列がある場合、その行を削除するマクロを実行したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 削除したい文字列は一つのセルに入っていた場合ですよね? (その文字列が含まれているセルという意味ではない) 一応そういうことだとして・・・ 削除したい文字列をSheet2のA2セルからA列に入力し、 削除したい行があるSheetはSheet1で2行目以降にデータがあるとしています。 一例ですが、↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, j, k As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") Set ws2 = Worksheets("sheet2") For i = ws1.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 For j = 1 To ws1.Cells(i, Columns.Count).End(xlToLeft).Column For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, j) = ws2.Cells(k, 1) Then ws1.Rows(i).Delete (xlUp) End If Next k Next j Next i End Sub こんな感じでどんなでしょうか? 尚、一旦マクロを実行してしまうと元に戻せませんので 別Bookにコピーして試してみてください。m(__)m
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
検索のマクロの記録によってやってみる。 これは結構難しいと思う。 ーー 同行の別セルや同セルで2回以上同じ語句が見つかったり、別の語句で同行に見つかることもあるので、J列に集約したサインを仮に設ける。これが処理ロジックを複雑にしないコツと思う。 ーー マクロの記録を改変して、標準モジュールに Sub Macro1() Dim a(10) a(0) = "aaa": a(1) = "bbbb" For i = 0 To 1 Range("A2:D15").Select Range("a2").Activate Set x = Selection.Find(What:="*" & a(i) & "*", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False) x.Activate If x Is Nothing Then Exit For fsta = ActiveCell.Address Cells(ActiveCell.Row, "j") = 1 MsgBox fsta Do 'MsgBox Selection.Address Selection.FindNext(After:=ActiveCell).Activate MsgBox ActiveCell.Address If fsta = ActiveCell.Address Then Exit Do Cells(ActiveCell.Row, "j") = 1 Loop MsgBox "次の語句検索" Next i End Sub ーーー "aaa"と"bbbb"のある行のJ列に1を立てる 例データと実行結果(J列) A列 B列 C列 J列(空き列) - - - - aaax - 1 - - - - - aaaab 1 - aaa - 1 aaau - waaa 1 - - - - bbbbfg 1 - - - - nnbbbb - 1 ffbbbbu - - 1 ーーー これで下の行から順次、J列が1の行を行削除する。 このコードは略。昨日?も質問例があった。 Googleででも「VBA 行削除」で照会のこと。 ーー テキストファイルから検索文字列をセットする場合は、上記 配列 a に順次、値をいれていくコードを、最初部分に加えてください。(コード略) ーーー 上記例では a(0) = "aaa": a(1) = "bbbb" の2語句にしてます。 増えた場合はForNext のiの上限を当然変えること。
お礼
回答、ありがとうございます。早速使用してみます。
お礼
回答、ありがとうございます、思っていた動作ができ、非常に使い易かったです。この度はありがとうございました。