Sua funcionalidade desejada pode ser obtida sem o VBA. Vamos construir a folha passo a passo:
Precisamos do valor da lista suspensa que será exibida em A1.
Como você já escreveu, há uma folha (eu nomeio roster
).
Aqui nós inserimos o valor para a lista suspensa e na célula logo em seguida
para o endereço desejado onde você deseja obter os dados:
| A | B |
+--------+-----------+
1 | Name_1 | Sheet2!C6 |
2 | Name_2 | Sheet2!C7 |
3 | Name_3 | Sheet2!C8 |
Vá para Cell A1
e defina a validade como "Permitir intervalo de células" e defina o intervalo de células como roster.$A$1:$A$3
. Agora você tem o menu suspenso.
Como próximo passo, vamos inserir o valor em Sheet2: vá para Sheet2
e digite o valor a ser recuperado (eu uso apenas alguns textos estúpidos :-))
| A | B | C |
+----+----+-------+
6 | | | Alpha |
7 | | | Beta |
8 | | | Gamma |
Agora, para a parte interessante: como exibir os valores dependendo da sua seleção suspensa? Usamos uma combinação de Indirect()
e VLookup()
:
Vá para o seu celular F34
e insira a fórmula abaixo:
=INDIRECT(VLOOKUP(A1,roster.$A$2:$B$6,2,FALSE()))
O que está acontecendo?
- A parte interna
VLookup()
procura o valor de A1
no
matriz onde definimos os valores válidos e os endereços para o
dados, pega a segunda coluna (o addr) e a recupera. Então se
você tem "Name_2" no menu suspenso, esta função retornará Sheet2!C7
- A parte externa usa esse endereço por meio da função
Indirect()
para
recuperar deste endereço (quem disse que o Excel não conhece Ponteiros),
então você pega o texto "Beta".
Portanto, tudo o que precisamos é de uma matriz com valor válido, os endereços dos dados a serem recuperados e uma única fórmula. Espero que responda a sua pergunta, embora eu esteja um pouco atrasado para a festa, se eu olhar para o timestamp. : -)