Совпадение нескольких критериев в пределах диапазонов (т. Е. Если значения лежат в пределах порогов) и возврат всех результатов сопоставления - PullRequest
0 голосов
/ 18 октября 2018

Мне нужна помощь с проблемой соответствия, с которой я борюсь.

Проблема:

Пример таблицы Excel

В Sheet1 У меня есть несколько входных значений x, y и z в столбцах A, B и C.Для упрощения, скажем, у меня есть только две строки со значениями (как на картинке выше).В Sheet2 у меня есть пороги;минимальные и максимальные значения для x, y и z, в дополнение к соответствующим кодам.

Я хочу получить в Sheet1 все коды, где входные значения находятся в пределах порогов (соответствующих значений) в Sheet2.Коды не обязательно должны быть перечислены в той же ячейке, если это усложняет ситуацию;Они могут быть перечислены в отдельных столбцах.Я также открыт для обеих формул и VBA.

То, что я пробовал:

Я знаю, как составить список нескольких результатов, используя JOINTEXT, если критерии являются точными совпадениями.Я также знаю, как перечислить один результат на основе нескольких неточных совпадений, используя INDEX + MATCH + <=> =.Но я не знаю, как их объединить ...

Я смотрел на них:

Соответствие индекса EXCEL по нескольким критериям И по нескольким типам соответствия?

https://exceljet.net/formula/multiple-matches-in-comma-separated-list

https://exceljet.net/formula/index-and-match-with-multiple-criteria

... и пробовал с этим:

=INDEX(F5:L8;SMALL(IF(COUNTIF(F5:F8;"<="&A5)*COUNTIF(G5:G8;">"&A5)*COUNTIF(H5:H8;"<="&B5)*COUNTIF(I5:I8;">"&B5)*COUNTIF(J5:J8;"<="&C5)*COUNTIF(K5:K8;">"&C5);ROW(F5:L8)-MIN(ROW(F5:L8))+1);COLUMN(F4));ROW(F4)+6)

... безрезультатно.

Все идеи / предложения очень ценятся, и я надеюсь, что это было понятно!

Джефф

1 Ответ

0 голосов
/ 31 октября 2018

Мне удалось решить эту проблему, используя впечатляющий код Jeeped (см. Комментарии).Однако, поскольку я использую запятую (,) в качестве десятичного разделителя, мне нужно было включить небольшую настройку.Я изменил «iOptions», «iIgnoreHeaderRows», «i» и «j» с Variant на Double, а «a» с Variant на Long.Я также включил следующий код:

Dim counter As Integer, sizeOfPairs As Integer
Dim test As String
counter = 0
sizeOfPairs = UBound(pairs, 1)

For counter = 0 To sizeOfPairs
    If TypeName(pairs(counter)) = "String" Then
        pairs(counter) = Replace(pairs(counter), ",", ".")
    End If
Next counter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...