我有“Combined”和 PercentageSetter“工作表上的数据
我正在尝试根据 PercentageSetter 工作表中的值自动过滤组合工作表,如下标准:
合并后的工作表应仅显示 Scrip 与 PercentageSetter 中的 Scrip 匹配的记录,并且其 Allocation% 应在 Min% 和 Max% 之间(包含两者)。
我的代码出现错误
类型不匹配
上线
.AutoFilter field:=8, Criteria1:=">=" & Application.Transpose(MinPercentArray), Operator:=xlAnd, Criteria2:="<=" & Application.Transpose(MaxPercentArray)
Private Sub ApplyFilter()
Dim IncludeArray() As String
Dim MinPercentArray() As Variant
Dim MaxPercentArray() As Variant
Dim lastrow As Long
Dim i As Long
Dim wsCombined As Worksheet
Dim wsPercentageSetter As Worksheet
Set wsCombined = ThisWorkbook.Worksheets("Combined")
Set wsPercentageSetter = ThisWorkbook.Worksheets("PercentageSetter")
With wsPercentageSetter
lastrow = .Cells(.Rows.count, "A").End(xlUp).Row
ReDim IncludeArray(lastrow - 1)
ReDim MinPercentArray(lastrow - 1)
ReDim MaxPercentArray(lastrow - 1)
' assumes a header row so start in row 2
For i = 2 To lastrow
IncludeArray(i - 2) = .Range("A" & i).Text
MinPercentArray(i - 2) = .Range("B" & i).value
MaxPercentArray(i - 2) = .Range("C" & i).value
Next i
End With
'Debug.Print wsCombined.Range("H2")
'Debug.Print VarType(wsCombined.Range("H2").value)
With wsCombined.Rows("2:" & wsCombined.Rows.count)
.AutoFilter field:=8, Criteria1:=MinPercentArray, Operator:=xlFilterValues
.AutoFilter field:=8, Criteria1:=">=" & Application.Transpose(MinPercentArray), Operator:=xlAnd, Criteria2:="<=" & Application.Transpose(MaxPercentArray)
End With
End Sub
我尝试将数组更改为双倍。
VBA 宏的问题可能是由于您使用 Application.Transpose 以及对数组应用 AutoFilter 的方式造成的。
您可能需要循环遍历“Combined”表中的每一行,检查其 Scrip 是否与“PercentageSetter”表中的任何 Scrip 匹配,然后验证分配百分比是否在 Min % 和 Max % 范围内。如果是,则显示该行;否则,它会被隐藏。
Private Sub ApplyFilter()
Dim wsCombined As Worksheet, wsPercentageSetter As Worksheet
Dim lastRowCombined As Long, lastRowPercentageSetter As Long
Dim i As Long, j As Long
Dim scrip As String, allocation As Double, minPerc As Double, maxPerc As Double
Set wsCombined = ThisWorkbook.Worksheets("Combined")
Set wsPercentageSetter = ThisWorkbook.Worksheets("PercentageSetter")
lastRowCombined = wsCombined.Cells(wsCombined.Rows.Count, "A").End(xlUp).Row
lastRowPercentageSetter = wsPercentageSetter.Cells(wsPercentageSetter.Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
wsCombined.AutoFilterMode = False
For i = 2 To lastRowCombined
scrip = wsCombined.Cells(i, 1).Value
allocation = wsCombined.Cells(i, 2).Value
wsCombined.Rows(i).Hidden = True
For j = 2 To lastRowPercentageSetter
If wsPercentageSetter.Cells(j, 1).Value = scrip Then
minPerc = wsPercentageSetter.Cells(j, 2).Value
maxPerc = wsPercentageSetter.Cells(j, 3).Value
If allocation >= minPerc And allocation <= maxPerc Then
wsCombined.Rows(i).Hidden = False
Exit For
End If
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub