Ваша желаемая функциональность может быть достигнута без VBA. Давайте построим лист шаг за шагом:
Нам нужно значение для раскрывающегося списка, который будет отображаться в A1.
Как вы уже написали, есть лист (я называю его roster
).
Здесь мы вводим значение для выпадающего списка и в ячейке рядом с ним желаемый адрес, откуда вы хотите получить данные:
| A | B |
+--------+-----------+
1 | Name_1 | Sheet2!C6 |
2 | Name_2 | Sheet2!C7 |
3 | Name_3 | Sheet2!C8 |
Перейдите в ячейку A1
и установите допустимость "Разрешить диапазон ячеек" и установите диапазон ячеек в roster.$A$1:$A$3
. Теперь у вас есть раскрывающийся список.
В качестве следующего шага давайте введем значение в Sheet2: перейдите к Sheet2
и введите значение для извлечения (я просто использую несколько глупых текстов :-))
| A | B | C |
+----+----+-------+
6 | | | Alpha |
7 | | | Beta |
8 | | | Gamma |
Теперь для интересной части: как отобразить значения в зависимости от вашего выпадающего списка? Мы используем комбинацию Indirect()
и VLookup()
:
Перейдите в свою ячейку F34
и введите формулу ниже:
=INDIRECT(VLOOKUP(A1,roster.$A$2:$B$6,2,FALSE()))
В чем дело?
- Внутренняя часть
VLookup()
ищет значение A1
в матрице, где мы определили действительные значения и адреса данных, берет второй столбец (адрес) и извлекает его. Так что, если у вас есть "Name_2" в выпадающем списке, эта функция вернет Sheet2!C7
- Внешняя часть использует этот адрес с помощью функции
Indirect()
для получения с этого адреса (который сказал, что Excel не знает указателей), поэтому вы получаете текст "Beta".
Таким образом, все, что нам нужно, это матрица с допустимым значением, адреса данных для извлечения и одна формула. Надеюсь, что это отвечает на ваш вопрос, хотя я немного опоздал на вечеринку, если я посмотрю на отметку времени. :-)