私はこの VBA 自動フィルタリングの問題に対する解決策を探していました。どんなアイデアでも大歓迎です:
名前付き範囲「FslList」にオートフィルター基準の静的リストがあります-データワークシートの列14をオートフィルター処理するために、これを1つの次元配列に変換しました:
Dim FSLArray As Variant
Dim rngFSL As Range
Set rngFSL = RawData.Worksheets(1).Range("FslList")
FSLArray = rngFSL.Value
With NewBook.Worksheets(1)
.Cells.AutoFilter Field:=14, Criteria1:=Application.Transpose(FSLArray), Operator:=xlFilterValues
配列から値を除外したら、それらを削除する必要があります
With .AutoFilter.Range
Set DeleteRange = .Offset(1, 0).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
End With
DeleteRange.EntireRow.Delete
NewBook.Worksheets(1).AutoFilterMode = False
End With
私の問題は、データのリストが常に変化しており、FSLArray のすべての値がフィルター対象の列に含まれているわけではないことです。したがって、オートフィルターは、リストにない基準に遭遇すると停止し、フィルタリング時に次の基準が含まれません。
私がやりたいことは、配列内の1つ以上の要素がフィルタリングされるデータの中に見つからない場合、オートフィルターが他の配列基準を使用してフィルタリングを続行することです。
編集:配列内のデータを数字(これはそうです)から文字に変更しました-現在は文字で正常に動作します。
私はコードを書き直して、提案されているように名前付き範囲を定義しようとしました:
私が配列に持っている要素(範囲C11:C14)は次のとおりです。
Acc
9158
11958 (this one is not present in the list of data)
15938
15940
名前付き範囲「PODCustList」は次のように定義されます。
=OFFSET(Acc,1,0,COUNTA(Settings!$C:$C)-1,1)
コードは同じです:
Dim PODCustArray As Variant
Dim rngPODCust As Range
Set rngPODCust = RawData.Worksheets(1).Range("PODCustList")
PODCustArray = rngPODCust.Value
With Worksheets(1)
.Cells.AutoFilter Field:=7, Criteria1:=Application.Transpose(PODCustArray), Operator:=xlFilterValues
フィルタリング後に返されるのは、「9158」要素がフィルタリングされた行のみです。
Criteria1:=Split(Join(Application.Transpose(PODCustArray)))
解決済み:オートフィルターがデータを文字列配列として正しく解釈するために、これを介して配列を実行する必要がありました。
コードを変更できますか、それとも別のアプローチを使用する必要がありますか?
前もって感謝します、