Declaração do problema
Uma planilha tem nomes em Colunas E
e X
.
Para cada linha n
, En
≠ Xn
.
Há números na coluna M
correspondentes aos nomes na coluna E
,
e números na coluna AG
correspondente aos nomes na coluna X
.
Para qualquer linha após a primeira (digamos, Linha 42),
Queremos obter valores para K42
e AF42
das linhas anteriores, se possível.
- Se
E42
for "João", encontre a linha mais recente que contém "John" (na colunaE
ouX
). Chame essa linhan
. SeEn
="John", definaK42
igual aMn
. SeXn
="João", definaK42
igual aAGn
. -
Se
X42
for "Scott", encontre a linha mais recente que contém "Scott" (na colunaE
ouX
). Chame essa linhan
. SeEn
="Scott", definaAF42
igual aMn
. SeXn
="Scott", definaAF42
igual aAGn
.
Solução
Naesperançadepreservaralgumasanidade,vamosusarcolunasauxiliares;digamosAR
eAS
.Suponhaque(comonoarquivodeexemplo),osdadosiniciemnaFila2.Insira
=MAX(($E$2:$E2=$E3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)),($X$2:$X2=$E3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
emAR3
(ignorandoAR2
).TerminarcomCtrl+Deslocar+Introduzir,paratorná-loumafórmuladematriz.Damesmaforma,definaAS3
para
=MAX(($E$2:$E2=$X3)*(100*ROW($E$2:$E2)+COLUMN($M:$M)),($X$2:$X2=$X3)*(100*ROW($X$2:$X2)+COLUMN($AG:$AG)))
comoumafórmuladematriz.(IssoéomesmoqueAR3
excetoqueasduasocorrênciasde$E3
foramsubstituídaspor$X3
.)
DefinaK3
para
=IF($AR3=0,"?", INDEX($A$1:$BG$999, INT($AR3/100), MOD($AR3,100)))
e AF3
para
=IF($AS3=0, "?", INDEX($A$1:$BG$999, INT($AS3/100), MOD($AS3,100)))
(não como fórmulas de array). Estes são os mesmos
exceto que as três ocorrências de $AR3
foram substituídas por $AS3
.
E, claro, arraste / preencha.
As colunas auxiliares localizam as ocorrências anteriores mais recentes dos nomes -
ARn
encontra a ocorrência anterior mais recente
de En
e
ASn
encontra a ocorrência anterior mais recente
de Xn
-
basicamente encontrando o máximo, ao longo das linhas anteriores, de
(previous_value=this_value) * ROW())
, ou seja, o número da linha mais alta em que o nome é uma correspondência. Em seguida, ele codifica o local onde o nome foi encontrado como
100*ROW() + COLUMN(data_we_want_to_copy)
Ambas as fórmulas aparecem em Colunas E
e X
,
e retornar as coordenadas codificadas
das colunas correspondentes M
ou AG
cell.
Em seguida, as fórmulas K
e AF
simplesmente decodificam o endereço da célula
e recuperar o valor.
EntãoAR6
é213porque"John" ( E6
) foi visto mais recentemente na Linha 2,
e, desde que ele foi visto em E2
(em vez de X2
),
queremos copiar o valor da coluna 13 (coluna M
).