Визначте, чи перша видима комірка дорівнює останній


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

Формування на основі спрацювала б.
Роман Жидик

У мене є край ідеї - я думав, що я її маю, але потім помітив проблему. Я працюю над цим.
Werrf

Відповіді:


1

З такими даними:

введіть тут опис зображення

Застосуємо фільтр і хочете знати , якщо перший видимий осередок в стовпці А має те ж значення, що і останньої видимої осередки в стовпці А .

Цей короткий цикл макросів за діапазоном перевіряє видимість і виконує тест:

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.


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)

повертає останнє значення.

Дякуємо за допомогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.