Я бы начал с оптимизации ваших формул O
, P
и Q
У вас сейчас есть
=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")
IFERROR
- отличная функция для отображения очищенной версии вычисленного значения, которое может быть кодом ошибки; Я использую его и часто рекомендую в ответах на Super User.
Как вы, наверное, знаете,
IFERROR(calculated_value, default_value)
коротка для
IF(ISERROR(calculated_value), default_value, calculated_value)
Но использование IFERROR
для создания очищенной версии некоторого значения, а затем проверка этого значения для выполнения каких- либо условий является излишне неловким способом использования IFERROR
. Приведенная выше формула может быть упрощена до
=IF(ISERROR(SEARCH("Brand is not valid", M42)), "", "Brand")
И, как я уверен , что вы знаете, SEARCH("Brand is not valid", M42)
проверяет , содержит ли M42
Brand is not valid
Но поскольку столбец M
может содержать только три строки ошибок, его можно сократить до
=IF(ISERROR(SEARCH("Brand", M42)), "", "Brand")
или упрощено до
=IF(M42 = "Brand is not valid", "Brand", "")
Хорошо, теперь я сделаю формулы O
, P
и Q
немного более сложными:
O42
→ =IF($A42=$A41, O41, "") & IF(ISERROR(SEARCH("Brand", $M42)), "", "Brand")
P42
→ =IF($A42=$A41, P41, "") & IF(ISERROR(SEARCH("Product", $M42)), "", "Product")
Q42
→ =IF($A42=$A41, Q41, "") & IF(ISERROR(SEARCH("OEM", $M42)), "", "OEM")
Формула для O42
гласит:
Если это вторая или третья строка для этого идентификатора (столбец A
), посмотрите на ячейку над этой (т. Е. На ячейку столбца O
для предыдущей строки), чтобы увидеть, установили ли мы уже, что эта вещь имеет недопустимый бренд , Кроме того, посмотрите на Столбец M
для этой строки, чтобы видеть, является ли это, Brand is not valid
.
Затем объедините результаты.
Поскольку уникальный идентификатор никогда не будет указан дважды с одной и той же ошибкой (верно?), Эти два промежуточных результата никогда не будут непустыми, поэтому в сущности это делает «ИЛИ»:
Показать значение Brand
если эта строка, ИЛИ одна из предыдущих строк для этого идентификатора, содержит ошибку недопустимой марки.
Это дает эффект или перетаскивая значения O
, P
и Q
вниз до последней строки для каждого идентификатора:
Обратите внимание, что в строках 41, 44, 47 и 49 показаны краткие формы всех ошибок, которые относятся к их соответствующим идентификаторам в столбцах O
, P
и Q
Я определил столбец R
же, как вы.
См. Раздел Создание списка содержимого ячеек, разделенных запятыми, за исключением пробелов , чтобы узнать способы устранения нежелательных слешей.
Если желаемое сцепление только в строках 41, 44, 47 и 49 достаточно, значит, все готово. В противном случае определите N42
как
=IF($A22=$A23, N23, R22)
или же
=IF($A22<>$A23, R22, N23)
Это почти тот же трюк, который я использовал в столбцах O
, P
и Q
, но в противоположном направлении:
Если это последняя строка для этого идентификатора (то есть, если это строка 41, 44, 47 или 49), используйте конкатенацию значений из этой строки (которая является полной коллекцией кодов ошибок для этого идентификатора).
В противном случае посмотрите на ячейку ниже этой (т. Е. На ячейку Столбца N
для следующей строки), у которой будет правильный ответ.
Другими словами, желаемые значения просачиваются до первой строки для каждого идентификатора.