Как выделить изменения с условным форматированием из предыдущей записи строки в электронной таблице? - PullRequest
0 голосов
/ 24 февраля 2019

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

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

Это работает и возвращает предыдущий ROW # с тем же идентификатором DAS:

{= LARGE (IF(DASID = A1389, ROW (DASID) - MIN (ROW (DASID)) + 1), 2)}

Однако, поскольку я делаю это правило условного формата, расположение ячейки должнорассчитывается динамически.

Итак, заменив:

DASID = A1389

С:

DASID = (ADDRESS (ROW (), 1)), который оценивается в $ A $ 1389
{= LARGE (IF (DASID = (ADDRESS (ROW (), 1)), ROW (DASID) - MIN (ROW (DASID)) + 1), 2)}

Однако формула замены генерирует #NUM!ошибка в Excel.Я также попытался инкапсулировать с Indirect () безуспешно.

INDIRECT (ADDRESS (ROW (), 1))

Как только это сработает, я быоценивать различные столбцы, чтобы идентифицировать изменения и применять условное форматирование.Глядя на исправление для моей формулы или используйте лучший метод для выделения изменений из последней предыдущей записи с тем же значением идентификатора.

РЕДАКТИРОВАТЬ: Снимок Excel, где Дата события изменилась между строками

Набор данных CSV (строка № создается в Excel, но в наборе данных, чтобы показать, что записи не находятся "рядом" друг с другом ")

Row #, DailyActivitySheetID, Создан, Изменен,EventDate, статус
5,2982,11 / 24 / 2018,11 / 25 / 2018,4 / 6/2019, в ожидании
1286,2982,11 / 24 / 2018,2 / 21 / 2019,5 /2/2019, Ожидание

1 Ответ

0 голосов
/ 24 февраля 2019

Кажется, что есть несколько шагов к этому.

Прежде всего, вы можете захотеть создать динамический диапазон - именованный диапазон облегчит ваш синтаксис окончательной формулы - определить целевую область предыдущегоИдентификаторы DASЕсть много веб-сайтов, которые объясняют, как это сделать (используя OFFSET() или INDEX(), и один из них будет следующим: https://www.excel -easy.com / examples / dynamic-named-range.html .

Таким образом, предполагая, что ваши данные начинаются с A2 и нет пустых строк, вы можете добавить именованный диапазон, скажем, DASIDs с этой формулой в своем окне «Относится к»:

= СМЕЩЕНИЕ (Лист1! $ A 1,0,0, COUNTA (Лист1! $ A: $ A) -1,1)

Обратите внимание на -1чтобы исключить самую нижнюю ячейку, в которую вы вводите данные.

Затем добавьте второй именованный диапазон, который ссылается на последнюю строку DASID (для этого примера я назвал ее LastDASID) с помощьюформула:

= СМЕЩЕНИЕ (Лист1! $ A $ 1, COUNTA (Лист1! $ A: $ A) -1,0,1,1)

Опять же,-1 предотвращает смещение формулы за пределы ваших данных.

Чтобы прочитать последний элемент в списке, есть известная формула, которая использует SUMPRODUCT() (вот объяснение http://www.exceluser.com/formulas/last-item-in-list.htm).

Таким образом, вы можете добавить третий названный диапазон, называемый MatchedDASIDRow, остроумиеh формула:

= SUMPRODUCT (MAX (ROW (DASIDs) * (LastDASID = DASIDs)))

Итак, последний шаг заключается в добавлении правила условного форматированияв ячейке A2, тип правила которой Use a formula to determine which cells to format, и выберите любое форматирование по вашему желанию.Описание правила - это просто объединение первых трех шагов:

= MatchedDASIDRow = ROW (A2)

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

Обновление от комментария

Я думаю, что вы могли бы пойти на решение VBA, поскольку ваши комментарии наводят на мысль одовольно сложное требование анализа.Тем не менее, это можно сделать с помощью формул.Хитрость заключается в том, чтобы найти, где заканчиваются предыдущие данные и начинаются новые.При условии, что ваши данные вводятся в порядке изменения даты, вы можете различать диапазоны по столбцу изменения даты.

Сначала получите динамический диапазон измененного столбца.Я использовал именованный диапазон с именем AllModifiedRange и использовал формулу:

= OFFSET (Sheet1! $ C $ 1,0,0, COUNTA (Sheet1! $ C: $ C), 1)

Далее определите формулу, которая идентифицирует последнюю строку данных, дата изменения которой предшествует сегодняшнему дню.Я назвал этот именованный диапазон PriorModifiedsLastRow с формулой:

= SUMPRODUCT (MAX (ROW (AllModifiedRange) * (TODAY () <> AllModifiedRange)))

Это позволяет вам определить диапазон DASID до сегодняшнего дня.Именованный диапазон с именем PriorDASIDs с формулой:

= OFFSET (Sheet1! $ A 1,0,0 $, PriorModifiedsLastRow, 1)

Теперь вам просто нужноформула, как и прежде, чтобы проверить, соответствует ли строка последней строке.Другой именованный диапазон называется IsPriorLastRow с формулой:

= ROW (Sheet1! $ A2) = SUMPRODUCT (MAX (ROW (PriorDASID)) * (Sheet1! $ A2 = PriorDASIDs)))

Однако при этом будет выделен любой из последних DASID.Вам понадобится второй тест, чтобы определить, существует ли DASID в сегодняшнем измененном диапазоне.

Итак, сначала определите этот диапазон.Я использовал другой именованный диапазон, TodaysModifiedRange с формулой:

= OFFSET (Sheet1! $ A $ 1, PriorModifiedsLastRow, 0, COUNTA (Sheet1! $ A: $ A) -PriorModifiedsLastRow,1)

и затем запустите тест.Именованный диапазон с именем IsInTodaysModifieds с формулой:

= НЕ (ISNA (MATCH (Sheet1! $ A2, TodaysModifiedRange, 0)))

Итак, ваша формула условного форматированияпросто видит, соответствуют ли оба теста истине:

= AND (IsPriorLastRow, IsInTodaysModifieds)

Как я уже сказал, это зависит от того, какой модифицированный диапазон отсортирован по дате, и, если вы введете один и тот же DASID дважды в один и тот же день, алгоритм потерпит неудачу.Лично я бы пошел в VBA, но если вы хотите остаться с формулами Excel и хотите повысить степень сложности, вам нужно продумать свои шаги и разработать формулы структурированным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...