• ベストアンサー

VBAマクロ・・同一セルの検索と検索したセルの操作

VBAマクロ・・同一セルの検索と検索したセルの操作  VBAのほぼ初心者です。  決められたセル(たとえばE100)に入力された文字列と同一の文字列を その列内の上(E1~E99)で検索する。 そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。 なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。  というようなことをVBAのマクロで作成したいです。 FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。  いい方法があれば、是非教えていただきたいです。  どうぞよろしくお願いいたします。

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

  • ベストアンサー
回答No.4

完全に寝ぼけた回答ですので前回の回答は無視してください。 (訂正版) Sub 行削除() Dim k As String, r As Range k = [E100]: Set r = [E1:E99] On Error GoTo er Do: r.Find(k, lookat:=xlWhole).EntireRow.Delete: Loop er: End Sub

monsika
質問者

お礼

早速ためしたところ、目的どおりのことができました! こんなに短い命令文でもよいとは驚きです。 本当にありがとうございました。

その他の回答 (3)

回答No.3

VBAでオートフィルタを使えば簡単ですが、Do~LoopとFindでもこれだけでOKです。 Sub 行削除() On Error GoTo er Do: [E1:E99].Find([E100], lookat:=xlWhole).EntireRow.Delete: Loop er: End Sub E100と完全一致の行なら→lookat:=xlWhole (現在のまま) E100と部分一致の行なら→lookat:=xlpart にしてください。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

ヘルプのFINDメソッドの使用例に手を加えて以下のような感じでいかがですか Sub test() Dim mSelectRow As String Dim c As Object With Worksheets(1).Range("E1:E99") Set c = .Find(Range("E100").Value, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do mSelectRow = mSelectRow & c.Row & ":" & c.Row & "," Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With mSelectRow = Left(mSelectRow, Len(mSelectRow) - 1) Range(mSelectRow).Delete Shift:=xlUp End Sub

monsika
質問者

お礼

早速ためしたところ、目的どおりのことができました! 本当にありがとうございました。 これからもっと勉強していこうと思います。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 決められたセル(たとえばE100) これをE1に、 > その列内の上(E1~E99)で これをE2~E100にしたほうがよいですよ。 > 複数検索されれば、検索されたすべてのセルに対応する行を削除する。 ならば、最終行から2行目に戻る方向で実行しないと、どこまで見たかわからなくなりますよ。