Determina se la prima cella visibile è uguale all'ultima


1

per favore, come determinare in vba se la prima cella visibile (dopo aver usato il filtro) è uguale all'ultima cella visibile?

Se ho:

A5 = a, B5 = 1

A6 = b, B6 = 2

A7 = c, B7 = 1

A8 = a, B8 = 1

A9 = b, B9 = 2

Quindi se filtrerò "1", la colonna A sarà: a, c, a. Quindi non devo fare nulla.

Ma, quando filtrerò "2", la colonna A sarà: b, b. Quindi devo essere C5 per esempio = b.

Questo

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

Non posso usare, perché utilizzerà anche A1, A2, A3 e A4 (suppongo), ma devo essere A5 "l'ultimo".

Ho questo:

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
Stai usando VBA per altre cose o una soluzione basata su formula funzionerebbe per te?
Werrf,

Basato su formula avrebbe funzionato.
Roman Žydyk,

Ho il vantaggio di un'idea: pensavo di averlo, ma poi ho notato un problema. Ci sto lavorando.
Werrf,

Risposte:


1

Con dati come:

inserisci qui la descrizione dell'immagine

Applichiamo un filtro e vogliamo sapere se la prima cella visibile nella colonna A ha lo stesso valore come l' ultima cella visibile nella colonna A .

Questa breve macro scorre su tutta la gamma, verifica la visibilità ed esegue il test:

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

inserisci qui la descrizione dell'immagine

Questo non dipende da SpecialCells.


1

ok, ho capito:

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

restituisce il primo valore e:

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

restituisce l'ultimo valore.

Grazie per l'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.