Функция Excel определяет, видна ли ячейка

12

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

Единственный взлом, который я могу придумать:

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

Есть ли способ сделать это без временного столбца, который должен оставаться видимым, когда отображается строка?


Чтобы избежать проблемы XY , я хочу иметь столбец, который является категорией для строки. Первая строка VISIBLE с определенной категорией должна иметь другой стиль; более поздние строки с той же категорией немного отличаются. В ASCII:

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

Если мой фильтр скрывает строку с ddddтогда, я хочу, чтобы у строки eeeeбыл +BBB+стиль.

Phrogz
источник

Ответы:

13

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

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

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

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

Phrogz
источник
5

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

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

=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):

        отфильтрованные данные

Конечно, вам нужно включить макросы в вашей книге.

G-Man говорит: «Восстанови Монику»
источник
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). Поэтому может быть возможным получить нулевое значение строки в вашем списке, которое выделено как дубликат. Кроме этого мне повезло с этим методом.

JFrizz
источник
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функции делает условное форматирование не прерываться при вставке дополнительной строки.

Joma
источник
-1

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

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

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

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

Капитан керк
источник