请问如何在 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
使用如下数据:
我们应用过滤器,并想知道第一的列中的可见单元格A具有与最后的列中的可见单元格A。
这个简短的宏循环遍历范围,测试可见性,并执行测试:
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
这并不依赖于 SpecialCells。
答案2
好的,明白了:
=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)
返回最后一个值。
感谢帮助。