Название действительно полностью отражает то, что я пытаюсь сделать, но оно немного запутанное и загадочное, поэтому я объясню с помощью варианта использования:

Если у меня есть книга Excel с двумя листами (SheetA и SheetB), которые очень близки друг к другу, и я хотел бы, чтобы различия визуально выделялись, типичным способом сделать это может быть что-то вроде этого:

  • В SheetA выделите все ячейки
  • Введите условное форматирование, Новое правило, Использовать формулу
  • В поле формулы введите:

    = A1 <> SheetB!a1

  • примените желаемое форматирование и нажмите «ОК»

По сути, это сравнивает каждую ячейку SheetA с ее аналогом в SheetB и, если они неравны, применяет форматирование. Если имена листов являются сложными (особенно если они содержат пробелы и, следовательно, нуждаются в кавычках), нажатие на имя вкладки во время ввода формулы делает полезные вещи.

Но теперь предположим, что в какой-то ячейке SheetA я ввел текстовое выражение, содержащее имя SheetB, и я хотел бы сослаться на эту ячейку в формуле условного форматирования выше.

(Зачем? У меня может быть 100 электронных таблиц, и я хотел бы сравнить от 1 до 2, затем от 1 до 3, затем от 1 до 55, изменив текст в ячейке, а не вручную каждый раз изменяя условное форматирование.)

Как я могу это сделать?

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

1 ответ1

2

Используйте формулу условного формата, например:

= A1 <> INDIRECT(ADDRESS(ROW(A1), COLUMN(A1),,, aSheet), TRUE)

Замените aSheet ссылкой на ячейку, в которой вы сохранили имя листа для сравнения.

Функция ADDRESS() собирает ссылку на ячейку в виде текстовой строки, используя функции ROW() и COLUMN() для определения строки и столбца вычисляемой ячейки.

Вы можете пропустить функцию ADDRESS() и просто создать ссылку на ячейку в формате R1C1, используя конкатенацию строк, но приведенную выше формулу, вероятно, легче прочитать и понять. Эквивалент будет:

= A1 <> INDIRECT(aSheet & "!R" & ROW(A1) & "C" & COLUMN(A1), FALSE)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .