ブックを検索し、 "コード"という名前の列を持つlistobjectsにオートフィルタを適用するマクロを作成しました。ただし、フィルタを適用すると、空白の行が除外されません。どのようにこれらをフィルタリングすることができますか?Excel VBAオートフィルタを使用しているときに空白の行を削除する方法
Public Sub ApplyFilter(filter As Variant)
Dim wb As Workbook
Dim ws As Worksheet
Dim lo As ListObject
Set wb = ActiveWorkbook
' Loop through each sheet in the workbook
For Each ws In wb.Sheets
' Find any listobjects within the sheet
For Each lo In ws.ListObjects
Dim r As Integer
' Find the column named Code and filter on this column
r = lo.Range.Rows(1).Find("Code").Column
' Clear any existing filter
lo.Range.AutoFilter Field:=r
' If the filter code is not "All Categories", 999, apply the filter
If filter(0) <> 999 Then
lo.Range.AutoFilter Field:=r, Criteria1:=filter, Operator:=xlFilterValues
End If
Next
Next
End Sub
に渡されるフィルタは、単に1つの基準、または多くを有することができる配列である:ここ
フィルタを適用するコードです。私はcriteria2:= ""を追加しようとしましたが、それは何も変わりませんでした。
ご意見がありましたら教えてください。ありがとう!あなたは含めないことによって、配列を使用して複数の基準でフィルタリングしている場合
Public Sub FilterInvoice(filter As Range)
Me.ApplyFilter Me.BuildFilter(filter)
End Sub
Public Function BuildFilter(filter As Range) As Variant
Dim r As Range
Dim arFilter() As String
' Get the cell of the current category
Set r = Range("Categories").Find(filter.Value)
' Set the initial filter value to the category id
ReDim Preserve arFilter(1)
arFilter(0) = r.Offset(0, -1).Value
' Find any child categories, add child id's to filter array
For c = 1 To Application.CountIf(Range("Categories").Columns(3), arFilter(0))
Dim PrevChild As Range
' Expand the filter array
ReDim Preserve arFilter(c + 1)
If c = 1 Then
Set PrevChild = Range("Categories").Columns(3).Find(arFilter(0))
Else
' If it is not the first time through the loop, look for the next child after PrevChild
Set PrevChild = Range("Categories").Columns(3).Find(arFilter(0), PrevChild)
End If
' Offset the found child to get its code, add it to the filter array
arFilter(c) = PrevChild.Offset(, -2)
Next
' Add "<>" and "<900" to the criteria list to hide blank rows
'ReDim Preserve arFilter(UBound(arFilter) + 2)
'arFilter(UBound(arFilter) - 1) = "<>"
'arFilter(UBound(arFilter)) = "<900"
'Return the filter array
BuildFilter = arFilter
End Function
に参加し、あなたが拡大して気にしませんか?私は、私がフィルタリングしているコードを含む配列であるという基準の一つが必要です。私は条件1と "<>"として条件2として配列を使用しようとしましたが、結果は得られませんでした。演算子をxlFilterValuesに設定したままにすると、元の結果(空白行)が得られます。好奇心から "<>"基準はどういう意味ですか? – JoshPeltier
私の編集を見てください。 "<>"は "空白ではない"という意味です – Reafidy
もっと助けが必要な場合は、使用している実際のフィルターを挿入するコードを表示して、applyfilterサブルーチンを呼び出してください。 – Reafidy