
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.12.2007, 17:01:42
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
допустим, есть два текста в двух ячейках (например, в 2-х разных столбцах): "текстовое сообщение" "текстовка" можно ли с помощью формулы определить номер символа с которого начинаются различия в двух текстах? для данного примера ответ 8 формула нужна для того, чтобы сравнивать 2 варианта текстов, которые находятся в 2-х столбцах. Таких текстов (пар ячеек) много... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2007, 18:02:10
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
теоретически - можно практически - если текстов много и/или они длинные, то может быть черезчур ресурсоемко/медленно формула массива (ввод через CTRL+SHIFT+ENTER) =ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)=ПСТР(A2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A2)));1);0) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2007, 18:16:23
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
намного проще будет через собственную функцию. Что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2007, 18:39:17
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
правильно ли я изменил формулу, если сравниваемы тексты в C2 и D2 =ПОИСКПОЗ(ЛОЖЬ;ПСТР(C2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(C2)));1)=ПСТР(D2;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(D2)));1);0) ?? и еще... как такое может быть: ПОИСКПОЗ(ЛОЖЬ; ?? я в недоумении.. прокомментируйте, плиз, хотя бы эту часть формулы, а лучше - всю формулу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.12.2007, 18:47:24
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
формула не работает, если и ДЛСТР(текст1)<ДЛСТР(текст2) и до до момента МАКС кол-во символов текст1 совпадают с тем же кол-вом символов текст2 но это нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 10:07:10
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
А эта формула работает при любых раскладах: ;-) {=СЧЁТ(ЕСЛИ(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)=ПСТР(A2;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A2)));1);1))+1} KL, а разве ДВССЫЛ() не летучая... ? Чего ты ушёл от конструкции СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1))) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.12.2007, 11:11:28
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikА эта формула работает при любых раскладах: ;-) {=СЧЁТ(ЕСЛИ(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)=ПСТР(A2;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A2)));1);1))+1} Тут вы поспешили Поворот Повар Ваша формула выдаст 5 а нужно 4 вот вариант =ПОИСКПОЗ(ЛОЖЬ;(ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1&" ")));1)=ПСТР(A2&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A2&" ")));1));0) формула массива (ввод через CTRL+SHIFT+ENTER) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 11:52:19
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Прикол! Во первых, ты действительно прав, что моя формула выдаёт не то... А во вторых, когда сделал свой вариант и потом взглянул на твой - аж засмеялся - практически одно и то же :-) Вот он: {=ПОИСКПОЗ(ЛОЖЬ;ЕСЛИ(ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&".";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);1);)} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 11:58:34
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Жалко, что тут нет возможности редактировать сообщения... Функцию ЕСЛИ() можно, конечно, убрать... Преимущество моего варианта в том, что он защищён от #Н/Д для случая полного совпадения двух строк либо их отсутствия ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 12:12:38
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Жалко, что тут нет возможности редактировать сообщения... Функцию ЕСЛИ() можно, конечно, убрать... Преимущество моего варианта в том, что он защищён от #Н/Д для случая полного совпадения двух строк либо их отсутствия ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 13:12:25
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikПреимущество моего варианта в том, что он защищён от #Н/Д для случая полного совпадения двух строк либо их отсутствия ;-) Можно было так записать =ПОИСКПОЗ(ЛОЖЬ;(ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1&" ")));1)=ПСТР(A2&".";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A2&".")));1));0) Я думал про это, только это всё равно не спасает, только хуже может сделать. например вот такие строки подставте Повар. Повар Выдаст ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 13:42:32
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikKL, а разве ДВССЫЛ() не летучая... ? Чего ты ушёл от конструкции СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1))) ?Летучая, просто первая пробная версия формулы была летучей и без того, а потом в спешке я забыл почистить финальный вариант. Я смотрю вы с Deggasad никак не можете уйти от предложенного мной принципа решения :-) Когда я писал его, я исходил исключительно из конкретного примера - времени на поиск универсальности не было. Может такое решение подойдет: формула массива (ввод через CTRL+SHIFT+ENTER) =SI(A1=A2;0;COINCIDIR(FALSO;ESNUMERO(1/(EXTRAE(A1;FILA(INDICE(A:A;1):INDICE(A:A;LARGO(A1)));1)=EXTRAE(A2;FILA(INDICE(A:A;1):INDICE(A:A;LARGO(A2)));1)));0)) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 13:44:01
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
пардон формула вместо русского перевелась на испанский: =ЕСЛИ(A1=A2;0;ПОИСКПОЗ(ЛОЖЬ;ЕЧИСЛО(1/(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)=ПСТР(A2;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A2)));1)));0)) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 14:13:22
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Ну, KL, как всегда, не перестаёт нас удивлять ;-) KL (XL)Я смотрю вы с Deggasad никак не можете уйти от предложенного мной принципа решения :-) Да нет, просто захотелось для себя довести дело до конца.... :-) Вот мой окончательный вариант :-) {=ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&СИМВОЛ(1);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);)} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 14:52:49
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
OFFTOPIC. А когда на этом сайте сделают возможность редактирования своего сообщения? А то на всех форумах есть, а на этом нет. Многие же пользователи жалуются на это. И Форум будет меньше весить, так подредактировал своё сообщение и всё, а так приходится писать новое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:06:05
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikВот мой окончательный вариант :-) {=ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&СИМВОЛ(1);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);)}Думаю, что этот вариант немного не дотягивает до окончательного. Комментарии: 1) попробуй эту формулу в такой ситуации: [A1] ="мама мыла раму мылом" [A2] ="мама мыла раму мылом и зубным порошком" 2) для одинаковых текстов формула выдает, что различия начинаются (!?) после последнего (или начиная с несуществующего) знака. 3) если сможешь заставить работать свое решение, то выигрыш в скорости по сравнению с моим будет коллосальным - почти в 10 раз в Excel 2007. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:19:46
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
А если так: {=ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1&СИМВОЛ(1);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&СИМВОЛ(2);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);)} А в твоём варианте я бы изменил ЕЧИСЛО(1/(....)) на ЕЧИСЛО(-(....)). Вот тебе и выигрыш в 10 раз ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:22:26
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
KL (XL) @NikВот мой окончательный вариант :-) {=ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1&" ";СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&СИМВОЛ(1);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);)}3) если сможешь заставить работать свое решение, то выигрыш в скорости по сравнению с моим будет коллосальным - почти в 10 раз в Excel 2007. Похоже, вот длинная, но чертовски быстрая (быстрее твоей) альтернатива: =ЕСЛИ(A1=A2;0;ЕСЛИ(ЛЕВСИМВ(A1;МИН(ДЛСТР(A1);ДЛСТР(A2)))=ЛЕВСИМВ(A2;МИН(ДЛСТР(A1);ДЛСТР(A2)));МИН(ДЛСТР(A1);ДЛСТР(A2))+1;ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;МИН(ДЛСТР(A2);ДЛСТР(A1))));1);))) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:28:08
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikА если так: {=ПОИСКПОЗ(ЛОЖЬ;ПСТР(A1&СИМВОЛ(1);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A1);ДЛСТР(A2))));1)=ПСТР(A2&СИМВОЛ(2);СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;1+МИН(ДЛСТР(A2);ДЛСТР(A1))));1);)}Пункт 2 остается в силе. Моя последняя формула в 4 раза быстрее @NikА в твоём варианте я бы изменил ЕЧИСЛО(1/(....)) на ЕЧИСЛО(-(....)). Вот тебе и выигрыш в 10 раз ;-)Это на скорость расчета практически не повлияет, и тем более в 10 раз ;-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:41:00
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
KL (XL) @NikА в твоём варианте я бы изменил ЕЧИСЛО(1/(....)) на ЕЧИСЛО(-(....)). Вот тебе и выигрыш в 10 раз ;-)Это на скорость расчета практически не повлияет, и тем более в 10 раз ;-)Самого главного то и не сказал: весь смысл решения через 1/() в том, чтобы привести значения ЛОЖЬ и #NA т.с. к "общему знаменателю". При делении 1 на 0 (ЛОЖЬ) или на ошибку (#NA) результатом будет ошибка (#DIV0 или #NA), т.е. не число. В случае деления на 1 (ИСТИНА) результатом будет число. Что и требовалось получить. Если же использовать -(), то значение ЛОЖЬ тоже даст число - 0, а это приведет к ошибке в результате например здесь: [A1]="мама мыла рам к у мылом" [A2]="мама мыла раму мылом и зубным порошком" KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:49:33
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Ок. А будет ли выигрыш в быстродействии в 4 раза для случая [A1]="мама мыла рам к у мылом" [A2]="мама мыла раму мылом и зубным порошком" Мне кажется, что нет :-) И ещё вопрос: почему на скорость практически не сказывается замена 1/() на -() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 15:51:07
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
(я понял, что менять 1/() на -() нельзя). Просто интересно относительно скорости вычисления... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 16:13:59
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikОк. А будет ли выигрыш в быстродействии в 4 раза для случая [A1]="мама мыла рам к у мылом" [A2]="мама мыла раму мылом и зубным порошком" Мне кажется, что нет :-)Четко подмечено! Тут я, сам того не ведая, немного схитрил - использовал для тестирования лишь частный случай :-) Скорость в этом случае та же, но... это правда не отменяет потенциальной экономии в скорости в частном случае полного совпадения более короткого текста с началом более длинного. @NikИ ещё вопрос: почему на скорость практически не сказывается замена 1/() на -()Ну потому что при сравнении решений, где соотношение скоростей 1:10, те 9% которые выигрываются, на мой взгляд, - ничтожны. А почему ты думал, что выигрыш будет больше? Я кажется всегда говорил, что, по моим наблюдениям, разница между --() и др. способами превращения логических значений в числа порядка 15% быстрее в Excel2003 и 10% в Excel2007. Может где-то "вкралась очепятка"? KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 16:26:01
|
|||
|---|---|---|---|
|
|||
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
Да нет... просто мне так показалось, что должно быть больше, чем 10%. Привычка сравнения на старых машинах. Я вообще давно хотел спросить как ты произвожишь замеры скорости вычисления формул ? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.12.2007, 16:42:44
|
|||
|---|---|---|---|
С какого символа начинаются различия? (скорее всего, это тоже вопрос со "звездой"...) |
|||
|
#18+
@NikЯ вообще давно хотел спросить как ты произвожишь замеры скорости вычисления формул ? ;-) Вот тут надстройка RangeCalc , только помни, что замеры надо обязательно производить в режиме ручного пересчета: http://www.decisionmodels.com/downloads.htm KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&tablet=1&tid=2181659]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 322ms |

| 0 / 0 |
