Xác định nếu ô nhìn thấy đầu tiên bằng cuối cùng


1

làm thế nào để xác định trong vba nếu ô hiển thị đầu tiên (sau khi sử dụng bộ lọc) bằng với ô hiển thị cuối cùng?

Nếu tôi có:

A5 = a, B5 = 1

A6 = b, B6 = 2

A7 = c, B7 = 1

A8 = a, B8 = 1

A9 = b, B9 = 2

Sau đó, nếu tôi lọc ra "1", cột A sẽ là: a, c, a. Sau đó tôi không cần làm gì cả.

Nhưng, khi tôi lọc ra "2", Cột A sẽ là: b, b. Thì tôi cần phải là C5 chẳng hạn = b.

Điều này

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

Tôi không thể sử dụng, vì nó cũng sẽ sử dụng A1, A2, A3 và A4 (tôi cho là vậy), nhưng tôi cần phải là A5 "người cuối cùng".

Tôi có cái này:

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
Bạn đang sử dụng VBA cho những thứ khác, hoặc một giải pháp dựa trên công thức sẽ làm việc cho bạn?
Werrf

Công thức dựa trên sẽ làm việc.
Roman Žydyk

Tôi có lợi thế của một ý tưởng - tôi nghĩ rằng tôi đã có nó, nhưng sau đó nhận thấy một vấn đề. Tôi đang giải quyết nó.
Werrf

Câu trả lời:


1

Với dữ liệu như:

nhập mô tả hình ảnh ở đây

Chúng tôi áp dụng bộ lọc và muốn biết liệu ô hiển thị đầu tiên trong cột A có cùng giá trị với ô hiển thị cuối cùng trong cột A hay không .

Vòng lặp macro ngắn này trong phạm vi, kiểm tra khả năng hiển thị và thực hiện kiểm tra:

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

nhập mô tả hình ảnh ở đây

Điều này không phụ thuộc vào SpecialCells.


1

ok, tìm ra:

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

trả về giá trị đầu tiên và:

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

trả về giá trị cuối cùng

Cảm ơn vì sự giúp đỡ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.