Страницы: 1
RSS
Поиск значения в двумерном массиве (матрице)
 
Здравствуйте! Помогите пожалуйста найти способ, с помощью которого, можно будет выполнить поиск числового значения в матрице любого размера. Стандартными функциями ВПР, ГПР и ИНДЕКС + ПОИСКПОЗ я не смог это реализовать, т.к. просмотр массива осуществляется только по первой строке (столбцу), а мне необходимо просматривать весь массив, возможно есть какие-то хитрости, о которых я не знаю.
 
Пример нужен.  
Одно или несколько значений искать;  что потом, вывести адрес ячейки или заголовки столбцов и строк, выделить значение и т.д.
 
одно значение, заголовки в 2 ячейки
 
Вернёт значение на пересечении заданных строки и столбца  
=ИНДЕКС(D5:IV120;ПОИСКПОЗ(H2;C5:C120);ПОИСКПОЗ(H3;D4:IV4))  
 
В ячейках H2 и H3 заголовки строки и столбца.
 
Если искать по номерам строки и столбца:  
=ИНДЕКС(D5:IV120;H2;H3)  
Если поиск по значениям:  
=ВПР(H2;C5:IV120;ПОИСКПОЗ(H3;C4:IV4;0);)
 
Прошу прощения, может не правильно сформулировал, но мне нужна обратная функция, т.е. нахождение координат матрицы по заданному числовому значению присутствующему в ней.
 
Напишем, а оно опять не то...  
Куда вводить искомое значение и какой результат?  
Ищем 1618. Что должно отобразиться? № строки/столбца или левое/верхнее значение таблицы?
 
Немного не так... у нас есть нужное нам число - 1618, допустим оно в ячейке - E2, это же число есть в матрице, необходимо вернуть в ячейку - H2 заголовок строки в которой содержится наше число, а в ячейку - H3 заголовок столбца.
 
формулы массива (вводится нажатием ctrl+shift+enter)  
строка : =МИН(ЕСЛИ(D5:IV120=E2;C5:C120))  
Столбец: =МИН(ЕСЛИ(D5:IV120=E2;D4:IV4))
 
Большое спасибо! Все работает, как надо. Теперь буду разбираться как это работает)
 
По найденному столбцу строку можно определить немассивной формулой:  
=ИНДЕКС(C5:C120;ПОИСКПОЗ(E2;ИНДЕКС(D5:IV120;;ПОИСКПОЗ(H3;D4:IV4;))))
 
Соответственно если поменять местами строки и столбцы, то в результает выведем заголовок строки. Целых два решения одной проблемы. Спасибо большое!
 
То же, без ИНДЕКС():  
=(ПОИСКПОЗ(E2;ИНДЕКС(D5:IV120;;ПОИСКПОЗ(H3;D4:IV4;)))-1)*1000  
 
Мысль летает, но не могу поймать: кратность 9 по столбцам, кратность 9 по строкам-800.Если сообразить, можно и первую формулу сделать немассивной.
 
{quote}{login=vikttur}{date=03.10.2011 02:20}{thema=}{post}То же, без ИНДЕКС():  
=(ПОИСКПОЗ(E2;ИНДЕКС(D5:IV120;;ПОИСКПОЗ(H3;D4:IV4;)))-1)*1000  
 
Мысль летает, но не могу поймать: кратность 9 по столбцам, кратность 9 по строкам-800.Если сообразить, можно и первую формулу сделать немассивной.{/post}{/quote}  
Для текущих данных, по найденному столбцу расчитываем строку:  
=(E2-H3*0,45)/0,8
 
Один вопрос... =ИНДЕКС(C5:C120;ПОИСКПОЗ(E2;ИНДЕКС(D5:IV120;;ПОИСКПОЗ(H3;D4:IV4;)))) ...а зачем в этой формуле H3?, с пустым, как же как и с любым значением считает одинаково правильно.
 
Попробуйте найти координаты числа, расположенного дальше, например, в конце строки. В формуле небольшая ошибка - ищет неточное соответствие. Нужно:  
=ИНДЕКС(C5:C120;ПОИСКПОЗ(E2;ИНДЕКС(D5:IV120;;ПОИСКПОЗ(H3;D4:IV4;));))  
 
Но это уже не требуется. МСН в последнем посте упростил формулу.  
Осталось "поймать витающую мысль" :)
 
Реализовал с помощью формулы массива предложенной МСН, но есть одна проблема, в массиве присутствуют совпадения. Подскажите пожалуйста, как можно вывести все возможные варианты если они будут верны и отсеить неправильные соответствия. Эта ситуация хорошо видна с поиском числа 1800. Буду очень признателен.
 
Обновляю файл с примером
 
можно как то так
 
Да, это то, что нужно! Спасибо тебе огромное, очень выручаешь.
 
{quote}{login=MCH}{date=03.10.2011 01:13}{thema=}{post}формулы массива (вводится нажатием ctrl+shift+enter)  
строка : =МИН(ЕСЛИ(D5:IV120=E2;C5:C120))  
Столбец: =МИН(ЕСЛИ(D5:IV120=E2;D4:IV4)){/post}{/quote}  
 
Здравствуйте! Скажите, а почему вышенаписанные формулы не действуют в моем случае?
 
А как Вы их вводите? Вот на это обратили внимание? "формулы массива (вводится нажатием ctrl+shift+enter)"
 
Вводила через ctrl+shift+enter ,в результате чего вся формула бралась в фигурные скобочки но поиск не производился...
 
Вообще-то МИН() ищет минимум среди чисел.  
А для Вас так (формулы массива):  
экскаватор:  
=ИНДЕКС(D5:IV5;МИН(ЕСЛИ(D6:IV120=D2;СТОЛБЕЦ(D5:IV5)-3)))  
автомобиль:  
=ИНДЕКС(A6:A120;МИН(ЕСЛИ(D6:IV120=D2;СТРОКА(A6:A120)-5)))
 
Спасибо огромное!!!! все работает!!! Уррррррра!
Страницы: 1
Наверх