2017-12-19 29 views
0

現在、以下のVBAを使用していますが、それを少し上回る必要があります。 VBAを使用したExcel自動フィルタの自動化

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 

Set wsData = ThisWorkbook.Worksheets("Master") 
With wsData 
    On Error Resume Next 
    '//Reset Autofilter 
    .ShowAllData 
    ThisWorkbook.Worksheets("Master").Range("A1:BZ1").AutoFilter 2, 
    ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 
End With 
'//Close my objects 
Set wsData = Nothing 
End Sub 

私は上記のコードを実行

は、フィルタは、セルH1が移入されていてもゼロ結果を返し、マスタタブの2列目の値と一致します。フィルタの一部としてH1を使用することに加えて、Q4-Q11の値を選択した場合はセル「Q4-Q11」を使用して「Summary-LT BD」タブからAutofilter基準を追加する必要があります。その基準を示すために必要なすべての値が必要です。私は最終的にいくつかのテーブル値の詳細なビューとしてexcelのボタンクリックにこのマクロを追加します。

TIA何か助けてください!

方法以下についてのジェシー

+2

まず、「On Error Resume Next」を削除してから、再度コードを実行してみてください。何も起こっていない場合は、エラーが発生している可能性があります。 – dwirony

答えて

0

:これは、複数の条件でフィルタリングする複数のフィールド/列を選択できるようになる

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 

Set wsData = ThisWorkbook.Worksheets("Master") 

wsData.Range("$A$1:$BZ$1").AutoFilter Field:=2, Criteria1:=ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 

'if you want to use multiple criteria to filter then you would have to use something like below (using an array of values to filter): 
'wsData.Range("$A$1:$BZ$1").AutoFilter Field:=2, Criteria1:=Array("A", "B", "C", "D", "E"), Operator:=xlFilterValues 
End Sub 

UPDATE

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 
Dim LastRow As Long 
Dim H1Value As String 

Set wsData = ThisWorkbook.Worksheets("Master") 
LastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row 
'wsData.Range("$A$1:$BZ$" & LastRow).AutoFilter field:=2, Criteria1:=ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 

'Or to filter multiple fields/columns then the code below will do it 
H1Value = Worksheets("Summary-LT BD").Range("H1").Value 
With wsData 
.AutoFilterMode = False 
.Range("A1:BZ" & LastRow).AutoFilter 
.Range("A1:BZ" & LastRow).AutoFilter field:=2, Criteria1:=H1Value 
.Range("A1:BZ" & LastRow).AutoFilter field:=23, Criteria1:="Inside LT" 
.Range("A1:BZ" & LastRow).AutoFilter field:=75, Criteria1:="Other" 
End With 
End Sub 
+0

私はあなたが持っていたものを試しましたが、まだ運がありません。複数の基準を使用した場合は、異なる列のものである必要があります。ここに例がありますが、正しく設定されていないことを知っていますが、私がしようとしていることを得るだろうと思います。 AutoFilter Field:= Array(2,23,75)Criteria1:= Array(ThisWorkbook.Worksheets( "Summary-LT BD")。)範囲( "H1"):wsData.Range( "$ A $ 1:$ BZ $ 1" 、 "Inside LT"、 "Other")、演算子:= xlFilterValues – Jesse

+0

私の答えはあなたが期待することを可能にするもので更新されました。フィルタリングするフィールドの数だけの配列を追加することはできません。 ..私の答えをチェックして、どうやったらどうなるのか教えてください... – Xabier

1

だから私はsomethi一緒に。私はかなり近いです。したがって、最初の3つの自動フィルタは素晴らしい動作をします。私の問題は、qの範囲の1つに値を空白のままにすると(その値にフィルターを付けたくない場合)、ブランクの出力が得られることです。私は何らかの種類の文が必要だと仮定していますが、何らかの形で "*"タイプの文を表示します。

Option Explicit 
    Sub NeedIn() 
    Dim wsData As Worksheet 

    Set wsData = ThisWorkbook.Worksheets("Master") 

    With wsData 
     On Error Resume Next 
     '//Reset Autofilter 
     .ShowAllData 
     wsData.Range("A1:BZ1").AutoFilter 23, "Inside LT" 
     wsData.Range("A1:BZ1").AutoFilter 75, "Need Date Moved In" 
     wsData.Range("A1:BZ1").AutoFilter 2, ThisWorkbook.Worksheets("Summary-LT BD").Range("H1").Value 
     wsData.Range("A1:BZ1").AutoFilter 4, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q4").Value 
     wsData.Range("A1:BZ1").AutoFilter 3, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q5").Value 
     wsData.Range("A1:BZ1").AutoFilter 5, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q6").Value 
     wsData.Range("A1:BZ1").AutoFilter 6, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q7").Value 
     wsData.Range("A1:BZ1").AutoFilter 7, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q8").Value 
     wsData.Range("A1:BZ1").AutoFilter 8, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q9").Value 
     wsData.Range("A1:BZ1").AutoFilter 9, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q10").Value 
     wsData.Range("A1:BZ1").AutoFilter 10, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q11").Value 

     Sheets("Master").Select 
     Cells.Select 
     Selection.Copy 
     Workbooks.Add 
     ActiveSheet.Paste 
     Cells.Select 
     Cells.EntireColumn.AutoFit 

    End With 
    Set wsData = ThisWorkbook.Worksheets("Master") 

    With wsData 
     On Error Resume Next 
     '//Reset Autofilter 
     .ShowAllData 
    '//Close my objects 
    End With 
    Set wsData = Nothing 
    End Sub 
関連する問題