Страницы: 1
RSS
Найти самое близкое значение по символам слева
 
Приветствую. Суть вопроса такова -
Столбец А - числа
Столбец B - коды
Столбец C - пояснение
Столбец D - результат

Нужно найти и вывести в столбец D пояснение из столбца C, в котором будет показан ближайший схожий (не арифметически) по количеству знаков слева код из столбца B.

В примере в приложеном фале, в ячейку D1 отобразился бы результат - d
Изменено: Aleksandr Tesore - 12.08.2020 14:09:05
 
Aleksandr Tesore, ДД. не уверен что правильно понял.
массивная
Код
=ИНДЕКС($C$2:$C$6;ПОИСКПОЗ(МАКС(ЕСЛИ(ДЛСТР($A$2)>=ДЛСТР(B2:B6);$B$2:$B$6));$B$2:$B$6;0);1)
Не бойтесь совершенства. Вам его не достичь.
 
формула массива:
Код
=ИНДЕКС(C:C;ПОИСКПОЗ(МИН(ДЛСТР(ПОДСТАВИТЬ(A2;$B$1:$B$6;"")));ДЛСТР(ПОДСТАВИТЬ(A2;$B$1:$B$6;""));))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
при больших объемах данных вылезают неточности. В примере -
A2-A14 значения идут подряд, но с 10 строки, поле Результат некорректно
ищет совпадения не начиная с 1 символа, вообще в принципе совпадения которые есть в значении ячейки
Изменено: Aleksandr Tesore - 13.08.2020 10:54:25
 
результат не зависит от обьема данных, а зависит от того что считает формула
(не внимательно прочитал условия) та считала максимальное количество совпадающих цифр, а эта:
Код
=ИНДЕКС(C:C;МАКС(ЕСЛИ(--ЛЕВСИМВ(A2;ДЛСТР($B$1:$B$4384))=$B$1:$B$4384;СТРОКА($B$1:$B$4384))))
максимальное количество совпадающих цифр в начале № телефона с кодом
Изменено: Ігор Гончаренко - 12.08.2020 17:32:26
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Формула массива:
=ИНДЕКС(C:C;ОСТАТ(МАКС(МУМНОЖ(Ч(ЛЕВБ(B2:B$99;СТОЛБЕЦ(A:O))=ЛЕВБ(A2;СТОЛБЕЦ(A:O)));1^B2:B16)+СТРОКА($2:$99)%%);1)/1%%)
*Обычная формула:
=ИНДЕКС(C:C;ПРАВБ(АГРЕГАТ(14;6;ПОИСКПОЗ(--ЛЕВБ(A2;СТОЛБЕЦ(A:O));B:B;)+СТОЛБЕЦ(A:O)*100;1);2))
Изменено: Светлый - 12.08.2020 18:37:39
 
=INDEX(C:C;MOD(AGGREGATE(14;6;(FIND(B2:B6;A2)=1)*(LEN(B2:B6)+ROW(B2:B6)%%);1);1)/1%%)

Хочется добавить еще то что :
123456789
что ближе к нему 123457 или 1234 ?
Изменено: БМВ - 12.08.2020 19:06:24
По вопросам из тем форума, личку не читаю.
 
хороший вопрос)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
БМВ написал:
что ближе к нему 123457 или 1234 ?
ближе 1234
 
Ігор Гончаренко, все супер работает, спасибо огромное
 
Не все что коротко - хорошо
провел тест 3400 примеров обработка и более чем в 4 раза быстрее последняя формула, не смотря на массивность.
=INDEX(C:C,MAX(IF(--LEFT(A2,LEN($B$1:$B$4384))=$B$1:$B$4384,ROW($B$1:$B$4384))))
10,87109
=INDEX(C:C,MOD(AGGREGATE(14,6,(FIND(B2:B4384,A2)=1)*(LEN(B2:B4384)+ROW(B2:B4384)%%),1),1)/1%%)
7,878906
=VLOOKUP(--LEFT(A2,AGGREGATE(14,6,ROW($1:$15)/(COUNTIF(B:B,LEFT(A2,ROW($1:$15)))=1),1)),B:C,2,)
5,894531
=INDEX(C:C,MATCH(--LEFT(A2,AGGREGATE(14,6,ROW($1:$15)/(COUNTIF(B:B,LEFT(A2,ROW($1:$15)))=1),1)),B:B,))
5,972656
=VLOOKUP(--LEFT(A2,AGGREGATE(14,6,ROW($1:$15)/ISNUMBER(MATCH(--LEFT(A2,ROW($1:$15)),B:B,)),1)),B:C,2,)
2,996094
=INDEX(C:C,MATCH(--LEFT(A2,AGGREGATE(14,6,ROW($1:$15)/ISNUMBER(MATCH(--LEFT(A2,ROW($1:$15)),B:B,)),1)),B:B,))
2,609375
=INDEX(C:C,MATCH(--LEFT(A2,MAX(IF(ISNUMBER(MATCH(--LEFT(A2,ROW($1:$15)),B:B,)),ROW($1:$15)))),B:B,))
2,453125

Светлый, выдает неправильный результат.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
Светлый, выдает неправильный результат.
Значит неправильно понял задачу. По моей формуле ищет наибольшее количество совпадающих символов слева. Оставшиеся символы и в образце, и в таблице игнорирует.
123456789 выберет 12345699, а не 12345
 
Цитата
Светлый написал:
Значит неправильно понял задачу
вроде правильно , может я перевел не корректно. В файле взгляните. А так был вариант быстрый, но результат не совпал с желаемым.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх