Supondo que seja aceitável ter a tabela Locais classificada, a solução mais simples envolve apenas uma fórmula de validação de dados relativamente curta e alguns intervalos nomeados. Não são necessárias colunas ou linhas auxiliares.
Configure duas planilhas de exemplo, Locations
e Assets
, assim:
Adicionedoisnomesdefinidos:
Areas
→=Locations!$A:$A
IDs
→=Locations!$C:$C
Porfim,adicioneumavalidaçãodedadosdalistasuspensanacélulaaC2
naplanilhaAssets
comaseguintefórmulaepreencha/copieecoleacélulaparabaixo:
=INDEX(IDs,MATCH(A2,Areas,0)):INDEX(IDs,MATCH(A2,Areas,0)+COUNTIF(Areas,A2)-1)
As desvantagens desse método são:
- Os nomes definidos precisam ser usados
- A tabela Locais deve ser classificada
- Outras tabelas na planilha Locations não podem cruzar com segurança a coluna
Area
, a menos que seja garantido que elas não contenham valores correspondentes aos valores Area
da tabela de local.
A seguinte solução alternativa supera as desvantagens, exceto a de outras tabelas. No entanto, ele usa células na planilha de Ativos para armazenar os itens das listas suspensas.
A planilha de Ativos é configurada com colunas adicionais:
Destavez,afórmuladevalidaçãodedadosC2
é:
=IF(SUMPRODUCT(--ISNA(C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2))))))=0,$I$1,C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2)))-SUMPRODUCT(--ISNA(C2:INDEX(2:2,COLUMN(C2)-1+COUNTA(C2:INDEX(2:2,COLUMNS(2:2))))))))
Digite esta fórmula em D2
e preencha:
=
IF(
SUMPRODUCT(
--ISNA(
E2:INDEX(
(2:2),
COLUMN(E2)-1+MAX(1,COUNTA(E2:INDEX(2:2,COLUMNS(2:2))))
)
)
)=0,
"ERROR",
"ok"
)
Matriz multicelular - insira essa última fórmula nas células, começando em E2
e indo o mais longe possível para o número máximo de locais esperados em uma área (para o exemplo mostrado, usei E2:I2
):
=
INDEX(
Locations!$C:$C,
IFERROR(
SMALL(
IFERROR(1/(1/(
(Locations!$A$2:INDEX(Locations!$A:$A,COUNTA(Locations!$A:$A))=IF($A2="",NA(),$A2))
*ROW($A$2:INDEX($A:$A,COUNTA(Locations!$A:$A)))
)),FALSE ),
COLUMN(INDEX(2:2,1):INDEX(2:2,MAX(2,COUNTIF(Locations!$A$2:INDEX(Locations!$A:$A,COUNTA(Locations!$A:$A)),$A2))))
),
NA()
)
)