Итак, я настроил выпадающее меню со списком имен в A1. То, что я хочу, это изменить данные в F34 в зависимости от того, что читает A1. Я хочу обновить F34 данными из другого листа.

Данные будут выглядеть примерно так:

  • Имя 1 Соответствует данным на Листе 2!C6
  • Имя 2 Соответствует данным на Sheet2!C7
  • Имя 3 Соответствует данным на Sheet2!C8
  • И так далее.

То, что я пробовал, было примерно таким. F34: =IF(A1="Name 1",Sheet2!C6), (A1="NAME 2",SHEET2!C7) и так далее.

Но я никуда не денусь. Любые идеи о том, как это будет выглядеть?

3 ответа3

1

Как вы заполняете раскрывающийся список? Вы вписали имена в диалог, или где-то есть список имен в книге?

Вы могли бы:

  • вставьте столбец на листе 2 перед столбцом C и введите имена в этот столбец, чтобы они находились рядом со значениями, к которым они относятся. Эти значения теперь находятся в столбце D.
  • используйте Vlookup, чтобы найти соответствующую информацию с формулой, как

=vlookup(A1,Sheet2!$C$6:$D$20,2,False)

Если вы не можете / не хотите помещать список имен рядом с другой информацией на листе 2, поместите список имен где угодно, скажем, в ячейки с Z1 по Z20 на листе 1. Тогда вы можете использовать формулу как

=index(Sheet2!$C$6:$c$20,match(A1,$Z$1:$Z$20,0))
0

Вы можете сделать это в VBA через событие Worksheet_SelectionChange

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Selection.Count = 1 Then
    If Not Intersect(Target, Range("A1")) Is Nothing Then
    // do a switch statment here, where you assign F34 value
    End If 
End If
End Sub
0

Ваша желаемая функциональность может быть достигнута без 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".

Таким образом, все, что нам нужно, это матрица с допустимым значением, адреса данных для извлечения и одна формула. Надеюсь, что это отвечает на ваш вопрос, хотя я немного опоздал на вечеринку, если я посмотрю на отметку времени. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .