Sub Filter_Click()
Dim j As Integer, k As Integer
j = Worksheets.Count
Dim key1 As String
key1 = InputBox("Type Script Name", "Title")
For k = 1 To j
With Worksheets(k)
.Range("A1").AutoFilter field:=1, Criteria1:=key1
.Range("A1").AutoFilter field:=2, Criteria1:="26-nov-15"
End With
Next k
End Sub
Sub Clear()
Dim j As Integer, k As Integer
j = Worksheets.Count
For k = 1 To j
Worksheets(k).Range("A1").AutoFilter
Next k
End Sub
我使用上面的宏进行过滤并删除过滤器。列在所有工作表中保持相同。目前我使用简单的最大功能在过滤后在所有纸张中手动查找最大值。如果宏将突出显示最大值行,我会更高兴。当前图片在列D中具有不同的文本,例如CE和PE。在L列中有我们必须找到最大数字的数字。因此匹配D列中的CE文本并从列L中找到最大值。再次匹配D列中的PE文本,并从列L中查找最大值并突出显示整个两行。最后,当我运行clear macro时,它应该被撤消。
答案 0 :(得分:1)
作为工作表公式,您可以使用=SUBTOTAL()
,例如
=SUBTOTAL(104;C3:C33)
如果类型参数高于100,则该函数仅对可见单元格起作用,因此仅显示所有显示单元格的最大值。您可以在工作表的标题区域中的某处显示“过滤的最大值”...我通常会在列标题上方显示。
修改 ... VBA
让我们做一个接收范围并在该范围内标记MAX值的SUB ...第二个布尔参数仅选择可见行或所有要标记的行...第三个布尔参数选择是否设置或删除颜色标记...经典循环结构
Sub MarkMax(MyR As Range, OnlyVisible As Boolean, UnDo As Boolean)
Dim Idx As Integer, Tmp As Integer
Idx = 2 ' first row to be compared against current MAX
Tmp = 1 ' first value is first MAX (against better knowledge)
Do While Idx <= MyR.Rows.Count
If MyR(Idx, 1) > MyR(Tmp, 1) Then
If (OnlyVisible And Not MyR(Idx, 1).EntireRow.Hidden) Or Not OnlyVisible Then
Tmp = Idx ' capture index of new MAX
End If
End If
Idx = Idx + 1 ' advance list
Loop
With MyR(Tmp, 1).Interior
If UnDo Then
.Pattern = xlNone ' remove color
Else
.Pattern = xlAutomatic ' set color
.Color = RGB(255, 0, 0)
End If
End With
End Sub
您可以将其称为MarkMax [L2:Lxxx], True, False
,以便在当前可见行的MAX上设置颜色,并MarkMax [L2:Lxxx], True, True
清除标记。