Bestimmen Sie, ob die erste sichtbare Zelle der letzten entspricht

721
Roman Žydyk

Wie kann man in vba feststellen, ob die erste sichtbare Zelle (nach dem Filter) der letzten sichtbaren Zelle entspricht?

Wenn ich habe:

A5 = a, B5 = 1

A6 = b, B6 = 2

A7 = c, B7 = 1

A8 = a, B8 = 1

A9 = b, B9 = 2

Wenn ich "1" herausfiltere, wird Spalte A lauten: a, c, a. Dann muss ich nichts tun.

Wenn ich jedoch "2" herausfiltere, wird Spalte A angezeigt: b, b. Dann muss ich zum Beispiel C5 sein = b.

Diese

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

Ich kann es nicht verwenden, weil es auch A1, A2, A3 und A4 verwenden wird (ich nehme an), aber ich muss A5 der "letzte" sein.

Ich habe das:

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
Verwenden Sie VBA für andere Zwecke oder würde eine auf Formeln basierende Lösung für Sie funktionieren? Werrf vor 6 Jahren 1
Formelbasiert würde funktionieren. Roman Žydyk vor 6 Jahren 0
Ich habe den Rand einer Idee - ich dachte, ich hätte sie, aber dann ein Problem festgestellt. Ich arbeite dran. Werrf vor 6 Jahren 0

2 Antworten auf die Frage

1
Gary's Student

Mit Daten wie:

Wir wenden einen Filter an und möchten wissen, ob die erste sichtbare Zelle in Spalte A den gleichen Wert wie die letzte sichtbare Zelle in Spalte A hat .

Dieses kurze Makro durchläuft den Bereich, prüft die Sichtbarkeit und führt den Test aus:

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 

Dies hängt nicht von SpecialCells ab.

1
Roman Žydyk

ok, herausgefunden:

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

gibt den ersten Wert zurück und:

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

gibt den letzten Wert zurück.

Danke für die Hilfe.