Функція Excel визначає, чи відображається комірка


12

У умовному форматуванні я хочу виявити, чи рядок над поточною коміркою прихований чи видимий. Як я можу виявити, чи відображається клітина чи ні?

Єдиний хак, який я можу придумати, це:

  1. Створіть стовпець із усіма 1значеннями.
  2. Використовуйте формулу на кшталт subtotal(109,c2:c2)=1(тобто просто на комірці, яку я хочу перевірити), щоб визначити, чи вона видима чи прихована.

Чи є спосіб зробити це без тимчасового стовпця, який потрібно залишити видимим, коли відображається рядок?


Щоб уникнути проблеми з XY , я хочу зробити стовпець, який є категорією для рядка. Перший ВІДБУДНИЙ рядок із певною категорією повинен мати інший стиль; пізніші рядки з однаковою категорією дещо відрізняються. У ASCII:

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

Якщо мій фільтр приховує рядок, ddddтоді я хочу, eeeeщоб у нього був +BBB+стиль.

Відповіді:


13

Замість підсумкової суми, використовуючи суму в іншому стовпчику, ви можете використовувати підзаголовок, використовуючи, countaщоб побачити, прихована чи ні (невідома) клітина. Наприклад, якщо стовпець Aзвичайно буде видно (якщо рядок не приховано)

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

Ви можете помістити цю формулу в стовпчик, який може бути прихованим, і він все одно буде працювати.

У умовному форматуванні ви можете просто використовувати: = SUBTOTAL(103,$A2)=1визначити, чи рядок видно.


5

Як додаток до відповіді Фрогза, якщо вам потрібно перевірити, чи прихована комірка у стовпці , спробуйте будь-що з наступного,

Умовне форматування

=CELL("width",TargetCell)=0

Це оновлення автоматично, як тільки стовпець буде приховано.

Перевірка формули

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

Ця формула не оновлюватиметься автоматично, і вам доведеться направити Excel на "Розрахувати зараз", вибравши варіант меню або натиснувши "F9".


1

Це схоже на підхід Гаррі до Студента. Визначте наступну функцію VBA:

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

Див. Як додати VBA в MS Office? якщо вам потрібна допомога в цьому. Тепер ви можете перевірити, чи прихований рядок, що містить .MyRowHidden(cell)cell

У тому, як я придумав вирішити проблему, використовується стовпець-помічник, але ви можете це приховати. Якщо припустити, що ваші дані починаються з рядка , введіть 2категорії у стовпціA

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

в клітинку H2та перетягніть вниз. Ця формула оцінюється як ІСТИНА, якщо

  • категорія в цьому рядку ( A2) відрізняється від категорії в попередньому рядку ( A1); тобто це перший рядок нової категорії, або
  • попередній рядок повинен бути виділений, але прихований.

Тоді просто використовуйте Умовне форматування, щоб виділити клітинку, A2якщо =H2це правда.

Приклад: необроблені дані:

        повний набір даних

Так, я традиціоналіст; Я досі вважаю Плутон планетою. Ось це знову з простими пронумерованими рядками (2, 3, 5, 7, 11 і 13), прихованими:

        відфільтровані дані

Звичайно, вам доведеться ввімкнути макроси у своїй робочій книжці.


0

Щоб визначити, чи рядок над активною коміркою приховано , запустіть цей макрос:

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
Як вони запускатимуть це з умовного форматування (задається у запитанні)?
CharlieRB

0

Цей потік трохи старий, але у випадку, якщо він комусь корисний, ось спосіб умовно форматувати дублікати на відфільтрованій таблиці без використання VBA.

  1. Зробіть стовпчик із 1
  2. Складіть ще один стовпець і поставте в нього формулу подібної форми

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

  3. Введіть у звичайний дублікат умовного форматування на стовпець, який ви хочете перевірити.

Формула з кроку 2 скопіює значення зі стовпця, який ви хочете перевірити, але лише тоді, коли рядок буде видимим. Таким чином, під час перевірки дублікатів ви отримуєте лише ті, які застосовані до відфільтрованої таблиці. Я думаю, це може не працювати для нулів (або "" або того, що ви вибрали як значення "else" у вашому операторі if). Тож можливо у вашому списку отримати нульове значення рядка, яке буде виділено як дублікат. Окрім цього, мені щастить із цим методом.


0

Я б запропонував використовувати таку формулу (для діапазону, наприклад, $ A: $ A):

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

Що це робить:

Якщо обоє

  1. комірка дорівнює зазначеній вище: A1=OFFSET(A1;-1;0)
  2. видно клітинку: SUBTOTAL(103;OFFSET(A1;-1;0))=1

тоді результат True, таким чином, клітина є дублікатом видимої комірки вгорі і повинна бути, наприклад, сірою.

Sidenote: За допомогою OFFSETфункції умовне форматування не порушиться, коли буде вставлено додатковий рядок.


-1

Ось рішення, яке я щойно використав:

Я створив новий стовпець C (і приховав оригінал (стовпець B)). У новому стовпчику я використав формулу = SUBTOTAL (9, B2), яка підсумовує один рядок, який вас цікавить. Потім я скопіював його з усіх рядків!

Тепер, коли ви фільтруєте за допомогою розширеного фільтра. Ці значення - усі ZERO у цьому стовпці, якщо вони не видимі (не відфільтровані).

Тоді нормальний = SUMIF () працює як чемпіон. Просто випадково не використовуйте прихований стовпець для підсумовування впоперек. Підсумовуйте щойно створений стовпець SUBTOTAL ().

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