アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

 VBAのほぼ初心者です。

 決められたセル(たとえばE100)に入力された文字列と同一の文字列を
その列内の上(E1~E99)で検索する。
そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。
なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。

 というようなことをVBAのマクロで作成したいです。
FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。

 いい方法があれば、是非教えていただきたいです。
 どうぞよろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました。

お礼日時:2010/05/07 18:00

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 にしてください。
    • good
    • 0

ヘルプの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
    • good
    • 0
この回答へのお礼

早速ためしたところ、目的どおりのことができました!

本当にありがとうございました。
これからもっと勉強していこうと思います。

お礼日時:2010/05/07 18:01

> 決められたセル(たとえばE100)


これをE1に、
> その列内の上(E1~E99)で
これをE2~E100にしたほうがよいですよ。

> 複数検索されれば、検索されたすべてのセルに対応する行を削除する。
ならば、最終行から2行目に戻る方向で実行しないと、どこまで見たかわからなくなりますよ。
    • good
    • 0

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