Функция Excel определяет видимость ячейки

в условном форматировании я хочу определить, скрыта или видна строка над текущей ячейкой. Как я могу определить, видна ли ячейка или нет?

единственный Хак, о котором я могу думать, это:

  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+ стиль вместо этого.

19
задан Community
26.12.2022 17:06 Количество просмотров материала 3435
Распечатать страницу

6 ответов

вместо промежуточного итога, используя сумму в другом столбце, вы можете использовать промежуточный итог, используя counta, чтобы увидеть, если (известный-непустой) ячейка скрыта или нет. Например, если столбец A обычно отображается (если строка не скрыта)

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

вы можете поместить эту формулу в столбец, который может быть скрыт, и он все равно будет работать.

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

10
отвечен Phrogz 2022-12-28 00:54

в качестве дополнения к ответу Phrogz, если вам нужно проверить, является ли ячейка в колонки скрыто, попробуйте выполнить одно из следующих действий,

Условное Форматирование

=CELL("width",TargetCell)=0

это обновление автоматически, как только столбец скрыт.

Формула Проверки

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

эта формула не будет обновляться автоматически, и вы должны были бы направить Excel "рассчитать сейчас", выбрав опцию меню или нажимая "F9".

5
отвечен Tom Bombadil 2022-12-28 03:11

это похоже на подход Гари студента.  Определите следующую функцию 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 и перетащите вниз.  Эта формула принимает значение TRUE, если

  • категория в этой строке (A2) отличается от категории в предыдущей строке (A1); т. е. это первая строка новой категории, или
  • предыдущая строка должна быть выделена, но скрыта.

затем просто используйте Условное форматирование, чтобы выделить ячейку A2 if =H2 - это правда.

пример: исходные данные:

full data set

Да, я традиционалист, я до сих пор считаю Плутон планетой.  Здесь он снова с простыми пронумерованными строками (2, 3, 5, 7, 11, и 13) скрытые:

filtered data

конечно, вам придется включить макросы в книге.

1
отвечен G-Man 2022-12-28 05:28

, чтобы определить, является ли строка над активной ячейкой скрытый выполните этот макрос:

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
0
отвечен Gary's Student 2022-12-28 07:45

этот поток немного устарел, но в случае, если он кому-то полезен, вот способ условно форматировать дубликаты в отфильтрованной таблице без использования VBA.

  1. сделать столбец, заполненный 1-х
  2. сделать еще один столбец и поместить в него формулу вида

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

  3. поместите в обычное Дублированное Условное форматирование столбец, который вы хотите проверить.

формула от Шаг 2 скопировать значение из столбца, который вы хотите проверить, но только тогда, когда строка является видимой. Таким образом, при проверке дубликатов вы получите только те, которые применимы к отфильтрованной таблице. Я думаю, что это может не работать для нулей (или "" или что бы вы ни выбрали в качестве значения "else" в вашем операторе if). Таким образом, может быть возможно получить нулевое значение строки в вашем списке, которое выделено как дубликат. Кроме этого, мне повезло с этим методом.

0
отвечен JFrizz 2022-12-28 10:02

вот решение я использовал:

Я создал новый столбец C (и спрятал оригинал (столбец B)). В новой колонке я использовал формулу =SUBTOTAL (9, B2) Которая суммирует одну строку, которая вас интересует. Затем я скопировал все строки!

теперь, когда вы фильтр с помощью расширенного фильтра. Все значения в этом столбце равны нулю, если они не видны (не отфильтрованы).

тогда normal =SUMIF () работает как чемпион. Просто не случайно использовать скрытые столбец для суммирования по горизонтали. Суммируйте по только что созданному столбцу SUBTOTAL ().

-1
отвечен Captain Kirk 2022-12-28 12:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх