确定第一个可见单元格是否等于最后一个


1

请问如何在vba中确定首次可见(使用过滤器后)单元格是否等于最后一个可见单元格?

如果我有:

A5 = a,B5 = 1

A6 = b,B6 = 2

A7 = c,B7 = 1

A8 = a,B8 = 1

A9 = b,B9 = 2

然后,如果我过滤掉“1”,则列A将是:a,c,a。然后我什么都不做。

但是,当我过滤掉“2”时,A列将是:b,b。然后我需要C5例如= b。

这个

Range("A200").End(xlUp).SpecialCells(xlCellTypeVisible).Value

我不能使用,因为它也会使用A1,A2,A3和A4(我想),但我需要成为A5的“最后一个”。

我有这个:

If Range("A5").End(xlDown).Value <> "first visible cell in Range("A5:A200")" Then
    ThisWorkbook.Sheets("Šablona").Range("B2").Value = ""
Else
    ThisWorkbook.Sheets("Šablona").Range("B2").Value = "first visible cell"
End If

1
您是否将VBA用于其他事项,或者基于公式的解决方案是否适合您?
Werrf

基于公式将起作用。
Roman Žydyk

我有一个想法的边缘 - 我以为我有它,但后来发现了一个问题。我在做这个工作。
Werrf

Answers:


1

使用以下数据:

enter image description here

我们应用过滤器,想知道是否 第一 列中的可见单元格 一个 与...具有相同的价值 持续 列中的可见单元格 一个

这个短宏在范围内循环,测试可见性,并执行测试:

Sub Roman()
    Dim rng As Range, r As Range
    Dim v1 As Variant, v2 As Variant
    Dim FlipFlop As Boolean

    Set rng = Range("A2:A26")
    FlipFlop = True

    For Each r In rng
        If FlipFlop Then
            If r.EntireRow.Hidden = False Then
                v1 = r.Value
                FlipFlop = False
            End If
        Else
            If r.EntireRow.Hidden = False Then
                v2 = r.Value
            End If
        End If
    Next r

    If v1 = v2 Then
        MsgBox "they are equal"
    Else
        MsgBox "they are not equal"
    End If

End Sub

enter image description here

这不依赖于SpecialCells。


1

想通了,想通了:

=INDEX(A3:A200;MIN(IF(SUBTOTAL(3;OFFSET(A3;ROW(A3:A200)-ROW(A3);0));ROW(A3:A200)-ROW(A3)+1)))

返回第一个值,并且:

=LOOKUP(2;1/((SUBTOTAL(3;OFFSET(A3:A65535;ROW(A3:A65535)-MIN(ROW(A3:A65535));0;1)))*(1-ISBLANK(A3:A65535)));A3:A65535)

返回最后一个值。

感谢帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.