2017-03-28 14 views
0

VBAを学習していますが、2つのワークシートを含むブックにマクロを作成しようとしています。最初のワークシートの名前は「Para」、2番目のワークシートの名前は「Report」です。 I(例えば76894Para!C6に数値またはテキストを入力するVBAを使用して別のワークシートの値と一致しない列のすべての行を削除します。

は、私はPara!C6の値と一致するものを除き、カラムReport!Y:Yのすべての行を削除するVBAコードを希望します。

私は、次のコードを試してみましたが、それが動作していません。

Sub KeepOnlyAtSymbolRows() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lastRow As Long 
    Dim s As Integer 

    s = Worksheets("Para").Range("C6") 

    Set ws = ActiveWorkbook.Sheets("Report") 

    lastRow = ws.Range("Y" & ws.Rows.Count).End(xlUp).Row 

    Set rng = ws.Range("A1:AR" & lastRow) 

    ' filter and delete all but header row 
    With rng 
     .AutoFilter Field:=1, Criteria1:="<>*s*" 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
    End With 

    ' turn off the filters 
    ws.AutoFilterMode = False 
End Sub 

答えて

0

は、以下のコードを試してみてください。

あなたrngが列「A」から列「AR」にあり、そしてあなたが列「Y」に応じてフィルタリングしたい場合は、(列AでないField:=1、)Field:=25をフィルタリングする必要があります。

また、変数の値に基づいてフィルタを適用するには、という変数名をのように外にする必要があります。

コード

Option Explicit 

Sub KeepOnlyAtSymbolRows() 

Dim ws   As Worksheet 
Dim rng   As Range 
Dim lastRow  As Long 
Dim s   As Variant 

s = Worksheets("Para").Range("C6").value 

Set ws = ActiveWorkbook.Sheets("Report")  
With ws 
    lastRow = .Range("Y" & .Rows.Count).End(xlUp).Row 
    Set rng = .Range("A1:AR" & lastRow) 
End With 

' filter and delete all but header row 
With rng 
    .AutoFilter Field:=25, Criteria1:="<>" & s, Operator:=xlAnd 
    .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
End With 

' turn off the filters 
ws.AutoFilterMode = False 

End Sub 
+0

@Sanojどのような値は 'S'でテストしていますか? –

+0

私は新しいモジュールを作って試してみましたが、私が必要としているように働いています。 ありがとうございました。 :) – Sanoj

+0

@Sanojようこそ –

関連する問題