Страницы: 1
RSS
Выборка значения по 3 условиям
 
Доброго дня!
Упорно искал аналогии, но не получилось, в итоге очень прошу помочь. Можно ли сделать это формулами без применения VBA?
Есть таблица с значениями, из нее необходимо выбрать значения из столбца "А" по трем условиям (Объясню на примере)
Если:
- в столбце "В" - "Call"
- в столбце "Е" - "SRM5"
Далее из всех сток подходящих под первые два условия делаем финальную выборку:
- в столбце "F" первое большее значение относительно D30 - 6818. (В нашем случае это "F17" с значением 7000)
- в столбце "F" второе большее значение относительно D30 - 6818. (В нашем случае это "F18" с значением 7250)
и так далее по аналогии 8 значений из таблицы.
Заранее большое спасибо!
 
Доброго.
У меня сегодня сплошные монстры:
Код
{=НАИБОЛЬШИЙ(($B$2:$B$26=$B$2)*($E$2:$E$26=$E$17)*($F$2:$F$26)*($F$2:$F$26>=$D$30);СЧЁТЗ($I$2:$I$9)-СТРОКА(A1)+(СУММ(ЕСЛИ((($B$2:$B$26=$B$2)*($E$2:$E$26=$E$17)*($F$2:$F$26)*($F$2:$F$26>=$D$30))>0;1;0))-СЧЁТЗ($I$2:$I$9)+1))}

формула массива
Кому решение нужно - тот пример и рисует.
 
Последнее условие мутновато ну примерно так можно с доп столбцом
Лень двигатель прогресса, доказано!!!
 
Слов нет, одни ПОЛОЖИТЕЛЬНЫЕ эмоции, виртуозы, что тут скажешь...

Пытливый, Ваше решение замечательное, а главное читая формулу мне более менее понятно как она работает. Знак умножения "*" на сколько понимаю это "И"? Единственное, что поправил это СЧЁТЗ($I$19:$I$26) (см. файл ниже) это будет нумерацией строк и мешать не будет. Так же сейчас вчитываюсь в формулу и пытаюсь понять как получить итоговые значения из столбца "Код бумаги", а не страйк. А так по логике, все правильно, еще и с сортировкой от меньшего к большему .
Непонятна немного эта чать ($F$2:$F$26)*($F$2:$F$26>=$D$30) подскажите, плиз, зачем это задвоение?
PS / С правильным столбцом для результата не могу понять (( подскажите плиз, как получить именно "код бумаги" на выходе? хотя конечно можно сделать ВПР из таблицы донора, но там и так все так закручено получается, что ... слов нет.

Сергей, Ваше решение было бы просто идеальный по нагрузке, но к таблице данных подставить дополнительный столбец я не могу, так как это не статичная таблица, а идет динамичная выгрузка данных DDE из программы. Поэтому, будет постоянный сдвиг и несоответствие.
Изменено: rom4 - 13.04.2015 18:03:41
 
Знак * - это И, да.

($F$2:$F$26)*($F$2:$F$26>=$D$30)
Нам надо сформировать массив из значений, либо 0, либо больше, или равным искомому.
Потом посчитаем, сколько таких больше 0 получилось, потом посчитаем, сколько значений надо вывести, и путем сложения/вычитания находим второй аргумент функции НАИБОЛЬШИЙ () - т.е. какой именно элемент в какой строке выводить (первый наибольший, второй, третий и т.д.). Нужно же наиболее близкие к искомому выводить.

По поводу получения кода бумаги... ыыыы... с ходу видится - вот этот мой монстр выдает значение. Использовать это значение в ПОИСКПОЗ, как искомый аргумент, таким образом определим строку, и потом найденную строку использовать внутри ИНДЕКС для вывода позиции из первого столбца...
Хотя, может, я просто уже перенапрягся... %)
Кому решение нужно - тот пример и рисует.
 
Спасибо за разъяснения.

По поводу Кода бумаги, у меня получилось отдельно найти все Коды бумаги > 6818 это D(30) - третье условие и
что бы в у каждого кода бумаги был "Call" в столбце "B"  и  SRM5 в столбце "E"
Если эти формулы объединить, то будет, то что надо ..., но я никак это не могу сделать (( "то ли лыжи не едут, то ли я ... " (с)
pS/ в файле пометил зеленой заливкой.
 
Пытливый, гляньте плиз, я попробовал сам через ПОИСКПОЗ вывести "код бумаги", вроде правильно...

PS / пометил красным, свои попытки...

спасибо :)
 
Код через ПОИСКПОЗ - как в учебнике! :)

Все верно.
Кому решение нужно - тот пример и рисует.
 
А такой вариант?
 
Отлично, но желательно что бы сортировка была от меньшего к большему, а тут от большего к меньшему. И я совершенно не могу понять логику формулы, что бы ее подправить. Как бы я хотел научиться читать формулу. Может мне посоветуют ВЕЛИКИЕ гуру из тех кто мне помогал, ткнут носом, где если внимательно почитать, можно при желании разобраться самому. Ну или хотя бы как минимум с помощью этой инфы уметь разобрать, что уже сделано, как в данном случае. Читаю справку по формуле в EXCEL и совершенно не понимаю, то ли термины не все мне известны, то ли лыжи не едут ((( ... желание есть, а не едут... подтолкните плиз))
Заранее спасибо, всем откликнувшимся ... :)

PS / Только что купил книгу Николая, буду образовываться, спс.
Изменено: rom4 - 14.04.2015 11:12:30
 
Все варианты не смотрел может быть дубль без доп столбцов
Лень двигатель прогресса, доказано!!!
 
Цитата
Сергей написал: Все варианты не смотрел может быть дубль без доп столбцов
Здорово, только можно мне для понимания чуток разъяснить...
ЕСЛИ(((($B$2:$B$29="call";)*($E$2:$E$29="SRM5";)*($F$2:$F$29>$D$30))*СТРОКА($F$1:$F$28))<>0;СТРОКА($F$1:$F$28))

это массив функции НАИМЕНЬШИЙ. т.е. ЕСЛИ проверяет условия Call и SRM5 и что значение больше D30, а дальше не понимаю (((
, а именно это непонятно - СТРОКА($F$1:$F$28))<>0    , дальше это что вернет "ЕСЛИ" если ИСТИНА

Заранее спасибо!
 
сначало проверяем три условия получаем это
ЕСЛИ((({0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:1:1:1:1:1:1:1:1:1:1:0:0:0})*СТРОКА($F$1:$F$28))<>0;СТРОКА($F$1:$F$28))
затем полученый результат умножаем на номера строк
ЕСЛИ(({0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:16:17:18:19:20:21:22:23:24:25:0:0:0})<>0;СТРОКА($F$1:$F$28))
так как наименьший будет тянуть на нули постоянно пока они не кончатся убираем нули
ЕСЛИ({ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ};СТРОКА($F$1:$F$28))
и в итоге диапазон для наименьшего станет
{ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:16:17:18:19:20:21:22:23:24:25:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}
откуда и он будет тянуть нужные нам позиции строк столбца А
Лень двигатель прогресса, доказано!!!
Страницы: 1
Наверх