Determine se a primeira célula visível é igual a última

1

por favor, como determinar em vba se a primeira célula visível (depois de usar o filtro) é igual à última célula visível?

Se eu tiver:

A5 = a, B5 = 1

A6 = b, B6 = 2

A7 = c, B7 = 1

A8 = a, B8 = 1

A9 = b, B9 = 2

Então, se eu filtrar "1", a coluna A será: a, c, a. Então eu não preciso fazer nada.

Mas, quando eu filtrar "2", a coluna A será: b, b. Então eu preciso ser C5 por exemplo = b.

Isso

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

Eu não posso usar, porque ele vai usar também A1, A2, A3 e A4 (suponho), mas eu preciso ser A5 o "último".

Eu tenho isso:

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
    
por Roman Žydyk 09.06.2017 / 12:38

2 respostas

1

Com dados como:

AplicamosumfiltroequeremossaberseacélulavisívelprimeirodacolunaAtemomesmovalorqueacélulavisívelúltimacolunaA.

Estamacrocurtapercorreointervalo,testaavisibilidadeerealizaoteste:

SubRoman()DimrngAsRange,rAsRangeDimv1AsVariant,v2AsVariantDimFlipFlopAsBooleanSetrng=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

Isso não depende do SpecialCells.

    
por 09.06.2017 / 14:57
1

ok, descobri:

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

retorna o primeiro valor e:

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

retorna o último valor.

Obrigado pela ajuda.

    
por 09.06.2017 / 15:02