Excel 2013 - Validação de dados - Crie uma lista suspensa com valores se um segundo critério for correspondido

0

Vou simplificar o meu problema o máximo possível. Eu tenho duas folhas no Excel. Na primeira planilha, estou criando uma lista de locais. Preciso escolher uma área em que o local esteja situado na coluna A antes de digitar o local na coluna B. Na próxima coluna (C), haverá um ID que será criado automaticamente (para o primeiro local ID-001, o segundo recebe o ID 002, etc.).

Na minha segunda planilha, estou criando uma lista de ativos. Portanto, novamente, escolho uma área na coluna A e digite o nome do ativo na coluna B. Agora, quero ter uma lista suspensa na coluna C, na qual ela mostra apenas os IDs da primeira tabela em que a área está o mesmo. Eu tentei usar a função OFFSET, mas o ponto que está faltando é algum tipo de "selecione se" (como countif ou sumif) para limitar a lista de IDs àqueles com a mesma área.

Pode haver muitos locais e ativos em cada área, mas todos os locais e ativos podem ser mapeados apenas para um local.

Ansioso para suas respostas pessoal! Uma solução excel ou uma solução vba seria incrível.

Moritz
fonte

Respostas:

0

Sugiro criar uma coluna auxiliar que inclua valores exclusivos para usar no VLOOKUP. Por exemplo; digamos que você tenha Área1, Área2, Área3 e Área1 (novamente) e prossiga. Mesclar esses valores com valores incrementais (por exemplo, 01, 02, 03, ...) e criar 01Area1, 01Area2, 01Area3 e 02Area1 . Agora você sabe o que chamar para cada item da lista na segunda folha. Se você selecionar Área1 na coluna A, precisará pesquisar o número incremental e Área1 . Números incrementais por valores podem ser criados pela função COUNTIF que usa o intervalo de expansão:

=COUNTIF($A$2:A2,A2)

Ao expandir o intervalo, a fórmula conta apenas os valores até sua própria linha. Somente desvantagem deste método você precisa criar itens de lista em outro lugar

Aqui estão dois links que descrevem o uso semelhante:

  1. https://www.spreadsheetweb.com/how-to-get-nth-match-with-vlookup/
  2. https://www.spreadsheetweb.com/pricing-list-quoting-tool-part-1/
FezzikMontoya
fonte
0

Supondo que seja aceitável classificar a tabela Locais, a solução mais simples envolve apenas uma fórmula relativamente curta de validação de dados e alguns intervalos nomeados. Nenhuma coluna ou linha auxiliar é necessária.

Configure duas planilhas de exemplo Locationse Assets, assim:

Captura de tela da planilha Locais  Captura de tela da planilha de ativos

Adicione dois nomes definidos:

  1. Areas=Locations!$A:$A
  2. IDs=Locations!$C:$C

Por fim, adicione uma validação de dados da Lista suspensa na célula C2na Assetsplanilha com a seguinte fórmula e preencha / copie e cole a célula para baixo:

=INDEX(IDs,MATCH(A2,Areas,0)):INDEX(IDs,MATCH(A2,Areas,0)+COUNTIF(Areas,A2)-1)

As desvantagens deste método são:

  • Nomes definidos precisam ser usados
  • A tabela Locais deve ser classificada
  • Outras tabelas na folha Locais não podem cruzar com segurança a Areacoluna, a menos que seja garantido que eles não contenham valores correspondentes aos valores da tabela Localização Area.


A solução alternativa a seguir supera as desvantagens, exceto a outra tabela. 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:

Captura de tela da planilha de ativos

Desta vez, a C2fórmula de validação de dados é:

=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 D2e 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 de várias células - insira essa última fórmula nas células, começando E2e indo até a direita, como o número máximo de locais esperados em uma área (para o exemplo mostrado que eu 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()
  )
)
robinCTS
fonte
Notas e explicações para vir depois que eu dormir um pouco ;-)
robinCTS
Primeiro de tudo, muito obrigado robinCTS por seu trabalho incrível! Na verdade, tive a mesma idéia com a correspondência de índice, mas o problema é que a lista não pode ser classificada, pois não serei eu que preencherei as listas, mas muitas outras pessoas. Também é difícil implementar a alternativa, incluindo as colunas auxiliares, pois haverá muitos locais. Btw: Estou recebendo esse erro usando sua primeira fórmula de correspondência de índice: "Você não pode usar operadores de referência (como uniões, interseções e intervalos) ou constantes de matriz para os critérios de Validação de Dados. Alguma idéia de por que está trabalhando com você?
Moritz
@Moritz Deve ser muito fácil adicionar um manipulador de eventos no VBA para classificar automaticamente a lista assim que você sair da planilha Locais. Se isso for aceitável, adicionarei o código à minha resposta. Sim, achei que as colunas auxiliares poderiam ser um problema. Por isso, adicionei a solução de classificação. Quanto a esse erro, parece estar reclamando do :, mas isso não faz sentido. Validação de dados que tendem a cuspir esse erro para um monte de razões ;-). Estou usando o Excel 2007, e validação de dados tem mudado nas próximas versões, mas não deve ter afetado essa fórmula. ...
robinCTS
… Qual versão você está usando? Além disso, você criou uma nova pasta de trabalho e a configurou exatamente como no meu exemplo? Nessa nova pasta de trabalho, tente a fórmula de validação de dados =A2:A8( apenas no caso ;-)) e tente copiar a tabela Locais para a planilha Ativos e altere os nomes definidos para apontar para as duas colunas. Finalmente, após o último teste, tente alterar os nomes definidos na fórmula para usar as colunas diretamente. Se você possui o Excel 2010 ou superior, tente também usar as colunas na folha Locais diretamente. Isso é realmente intrigante.
robinCTS