Поиск из списка Excel, получение результатов в пользовательской форме - PullRequest
0 голосов
/ 04 июля 2018

Я бы хотел поиск из выпадающего списка в пользовательской форме, возвращая 2 элемента из 2 разных строк. До сих пор я использую предопределенное местоположение, установленное для возврата альтернативных строк.

Мой вопрос об этом разделе:

Private Sub ComboBox1_Change()
    If ComboBox1.Text = Sheet1.Cells(3, 1) Then
        oHousing.Text = Sheet1.Cells(3, 2)
        oMeal.Text = Sheet1.Cells(3, 3)
    End If
End Sub

Вот что будет делать псевдокод:

  1. Пользователь выбирает элемент в выпадающем списке
  2. выпадающий список будет искать A1:A99 для элемента
  3. затем, как только элемент будет найден, он выдаст B# и C# (# зависит от местоположения A#)
  4. B# выводится в oHousing (текстовое поле)
  5. C# выводится в oMeal (текстовое поле)

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

  • A2:A28 со случайным текстом (я использовал азбуку)
  • B2:B28 - случайные трехзначные числа (числовые, например: 001-999)
  • C2:C28 - это случайные 3 числа (числовые, например: 001-999)

Вот остаток моего кода:

'Finds the difference in 2 known dates (returns whole number in textbox)
Private Sub CommandButton1_Click()
    Dim firstDate As Date, secondDate As Date, n As Integer
    firstDate = DateValue(sDate.Text)
    secondDate = DateValue(EDate.Text)
    n = DateDiff("d", firstDate, secondDate) - 0.5
    dTotal.Text = n
End Sub

Private Sub CommandButton2_Click()    'Exit the userform (PerDiem)
    Unload PerDiem
End Sub

Спасибо всем заранее!

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать функцию Find.

Если значение найдено, вы можете вернуть Номер строки с Found.Row и Индекс столбца с Count.Column

Private Sub ComboBox1_Change()

Dim Found As Range
Set Found = Sheet1.Range("A1:A99").Find(ComboBox1.Text, , xlValues, xlWhole)

    If Found Is Nothing Then
        'What do you want to do if your value in CommboBox is not found in the range?
    Else
        oHousing.Text = Sheet1.Cells(Found.Row, 2)
        oMeal.Text = Sheet1.Cells(Found.Row, 3)
    End If

End Sub

Если вы уверены, что значение ComboBox всегда будет в вашем диапазоне (возможно, вы систематически программировали значения ComboBox таким образом), вы можете пропустить проверку и просто использовать:

Dim Found As Range
Set Found = Sheet1.Range("A1:A99").Find(ComboBox1.Text, , xlValues, xlWhole)
    oHousing.Text = Sheet1.Cells(Found.Row, 2)
    oMeal.Text = Sheet1.Cells(Found.Row, 3)

Свойства Find можно найти здесь . Если вы ищете текст, вам, возможно, придется различать чувствительность к регистру (для ваших нужд, THIS = this?). Применяемые в настоящее время свойства означают, что функция ищет значения (xlValues), в частности, просматривает все значение ячейки (xlWhole). I.E. (this value не будет совпадать с this)

...