Функция соответствия с несколькими критериями - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время у меня есть пользовательская форма с различными объектами.Я хочу добавить функцию «поиск и заполнение формы», аналогичную той, которую я нашел здесь (только мне нужно сопоставить 4 поля вместо 1): https://www.experts -exchange.com / questions / 28706684 / VBA-Code-to-Populate-Userform-with-Existing-Records-Edit-them-and-add-them-back-to-worksheet.html Объектами, которые я ищу, являются 3 текстовых поля и 4-я выбранная кнопкакоторый я отформатировал для этой цели как:

If radio1 = True Then
criteria4 = "radio1"
ElseIf radio2 = True Then
criteria4 = "radio2"
ElseIf radio3 = True Then
criteria4 = "radio3"
ElseIf radio4 = True Then
criteria4 = "radio4"
End If

Я безуспешно пробовал несколько методов для компонента «поиск»:

-Использование функции соответствия (отформатирован различными способами одним изниже показано, что я не смог оценить независимо от того, что я пытался)

formula = "match(" & criteria1 & criteria2 & criteria3 & criteria4 & ",a2:a999&b2:b999&e2:e999&f2:f999, 0)"
r = Evaluate(formula)

-Использование цикла for в качестве средства для сопоставления на основе функции if (здесь я застрял в том, какчтобы получить номер строки для совпадения, которое будет выведено, чтобы я мог затем использовать его позже, чтобы заполнить форму соответствующими данными)

lastrow = ws.Cells(Rows.Count, 1).End(xlUp).row

'search for jb, sbj, pckg and jbtyp match
With ws.Range("A1,P" & lastrow)
For row = 2 To .Rows.Count
If .Cells(row, 1).Value Like criteria1 And .Cells(row, 2).Value Like criteria2 And .Cells(row, 5).Value Like criteria3 And .Cells(row, 6).Value Like criteria4 Then
***method of returning row number for the match that can then be use in later code to pull data from this row***
    End If
Next
End With

Будем весьма признательны за любые указания, либо продолжая один из этих методов, либоальтернатива.

[РЕДАКТИРОВАТЬ] Я попробовал следующее, думая, что это работает, однако я начал использовать его снова и понял, что это позволяет мне искать только в первой строке (критерий1), пожалуйста, помогите ...

Set rfound = Columns("A").Find(criteria1, Cells(Rows.Count, "A"), xlValues, xlWhole)
If Not rfound Is Nothing Then
strfirst = rfound.Address
    Do
    If LCase(Cells(rfound.row, "B").Text) = criteria2 And LCase(Cells(rfound.row, "E").Text) = criteria3 And LCase(Cells(rfound.row, "F").Text) = criteria4 Then
r = rfound.row
End If
Set rfound = Columns("A").Find(criteria1, rfound, xlValues, xlWhole)
r = rfound.row
    Me.txt1 = ws.Cells(r, "A")
    ...
    Me.cmbengpos = ws.Cells(r, "I")
    ...
    If ws.Cells(r, "F") = "radio1" Then
    Me.radiopanels.Value = True
    End If
    ...
Loop While rfound.Address <> strfirst
End If
End Sub

1 Ответ

0 голосов
/ 02 августа 2018

только что прошел и обнаружил некоторые сходства с вашим проектом, над которым я работаю, я заметил, что вы сказали, что пытаетесь сопоставить объекты ... это может помочь, а может и нет.зависит от свойства объекта, которому вы хотите соответствовать.

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

комбинированные списки хороши, когда мне нужен другой уровень соответствия, в частности, когда мне нужно сопоставить запрос пользователя из пула возможностей,часто результаты, которые я извлек из буфера обмена, заполняют комбинированный список

или

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

надеюсь, что вы найдете что-то полезное, удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...