Hàm Excel xác định nếu một ô được hiển thị


12

Trong định dạng có điều kiện tôi muốn phát hiện nếu hàng phía trên ô hiện tại bị ẩn hoặc hiển thị. Làm thế nào tôi có thể phát hiện nếu một tế bào có thể nhìn thấy hay không?

Cách hack duy nhất tôi có thể nghĩ đến là:

  1. Tạo một cột với tất cả các 1giá trị.
  2. Sử dụng một công thức như subtotal(109,c2:c2)=1(tức là chỉ trên ô tôi muốn kiểm tra) để xác định xem nó có hiển thị hay ẩn đi không.

Có cách nào để làm điều này mà không có cột tạm thời phải được nhìn thấy khi hàng được hiển thị không?


Để tránh sự cố XY , điều tôi muốn làm là có một cột là danh mục cho hàng. Hàng VISIBLE đầu tiên với một danh mục cụ thể nên có một phong cách khác nhau; các hàng sau với cùng thể loại hơi khác nhau. Trong ASCII:

cat.   item
+AAA+  aaaa
(AAA)  bbbb
(AAA)  cccc
+BBB+  dddd
(BBB)  eeee
(BBB)  ffff

Nếu bộ lọc của tôi ẩn hàng với ddddthì tôi muốn hàng eeee+BBB+kiểu dáng thay thế.

Câu trả lời:


13

Thay vì tổng phụ sử dụng một tổng trên một cột khác, bạn có thể sử dụng tổng phụ sử dụng countađể xem liệu một ô (đã biết không trống) có bị ẩn hay không. Ví dụ: nếu cột Athường sẽ hiển thị (trừ khi hàng bị ẩn)

= IF( SUBTOTAL(103,A2)=1, "VISIBLE", "HIDDEN (or blank)" )

Bạn có thể đặt công thức này vào một cột có thể bị ẩn và nó vẫn hoạt động.

Trong định dạng có điều kiện, sau đó, bạn chỉ có thể sử dụng: = SUBTOTAL(103,$A2)=1để xác định xem hàng có hiển thị hay không.


5

Là phần phụ lục cho câu trả lời của Phrogz, nếu bạn cần kiểm tra xem một ô trong cột có bị ẩn hay không, hãy thử một trong các cách sau,

Định dạng có điều kiện

=CELL("width",TargetCell)=0

Điều này cập nhật tự động ngay khi một cột bị ẩn.

Kiểm tra công thức

=IF(CELL("width",TargetCell)=0, "Cell is hidden.", "Cell is visible.")

Công thức này sẽ không tự động cập nhật và bạn sẽ phải chuyển Excel sang "Tính toán ngay" bằng cách chọn tùy chọn menu hoặc nhấn "F9".


1

Điều này tương tự như phương pháp của Học sinh Gary. Xác định hàm VBA sau:

Function MyRowHidden(ref As Range)
    MyRowHidden = Rows(ref.Row).Hidden
End Function

Xem Làm cách nào để thêm VBA trong MS Office? nếu bạn cần giúp đỡ với điều đó. Bây giờ bạn có thể sử dụng để kiểm tra xem hàng chứa có bị ẩn hay không.MyRowHidden(cell)cell

Cách tôi nghĩ ra để giải quyết vấn đề sử dụng cột trợ giúp, nhưng bạn có thể ẩn nó. Giả sử rằng dữ liệu của bạn bắt đầu trong Hàng 2, với các danh mục trong Cột A, hãy nhập

=OR($A1<>$A2, AND(H1,MyRowHidden(H1)))

vào ô H2, và kéo xuống. Công thức này ước tính thành TRUE nếu

  • danh mục trong hàng này ( A2) khác với danh mục trong hàng trước ( A1); tức là, đây là hàng đầu tiên của một danh mục mới, hoặc
  • hàng trước cần được tô sáng, nhưng bị ẩn.

Sau đó, chỉ cần sử dụng Định dạng có điều kiện để tô sáng ô A2nếu =H2là đúng.

Ví dụ: dữ liệu thô:

        bộ dữ liệu đầy đủ

Vâng, tôi là một người theo chủ nghĩa truyền thống; Tôi vẫn tính Pluto là một hành tinh. Đây là một lần nữa với các hàng được đánh số nguyên tố (2, 3, 5, 7, 11 và 13) ẩn:

        dữ liệu được lọc

Tất nhiên bạn sẽ phải bật macro trong sổ làm việc của bạn.


0

Để phát hiện xem hàng phía trên ô đang hoạt động có bị ẩn hay không , hãy chạy macro này:

Sub WhatsAboveMe()
Dim r As Range
Set r = Selection
With r
    If .Row = 1 Then
        Exit Sub
    End If
    If .Offset(-1, 0).EntireRow.Hidden = True Then
        MsgBox "the row above is hidden"
    Else
        MsgBox "the row above is visible"
    End If
End With
End Sub

1
Làm thế nào họ chạy nó từ Định dạng có điều kiện (được hỏi trong câu hỏi)?
CharlieRB ngày

0

Chủ đề này hơi cũ, nhưng trong trường hợp nó hữu ích với bất kỳ ai, đây là một cách để định dạng trùng lặp có điều kiện trên một bảng được lọc mà không phải sử dụng VBA.

  1. Tạo một cột được điền bằng 1
  2. Tạo một cột khác và đặt một công thức như thế này trong đó

    =IF(SUBTOTAL(103, [@ColumnWithOnlyOnesInIt])=1, [@ColumnYouWantToCheckForDuplicates], "")

  3. Đặt định dạng có điều kiện trùng lặp bình thường trên cột bạn muốn kiểm tra.

Công thức từ bước 2 sẽ sao chép giá trị từ cột bạn muốn kiểm tra nhưng chỉ khi hàng được hiển thị. Bằng cách đó, khi các mục trùng lặp được kiểm tra, bạn chỉ nhận được những cái phù hợp với bảng đã lọc. Tôi nghĩ rằng điều này có thể không hoạt động cho số không (hoặc "" hoặc bất cứ điều gì bạn chọn làm giá trị "khác" trong câu lệnh if của bạn). Vì vậy, có thể lấy giá trị dòng 0 trong danh sách của bạn được tô sáng dưới dạng trùng lặp. Ngoài ra, tôi còn gặp may mắn với phương pháp này.


0

Tôi muốn đề xuất sử dụng công thức sau (trên một phạm vi, ví dụ $ A: $ A):

=AND(A1=OFFSET(A1;-1;0);SUBTOTAL(103;OFFSET(A1;-1;0))=1)

Nó làm gì

Nếu cả hai

  1. ô tương đương với ô trên: A1=OFFSET(A1;-1;0)
  2. ô trên có thể nhìn thấy: SUBTOTAL(103;OFFSET(A1;-1;0))=1

sau đó kết quả là True do đó ô là một bản sao của một ô có thể nhìn thấy ngay phía trên và nên được tô màu xám.

Sidenote: Sử dụng OFFSETchức năng làm cho định dạng có điều kiện sẽ không bị phá vỡ khi một hàng bổ sung được chèn.


-1

Đây là giải pháp tôi vừa sử dụng:

Tôi đã tạo một cột C mới (và HID bản gốc (Cột B)). Trong cột mới, tôi đã sử dụng công thức = SUBTOTAL (9, B2) Mà hàng SUMS mà bạn quan tâm. Sau đó, tôi đã sao chép tất cả các hàng!

Bây giờ, khi bạn lọc bằng bộ lọc nâng cao. Các giá trị là tất cả số KHÔNG trong cột này trừ khi chúng hiển thị (không được lọc).

Sau đó, bình thường = SUMIF () hoạt động như một nhà vô địch. Chỉ cần không vô tình sử dụng cột ẩn để tổng hợp. Tổng trên cột SUBTOTAL () bạn vừa tạo.

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.