Страницы: Пред. 1 2
RSS
Наиболее длинная подстрока
 
sokol92 Здравствуйте. А мы такие проверки не делали. Мы искали почему ошибка вылазит. Но теперь проверим обязательно.
 
sokol92, Приветствую, ну формулу я подправил. Что-то +1 убрал не подумав
=MID(A2;MOD(MAX((COUNTIF(A2:A6;"*"&MID(A2;ROW(A1:INDEX(A:A;LEN(A2)));TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2)))))&"*")=ROWS(A2:A6))*(TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2))))<=LEN(A2)-ROW(A1:INDEX(A:A;LEN(A2)))+1)*(TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2))))+ROW(A1:INDEX(A:A;LEN(A2)))%%));1)/1%%+1/2;INT(MAX((COUNTIF(A2:A6;"*"&MID(A2;ROW(A1:INDEX(A:A;LEN(A2)));TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2)))))&"*")=ROWS(A2:A6))*(TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2))))<=LEN(A2)-ROW(A1:INDEX(A:A;LEN(A2)))+1)*(TRANSPOSE(ROW(A1:INDEX(A:A;LEN(A2))))+ROW(A1:INDEX(A:A;LEN(A2)))%%))))
а вот функция единая отработала. Спасибо за замечание.
По вопросам из тем форума, личку не читаю.
 
Всем добрый день! Перешел на боевые условия, чую что что-то не то, неправильно функция работает. На первом тестовом примере правильно, на других не то. Посмотрите пожалуйста.
Суперформула тоже получается не всегда правильный ответ дает  

=ПСТР(B2;ОСТАТ(МАКС((СЧЁТЕСЛИ(B2:B5;"*"&ПСТР(B2;СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)));ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))))&"*")=ЧСТРОК(B2:B5))*(ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2))))<=ДЛСТР(B2)-СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))+1)*(ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2))))+СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))%%));1)/1%%+1/2;ЦЕЛОЕ(МАКС((СЧЁТЕСЛИ(B2:B5;"*"&ПСТР(B2;СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)));ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))))&"*")=ЧСТРОК(B2:B5))*(ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2))))<=ДЛСТР(B2)-СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))+1)*(ТРАНСП(СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2))))+СТРОКА(B1:ИНДЕКС(B:B;ДЛСТР(B2)))%%))))

Изменено: dim284 - 14.11.2023 13:12:22
 
MLIPIAVGGALAGLVGIILIAYLIGRKRSHAGYQTIMLIPIAVGMLIPIAVG
MLIPIAVGAALAGLVLIVL-AYLIGRKRSHGGY-TIMLIPIAVGMLIPIAVG
MLIPIAVGGALAGLVLIVLIAYLIGRKRSHAGY-THMLIPIAVGMLIPIAVG
MLIPIAVGGALAGLVLIVLIAYLIGRKFSHAGY-THMLIPIAVGMLIPIAVG


TIMLIPIAVGMLIPIAVG
и
THMLIPIAVGMLIPIAVG
только с виду похожи ;-)

Моя формулка не ошибается.
По вопросам из тем форума, личку не читаю.
 
Да, вроде все верно, беру свои слова обратно, суперформула работает :) А как же функция? Формула жесть какая не удобная.
 
Цитата
dim284: А как же функция? Формула жесть какая не удобная.
вопрос некорректный, т.к. функция это единица формулы. Так, =Если() это функция, а =ЕСЛИ(A1=B1; 0; 1) это уже формула, то есть формула может включать (а может и не включать, как в формуле = 3 + 2) одну и более функций.
    Вы, наверное. про VBA. Любую формулу можно "обернуть" в UDF, чтобы, например, не вводить одни и те же условия несколько раз, но, как правило, если уж делать на VBA, то БЕЗ функций листа. Как правило, так будет быстрее и короче. Если, конечно, не стоит задача, получить на листе именно формулу из штатных функций, чтобы работало без VBA на других компах. Но это уже совсем другая история…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Такой принцип?
Если да, то название темы "Общая подстрока. Определить максимально длинную подстроку, содержащуюся во всех заданных строках"
Изменено: Jack Famous - 14.11.2023 17:34:10
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Все верно Jack Famous, принцип такой. На счет изменения темы не возражаю, если так более понятно, то конечно это лучше.
Отличие между понятием "формулой" и "функцией" уяснил, премного благодарен.
 
Оптимизированный (наверное, можно ещё подкрутить) вариант в 7 раз быстрее «штатной» функции Longest из #7
Файл
Изменено: Jack Famous - 15.11.2023 11:18:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
быстрее
Не только. Для строк
abcdefuqwerno
abcdefiqwerpo
fooqwerpo
vesqwerker
MainSubString возвращает правильно qwer, а вот Longest только e :)
 
Андрей VG, приветствую! И спасибо за тест  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Огромное спасибо  Jack Famous, функция MainSubString великолепно работает! Как хорошо когда для работы появляются новые инструменты, хочется творить  :idea:  :)
 
dim284, пожалуйста. Спасибо и вам за интересную задачу. Такие сейчас очень редки, к сожалению …
    Учтите, что при сборе строк используется словарь, чтобы потом не бегать в цикле по одинаковым строкам. Если строки у вас гарантированно уникальные, то можно будет его убрать. Но сильно быстрее не будет, т.к. он работает очень быстро. Но, если уникальных строк будет больше 100 тысяч, то он начнёт заметно тупить.
Изменено: Jack Famous - 15.11.2023 16:22:08
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 


Низкий поклон!
Страницы: Пред. 1 2
Наверх