2016-01-08 6 views
1

У меня есть набор уникальных идентификаторов и имен:Выберите значение из выпадающего списка, но заполнить скрытый столбец

ID NAME 
aa Jeff 
bb Matt 
cc Trung 
dd Trung 

Все идентификаторы уникальны. Имена нет.

На листе у меня есть ряд колонн:

Date Time ID Name Value 
1/1 1:30 aa Jeff 123124 
1/2 2:20 cc Trung 12443234 

Сейчас, пользователь будет заполнить поле ID, ВПР будет возвращать имя.

Есть ли способ настроить выпадающий список в ячейке идентификатора, который показывает конкатенацию идентификатора и имени, но если выбрано, хранится только идентификатор?

Идея состоит в том, что связанное значение, которое появляется в выпадающем списке (Ex: aa | Jeff), более удобно, просто «aa».

+0

Если имена не уникальны, как бы упасть, знаете, какой идентификатор нужно вернуть? Изменить: другими словами, вы делаете это назад. Укажите имя драйвера, а не идентификатор. – findwindow

+0

Нет никакой гарантии ... поэтому я надеялся использовать конкатенацию, чтобы добавить дополнительную информацию в раскрывающийся список. –

+0

Я все еще чувствую, что ты делаешь это назад/не можешь окутать мою голову так, как ты этого хочешь, поэтому извините, не могу помочь:/ – findwindow

ответ

1

Хорошо, надеюсь, что мой ответ поможет. Если нет, скажите мне, и я постараюсь улучшить его.

Код внутри листа

Private Sub ComboBox1_Change() 
    'Just use the frist part of the string, ID 
    Range("I1").Value = Split(Me.ComboBox1.Value, " | ") 

    'Optional, if you want to put the name using code. 
    'If not, just use the VLOOLUP 
    Range("J2").Value = Split(Me.ComboBox1.Value, " | ")(1) 
End Sub 

Private Sub Worksheet_Activate() 
    Dim r 
    Dim c 
    Dim i 
    Dim L 
    Dim myRngID As Range 

    r = Range("C2").End(xlDown).Row 'the final row of the ID column 
    c = Range("D2").Column ' the number of the column of the name 

    Set myRngID = Range(Cells(2, 3), Cells(r, 3)) 'use only the ID range 

    'Just to clean the ComboBox everytime to avoid duplicates 
    Me.ComboBox1.Value = "" 
    L = Me.ComboBox1.ListCount 
    On Error Resume Next 
    For i = 0 To L 
     With Me.ComboBox1 
      .RemoveItem i 
     End With 
    Next i 
    On Error GoTo 0 

    'Pupulate the ComboBox with the string {ID[space]|[space]NAME} 
    For Each i In myRngID 
     With Me.ComboBox1 
      .AddItem i.Value & " | " & i.Offset(0, 1).Value 
     End With 
    Next i 
End Sub 

На листе только это

An image is worth a thousand words

Как вы можете видеть, единственная формула на листе в J1, ВПР. В J2 имя вставляется с помощью VBA. ComboBox обладает специальным свойством. Все в коде выше.

В результате имя всегда берется из ComboBox, а затем независимо от того, какой из них выбран, всегда будет правильным, как в VlookUp.

+0

Я собираюсь попробовать сейчас, это выглядит отлично! –

+0

Это потрясающе! Это именно то, что мне нужно. Я сделал несколько модификаций, потому что были некоторые проблемы при активации других листов и возвращении к тому, у которого есть поля, потому что значения CombBox «изменялись», когда они были обновлены, чтобы предотвратить дубликаты. Это попыталось перезаписать сохраненное значение. Однако концепция заполнения ящика, а затем заполнение значений на листе - именно то, что мне нужно. Благодаря! –

-1

Это должно работать

  1. Выберите ячейку на втором листе (тот, который будет ВПР)
  2. Перейти на вкладку Данные> Проверка данных> Проверка данных
  3. о настройках Выбор списка > Нажмите кнопку «Источник» справа от поля ввода> Выбрать диапазон из первой книги Screenshot
  4. Теперь скопируйте и вставьте эту ячейку в колонку на вторую книгу
Смежные вопросы