人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル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




●質問者: pocon
●カテゴリ:コンピュータ
✍キーワード:AAA AS DELETE NeXT sub
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● SALINGER
●100ポイント ベストアンサー

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

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

◎質問者からの返答

ありがとうございます。

完璧です。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ