自动过滤

时间:2015-10-31 05:11:44

标签: excel-vba vba excel

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时,它应该被撤消。

1 个答案:

答案 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清除标记。