エクセルVBAで、 WorksheetFunction.Matchの質問です。


以下のようなイメージ(まともに動きません)で、別シートの範囲(名前の定義:aaa)と同じ内容がB列のセルに存在すればその行を削除するというコードをご教授ください。


Sub 該当キーワード削除()
Dim C As Long
Dim LastRow As Long

LastRow = Worksheets("Sheet1").Range("A65536").End(xlDown).Row

For C = LastRow To 1 Step -1

If WorksheetFunction.Match(Cells(C, "B").Value,aaa) = 0 Then

Rows(C).Delete xlShiftUp

End If
Next C
End Sub


回答の条件
  • 1人3回まで
  • 登録:2009/01/24 19:19:17
  • 終了:2009/01/25 09:49:26

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/01/24 20:01:09

ポイント100pt

何点か気になる点があります。

End(xlDown)だとLastRowに常に65536が入るので、最終行を求めるにはEnd(xlUp)になります。

それから、ワークシート関数のMatch関数は見つかった行を返すのですが、

見つからないとエラー値#N/Aを返します。

VBAではFindを使った方がいいと思います。

Sub 該当キーワード削除()
    Dim C As Long
    Dim LastRow As Long
    Dim r As Range
    
    LastRow = Worksheets("Sheet1").Range("A65536").End(xlUp).Row
    
    For C = LastRow To 1 Step -1
        Set r = Range("aaa").Find(Cells(C, "B").Value)
        If Not r Is Nothing Then
            Rows(C).Delete xlShiftUp
        End If
    Next C
End Sub

http://excel.onushi.com/function/match.htm

id:pocon

ありがとうございます。

完璧です。

MATCH関数についてもよくよく理解できました。

2009/01/25 09:49:13

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません