Office:行を削除
以下のマクロを変更して、Sheet1 A2の内容に基づいてSheet2の列Aを検索した後、一致する行を削除することはできますか?
はいの場合、あなたは助けることができますか?さまざまな方法を試しましたが、どれもうまくいきませんでした.
Sub SubSearch()
SearchRowAsRangeを暗くする
文字列としての薄暗いSearchValue
ws1 As Worksheet、ws2 As Worksheet
を暗くします.ws1= ThisWorkbook.Worksheets( "Sheet1")
を設定しますws2= ThisWorkbook.Worksheets( "Sheet2")
を設定しますSearchValue= ws1.Range( "A2").Value
SearchRow= ws2.Range( "A:A").Find(What:= SearchValue)
を設定しますws1.Range( "E5").Value= ws2.Range( "G"&SearchRow.Row).Value
ws1.Range( "L7").Value= ws2.Range( "I"&SearchRow.Row).Value
サブの終了
返信リスト(回答:2)
検索をコーディングするときは、Excelがコードモードかインタラクティブモードかに関係なく、最後に使用されたすべての引数を保持し、必要な引数が以前の使用と一致しない場合に誤った結果を返す可能性があるため、すべての引数を含めることが不可欠です.検索.
私のコメントによると、行を削除した後、最後の2行で何を達成しようとしているのかわからないため、これらの行は必要に応じて実行される場合と実行されない場合があります.
見つからないを処理するコードも含めました.
特にコードが行を削除している場合に、望ましくない結果が発生した場合に備えて、コードを実行する前にワークブックのバックアップがあることを確認してください.
Sub SubSearch()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim SearchRow As Range
Dim SearchValue As Range
Dim lngRow As Long
Set ws1= ThisWorkbook.Worksheets( "Sheet1")
Set ws2= ThisWorkbook.Worksheets( "Sheet2")
Set SearchValue= ws1.Range( "A2")
'範囲オブジェクトである必要があります.そうでない場合、最後の2行でエラーが発生します
Set SearchRow= ws2.Range( "A:A").Find(What:= SearchValue.Value、_
LookIn:= xlValues、_
LookAt:= xlWhole、_
SearchOrder:= xlByRows、_
SearchDirection:= xlNext、_
MatchCase:= False、_
SearchFormat:= False)
SearchRowが何もない場合
lngRow= SearchRow.Row
SearchRow.EntireRow.Delete
その他
'オプションのコード
MsgBox SearchValue.Value&"見つかりません."
'オプションのコード
Exit Sub
'オプションのコード
End If
'何をしようとしているのかわからない
'行を削除した後.
ws1.Range( "E5").Value= ws2.Range( "G"&lngRow).Value
ws1.Range( "L7").Value= ws2.Range( "I"&lngRow).Value
End Sub
簡単な答えは、この行をSetSearchRow行の下に配置することです.
ws2.Rows(SearchRow.Row).EntireRow.Delete
必要に応じて、エラー処理を構築することをお勧めします.