Eu começaria otimizando suas fórmulas O
, P
e Q
.
Você atualmente tem
=IF(IFERROR(SEARCH("Brand is not valid", M42), "") <> "", "Brand", "")
IFERROR
é uma ótima função para exibir uma versão higienizada
de um valor computado que pode ser um código de erro;
Eu uso e recomendo em respostas no Super User, freqüentemente.
Como você provavelmente sabe,
-
IFERROR(calculated_value, default_value)
é curto para
-
IF(ISERROR(calculated_value), default_value, calculated_value)
Mas usando IFERROR
para criar uma versão higienizada de algum valor
e testando esse valor para fazer algo condicionalmente
é uma maneira desnecessariamente estranha de usar IFERROR
.
A fórmula acima pode ser simplificada para
=IF(ISERROR(SEARCH("Brand is not valid", M42)), "", "Brand")
E, como você sabe, SEARCH("Brand is not valid", M42)
testa para ver se M42
contém Brand is not valid
.
Mas, desde que a coluna M
possa conter apenas as três cadeias de erro,
isso pode ser encurtado para
=IF(ISERROR(SEARCH("Brand", M42)), "", "Brand")
ou simplificado para
=IF(M42 = "Brand is not valid", "Brand", "")
OK, agora tornarei as fórmulas O
, P
e Q
um pouco mais complicadas:
-
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")
A fórmula para O42
diz
If this is the second or third row for this ID (Column A
),
look at the cell above this one
(i.e., the Column O
cell for the previous row) to see
whether we’ve already established that this thing has an invalid brand. Also,
look at Column M
for this row to see whether it is Brand is not valid
.
Then concatenate the results.
Como um ID único nunca será listado duas vezes com o mesmo erro (certo?),
estes dois sub-resultados nunca serão ambos vazios,
então isso é essencialmente fazer um "OR":
Show a value of Brand
if this row,
OR one of the previous row(s) for this ID, contains the invalid brand error.
Isso tem o efeito ou arrasta os valores O
, P
e Q
até a última linha de cada ID:
Observequeaslinhas41,44,47e49mostram,cadauma,asformasabreviadasdetodososerrosqueseaplicamaseusrespectivosIDsnascolunasO
,P
eQ
.
EudefiniColunaR
damesmaformaquevocêfez.Consulte Gerar uma lista separada por vírgula do conteúdo da célula, excluindo espaços em branco
para técnicas para eliminar as barras indesejadas disso.
Se tiver a concatenação desejada somente nas linhas 41, 44, 47 e 49
já está bom o suficiente. Caso contrário, defina N42
como
=IF($A22=$A23, N23, R22)
ou
=IF($A22<>$A23, R22, N23)
Isso é quase exatamente o mesmo truque que usei nas colunas O
, P
e Q
.
mas indo na direção oposta:
If this is the last row for this ID (i.e., if this is row 41, 44, 47, or 49),
use the concatenation of the values from this row
(which is the complete collection of error codes for this ID).
Otherwise, look at the cell below this one
(i.e., the Column N
cell for the next row),
which will have the correct answer.
Em outras palavras, os valores desejados percolam até a primeira linha para cada ID.