タイムマシーンがあったら、過去と未来どちらに行く?

こんにちは。

特定の文字列が複数あって、その文字列があったときに行ごと削除を行いたいです。
行を削除するマクロは別の方が質問をしていて、コードは分かったのですが、
”特定の文字列”が2つ以上ある場合のコードを教えていただきたいです。
行を削除するマクロは以下の通りです。
----------------------------------------------------
Sub 特定の文字列を含む行を削除()
Dim c As Range
Dim myRow As Long

With Range("A:A")

Set c = .Find("特定の文字列")

Do While Not c Is Nothing
Rows(c.Row).Delete shift:=xlUp

Set c = .Find("特定の文字列")
Loop
End With
End Sub
----------------------------------------------------
Set c = .Find("特定の文字列")の"特定の文字列"を右側へ増やしたりしてみたのですが、
そもそもの考え方が違うのだろうな…と思いました。

詳しい方、何卒よろしくお願い申し上げます。

A 回答 (2件)

こんにちは!



色々やり方はありますが、一例です。
尚、1行目は項目行でデータは2行目以降にあるという前提です。

まずオートフィルタを使うやり方です。

Sub Sample1()
 Dim lastRow As Long
 Dim myary
  myary = Array("赤", "青", "紫")
   lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A1").AutoFilter field:=1, Criteria1:=myary, Operator:=xlFilterValues
     If Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
      Range(Cells(2, "A"), Cells(lastRow, "A")).SpecialCells(xlCellTypeVisible).EntireRow.Select '//★//
     End If
    ActiveSheet.AutoFilterMode = False
End Sub

次に、コツコツループさせる方法です。

Sub Sample2()
 Dim i As Long, k As Long
 Dim myRng As Range
 Dim myary
  myary = Array("赤", "青", "紫")
   For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
    For k = 0 To UBound(myary)
     If Cells(i, "A") = myary(k) Then
      If myRng Is Nothing Then
       Set myRng = Cells(i, "A")
      Else
       Set myRng = Union(myRng, Cells(i, "A"))
      End If
      Exit For
     End If
    Next k
   Next i
    If Not myRng Is Nothing Then
     myRng.EntireRow.Select '//★//
    End If
End Sub

※ どちらも行選択でやめています。
すぐに削除したい場合は「★」の行の
>Select

>Delete
に変更してみてください。m(_ _)m
    • good
    • 2
この回答へのお礼

tom04 様
書いていただいたコードで解決しました!
とても悩んでいたので、すっきりしました。
お知恵を貸していただきありがとうございます。

お礼日時:2020/02/13 16:12

こんにちは



どのような条件でテストしているのかわかりませんが、ご提示のコードは複数行に存在する場合を想定したコードになっています。
もしかすると、あちこちの列に点在するようなケースでテストしていて、うまくいかないと言っていたりするのでは?

あるいは、完全一致ではなく部分一致も削除したいといったように、どこか前提条件が違っているのかもしれません。
全体の考え方はそのままで使えるはずなので、条件が異なるところを調整すれば良いのではないでしょうか。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
特定の文字列は複数の列で点在はして居らず、
1列に入力してあります。
上記のコードは1つの特定の文字列(例えば”赤”)を探し、特定の文字列(”赤”)を見つけ出したときに、
”赤”の行自体を削除してくれました。
特定の文字列が複数あってその行を削除したい場合(例えば”赤”と”青”と”紫”)はどうしたらいいのかなと思っていました。
説明が悪く申し訳ございません。

お礼日時:2020/02/13 14:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A