Сравнение ячеек со множеством значений
AlexM
Дата: Воскресенье, 26.04.2015, 16:44 |
Сообщение № 21
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4513
Репутация:
1128
±
Замечаний:
0% ±
Excel 2003
Кажется глюк в моей голове. Я же писал сообщение, в котором указывал результат 74 символа. А теперь его нет. Оно было то ли до, то ли после сообщения MCH.
Кажется глюк в моей голове. Я же писал сообщение, в котором указывал результат 74 символа. А теперь его нет. Оно было то ли до, то ли после сообщения MCH. AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Ответить
Сообщение Кажется глюк в моей голове. Я же писал сообщение, в котором указывал результат 74 символа. А теперь его нет. Оно было то ли до, то ли после сообщения MCH. Автор - AlexM Дата добавления - 26.04.2015 в 16:44
krosav4ig
Дата: Воскресенье, 26.04.2015, 19:28 |
Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
неа, глюк в теме, из нее исчезло 2 поста
неа, глюк в теме, из нее исчезло 2 поста krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Ответить
Сообщение неа, глюк в теме, из нее исчезло 2 поста Автор - krosav4ig Дата добавления - 26.04.2015 в 19:28
AlexM
Дата: Понедельник, 27.04.2015, 10:10 |
Сообщение № 23
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4513
Репутация:
1128
±
Замечаний:
0% ±
Excel 2003
Понедельник. Вскрываемся.Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
74 символа
Понедельник. Вскрываемся.Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
74 символа AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Ответить
Сообщение Понедельник. Вскрываемся.Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
74 символа Автор - AlexM Дата добавления - 27.04.2015 в 10:10
MCH
Дата: Понедельник, 27.04.2015, 10:45 |
Сообщение № 24
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация:
751
±
Замечаний:
±
у меня аналогичная формула
у меня аналогичная формула MCH
Ответить
Сообщение у меня аналогичная формула Автор - MCH Дата добавления - 27.04.2015 в 10:45
krosav4ig
Дата: Понедельник, 27.04.2015, 11:58 |
Сообщение № 25
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
а у мну 63 символа массивная Код
=СЧЁТ(ПОИСК(ПОВТОР("* "&СТОЛБЕЦ(A:T)&",";2);" "&B2&", "&C2&","))
и 74 символа немассивная Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
и массивная 954 891 для любого количества любых чисел Код
=СЧЁТ(1/(ПСТР(B3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));ДЛСТР(B3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(B3&",";ДЛСТР(B3)+2-СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1))))=ПСТР(C3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));ДЛСТР(C3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(C3&",";ДЛСТР(C3)+2-СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=",";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1))))))
и массивная 588 с ограничениями под условия задачи (уникальные числа от 1 до 20) Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70));ДЛСТР(B2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(B2&",";ДЛСТР(B2)+2-СТРОКА($1:$70);1)=",";СТРОКА($1:$70));"");СТРОКА($1:$70))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70)))=ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR));ДЛСТР(C2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(C2&",";ДЛСТР(C2)+2-СТОЛБЕЦ(A:BR);1)=",";СТОЛБЕЦ(A:BR));"");СТОЛБЕЦ(A:BR))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR)))))
upd. переписал пост, перевложил файл, ошибочка вышла
а у мну 63 символа массивная Код
=СЧЁТ(ПОИСК(ПОВТОР("* "&СТОЛБЕЦ(A:T)&",";2);" "&B2&", "&C2&","))
и 74 символа немассивная Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
и массивная 954 891 для любого количества любых чисел Код
=СЧЁТ(1/(ПСТР(B3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));ДЛСТР(B3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(B3&",";ДЛСТР(B3)+2-СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1))))=ПСТР(C3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));ДЛСТР(C3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(C3&",";ДЛСТР(C3)+2-СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=",";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1))))))
и массивная 588 с ограничениями под условия задачи (уникальные числа от 1 до 20) Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70));ДЛСТР(B2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(B2&",";ДЛСТР(B2)+2-СТРОКА($1:$70);1)=",";СТРОКА($1:$70));"");СТРОКА($1:$70))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70)))=ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR));ДЛСТР(C2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(C2&",";ДЛСТР(C2)+2-СТОЛБЕЦ(A:BR);1)=",";СТОЛБЕЦ(A:BR));"");СТОЛБЕЦ(A:BR))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR)))))
upd. переписал пост, перевложил файл, ошибочка вышла krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Сообщение отредактировал krosav4ig - Понедельник, 27.04.2015, 12:24
Ответить
Сообщение а у мну 63 символа массивная Код
=СЧЁТ(ПОИСК(ПОВТОР("* "&СТОЛБЕЦ(A:T)&",";2);" "&B2&", "&C2&","))
и 74 символа немассивная Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
и массивная 954 891 для любого количества любых чисел Код
=СЧЁТ(1/(ПСТР(B3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));ДЛСТР(B3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(B3&",";ДЛСТР(B3)+2-СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B3;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1)));СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B3)+1))))=ПСТР(C3;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));ДЛСТР(C3)+2-НАИБОЛЬШИЙ(ЕСЛИ(ПСТР(C3&",";ДЛСТР(C3)+2-СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=",";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C3;СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1));1)=" ";СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1)));СТОЛБЕЦ(СМЕЩ(A$3;;;;ДЛСТР(C3)+1))))))
и массивная 588 с ограничениями под условия задачи (уникальные числа от 1 до 20) Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70));ДЛСТР(B2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(B2&",";ДЛСТР(B2)+2-СТРОКА($1:$70);1)=",";СТРОКА($1:$70));"");СТРОКА($1:$70))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА($1:$70);1)=" ";СТРОКА($1:$70));СТРОКА($1:$70)))=ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR));ДЛСТР(C2)+2-НАИБОЛЬШИЙ(ЕСЛИОШИБКА(ЕСЛИ(ПСТР(C2&",";ДЛСТР(C2)+2-СТОЛБЕЦ(A:BR);1)=",";СТОЛБЕЦ(A:BR));"");СТОЛБЕЦ(A:BR))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТОЛБЕЦ(A:BR);1)=" ";СТОЛБЕЦ(A:BR));СТОЛБЕЦ(A:BR)))))
upd. переписал пост, перевложил файл, ошибочка вышла Автор - krosav4ig Дата добавления - 27.04.2015 в 11:58
AlexM
Дата: Понедельник, 27.04.2015, 12:14 |
Сообщение № 26
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4513
Репутация:
1128
±
Замечаний:
0% ±
Excel 2003
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Ответить
Сообщение Класс!!! Автор - AlexM Дата добавления - 27.04.2015 в 12:14
krosav4ig
Дата: Понедельник, 27.04.2015, 12:18 |
Сообщение № 27
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
пасяба
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Ответить
Сообщение пасяба Автор - krosav4ig Дата добавления - 27.04.2015 в 12:18
Светлый
Дата: Понедельник, 27.04.2015, 12:42 |
Сообщение № 28
Группа: Друзья
Ранг: Старожил
Сообщений: 1830
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
82 символа массивная Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТРОКА($1:20)&",";))))
82 символа массивная Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТРОКА($1:20)&",";))))
Светлый
Программировать проще, чем писать стихи.
Ответить
Сообщение 82 символа массивная Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТРОКА($1:20)&",";))))
Автор - Светлый Дата добавления - 27.04.2015 в 12:42
Rioran
Дата: Вторник, 28.04.2015, 11:00 |
Сообщение № 29
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
Вне конкурса, UDF: [vba]Код
Function Rio(A$, B$) As Long Dim X, Y, i&, j& X = Split(A, ", "): Y = Split(B, ", ") For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then Rio = Rio + 1 Next j Next i End Function
[/vba]
Вне конкурса, UDF: [vba]Код
Function Rio(A$, B$) As Long Dim X, Y, i&, j& X = Split(A, ", "): Y = Split(B, ", ") For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then Rio = Rio + 1 Next j Next i End Function
[/vba] Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение Вне конкурса, UDF: [vba]Код
Function Rio(A$, B$) As Long Dim X, Y, i&, j& X = Split(A, ", "): Y = Split(B, ", ") For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then Rio = Rio + 1 Next j Next i End Function
[/vba] Автор - Rioran Дата добавления - 28.04.2015 в 11:00
AndreTM
Дата: Вторник, 28.04.2015, 16:32 |
Сообщение № 30
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация:
500
±
Замечаний:
0% ±
2003 & 2010
Rioran , никак не могу без боли смотреть на неоптимизированный код
[vba]
Код
Function RioA(A$, B$) As Long Dim X, Y, i&, j& RioA = 0 If Len(A) > Len(B) Then X = Split(A, ", "): Y = Split(B, ", ") Else Y = Split(A, ", "): X = Split(B, ", ") End If For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then RioA = RioA + 1 Exit For End If Next j Next i End Function
[/vba]
Ну и так тоже внеконкурсно, но простенько и быстренько:
[vba]
Код
Function RioB(A$, B$) As Long Dim X, i&, j& RioB = 0 Dim Y(1 To 20) X = Split(A, ", ") For i = 0 To UBound(X) Y(CInt(X(i))) = 1 Next i X = Split(B, ", ") For i = 0 To UBound(X) If Y(CInt(X(i))) > 0 Then RioB = RioB + 1 Next End Function
[/vba]
Rioran , никак не могу без боли смотреть на неоптимизированный код
[vba]
Код
Function RioA(A$, B$) As Long Dim X, Y, i&, j& RioA = 0 If Len(A) > Len(B) Then X = Split(A, ", "): Y = Split(B, ", ") Else Y = Split(A, ", "): X = Split(B, ", ") End If For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then RioA = RioA + 1 Exit For End If Next j Next i End Function
[/vba]
Ну и так тоже внеконкурсно, но простенько и быстренько:
[vba]
Код
Function RioB(A$, B$) As Long Dim X, i&, j& RioB = 0 Dim Y(1 To 20) X = Split(A, ", ") For i = 0 To UBound(X) Y(CInt(X(i))) = 1 Next i X = Split(B, ", ") For i = 0 To UBound(X) If Y(CInt(X(i))) > 0 Then RioB = RioB + 1 Next End Function
[/vba]
AndreTM
Skype: andre.tm.007 Donate: Q iwi: 9517375010
Сообщение отредактировал AndreTM - Вторник, 28.04.2015, 16:42
Ответить
Сообщение Rioran , никак не могу без боли смотреть на неоптимизированный код
[vba]
Код
Function RioA(A$, B$) As Long Dim X, Y, i&, j& RioA = 0 If Len(A) > Len(B) Then X = Split(A, ", "): Y = Split(B, ", ") Else Y = Split(A, ", "): X = Split(B, ", ") End If For i = 0 To UBound(X) For j = 0 To UBound(Y) If X(i) = Y(j) Then RioA = RioA + 1 Exit For End If Next j Next i End Function
[/vba]
Ну и так тоже внеконкурсно, но простенько и быстренько:
[vba]
Код
Function RioB(A$, B$) As Long Dim X, i&, j& RioB = 0 Dim Y(1 To 20) X = Split(A, ", ") For i = 0 To UBound(X) Y(CInt(X(i))) = 1 Next i X = Split(B, ", ") For i = 0 To UBound(X) If Y(CInt(X(i))) > 0 Then RioB = RioB + 1 Next End Function
[/vba]
Автор - AndreTM Дата добавления - 28.04.2015 в 16:32
Rioran
Дата: Вторник, 28.04.2015, 17:28 |
Сообщение № 31
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация:
290
±
Замечаний:
0% ±
Excel 2013
не могу без боли смотреть на неоптимизированный код
AndreTM , полностью поддерживаю и хочу обсудить причины твоих модификаций моего кода =) 1). Переименование функции из "Rio" в "RioA" - предположу, сделано в эстетических целях, дабы в рамках одного проекта разделять. 2). Приравнивание функции к нулю - теряюсь в догадках. Всем вводимым переменным и функциям изначально всегда присваивается никакое значение. Что-то из личной практики даёт о себе знать? 3). Для более длинного массива по-очереди перебираем все элементы короткого. IF - SPLIT - EXIT . Предположу, что сделано для повышения производительности. Я бы сделал нечто похожее, но в ветке МШ привык ориентироваться на пусть и более ресурсно-затратные, но в то же время более "компактные" решения. Вроде, ничего не упустил.
не могу без боли смотреть на неоптимизированный код
AndreTM , полностью поддерживаю и хочу обсудить причины твоих модификаций моего кода =) 1). Переименование функции из "Rio" в "RioA" - предположу, сделано в эстетических целях, дабы в рамках одного проекта разделять. 2). Приравнивание функции к нулю - теряюсь в догадках. Всем вводимым переменным и функциям изначально всегда присваивается никакое значение. Что-то из личной практики даёт о себе знать? 3). Для более длинного массива по-очереди перебираем все элементы короткого. IF - SPLIT - EXIT . Предположу, что сделано для повышения производительности. Я бы сделал нечто похожее, но в ветке МШ привык ориентироваться на пусть и более ресурсно-затратные, но в то же время более "компактные" решения. Вроде, ничего не упустил.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Ответить
Сообщение не могу без боли смотреть на неоптимизированный код
AndreTM , полностью поддерживаю и хочу обсудить причины твоих модификаций моего кода =) 1). Переименование функции из "Rio" в "RioA" - предположу, сделано в эстетических целях, дабы в рамках одного проекта разделять. 2). Приравнивание функции к нулю - теряюсь в догадках. Всем вводимым переменным и функциям изначально всегда присваивается никакое значение. Что-то из личной практики даёт о себе знать? 3). Для более длинного массива по-очереди перебираем все элементы короткого. IF - SPLIT - EXIT . Предположу, что сделано для повышения производительности. Я бы сделал нечто похожее, но в ветке МШ привык ориентироваться на пусть и более ресурсно-затратные, но в то же время более "компактные" решения. Вроде, ничего не упустил.Автор - Rioran Дата добавления - 28.04.2015 в 17:28
AndreTM
Дата: Вторник, 28.04.2015, 22:25 |
Сообщение № 32
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация:
500
±
Замечаний:
0% ±
2003 & 2010
Rioran , пара дополнений: - Не "приравнивание функции к нулю", а "задание дефолтного возвращаемого значения/начального значения". В целом, как раз принцип "не оставлять ничего на волю конкретной реализации интерпретатора/компилятора". - Приницпиально разницы в переборе "из более длинного более короткий" vs "из более короткого более длинный" нет, скорее даже на усредненных данных выигрывает обратный по сравнению с предложенным вариант. А вот Exit For играет существенную роль в повышении производительности... Ну и приведенный пример RioB вообще показывает, как можно произвести проверку всего за один проход по списку всех элементов.
Rioran , пара дополнений: - Не "приравнивание функции к нулю", а "задание дефолтного возвращаемого значения/начального значения". В целом, как раз принцип "не оставлять ничего на волю конкретной реализации интерпретатора/компилятора". - Приницпиально разницы в переборе "из более длинного более короткий" vs "из более короткого более длинный" нет, скорее даже на усредненных данных выигрывает обратный по сравнению с предложенным вариант. А вот Exit For играет существенную роль в повышении производительности... Ну и приведенный пример RioB вообще показывает, как можно произвести проверку всего за один проход по списку всех элементов.AndreTM
Skype: andre.tm.007 Donate: Q iwi: 9517375010
Ответить
Сообщение Rioran , пара дополнений: - Не "приравнивание функции к нулю", а "задание дефолтного возвращаемого значения/начального значения". В целом, как раз принцип "не оставлять ничего на волю конкретной реализации интерпретатора/компилятора". - Приницпиально разницы в переборе "из более длинного более короткий" vs "из более короткого более длинный" нет, скорее даже на усредненных данных выигрывает обратный по сравнению с предложенным вариант. А вот Exit For играет существенную роль в повышении производительности... Ну и приведенный пример RioB вообще показывает, как можно произвести проверку всего за один проход по списку всех элементов.Автор - AndreTM Дата добавления - 28.04.2015 в 22:25
krosav4ig
Дата: Вторник, 28.04.2015, 23:53 |
Сообщение № 33
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
ну раз пошла такая пляска, то вот мой вариант вне конкурса [vba]Код
Function cons&(s1$, s2$) cons = Application.IfError(Evaluate("count(1/({" & Replace(s1, " ", "") & "}={" & Replace(s2, ",", ";") & "}))"), 0) End Function
[/vba] плюс макрофункция (исходные строки должны быть не более 254 символа)Код
=ВОЗВРАТ(АРГУМЕНТ("А";2)*АРГУМЕНТ("Б";2)*СЧЁТ(1/(ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(А;",";":")&"}")=ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(Б;",";";")&"}"))))
ну раз пошла такая пляска, то вот мой вариант вне конкурса [vba]Код
Function cons&(s1$, s2$) cons = Application.IfError(Evaluate("count(1/({" & Replace(s1, " ", "") & "}={" & Replace(s2, ",", ";") & "}))"), 0) End Function
[/vba] плюс макрофункция (исходные строки должны быть не более 254 символа)Код
=ВОЗВРАТ(АРГУМЕНТ("А";2)*АРГУМЕНТ("Б";2)*СЧЁТ(1/(ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(А;",";":")&"}")=ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(Б;",";";")&"}"))))
krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Сообщение отредактировал krosav4ig - Среда, 29.04.2015, 00:30
Ответить
Сообщение ну раз пошла такая пляска, то вот мой вариант вне конкурса [vba]Код
Function cons&(s1$, s2$) cons = Application.IfError(Evaluate("count(1/({" & Replace(s1, " ", "") & "}={" & Replace(s2, ",", ";") & "}))"), 0) End Function
[/vba] плюс макрофункция (исходные строки должны быть не более 254 символа)Код
=ВОЗВРАТ(АРГУМЕНТ("А";2)*АРГУМЕНТ("Б";2)*СЧЁТ(1/(ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(А;",";":")&"}")=ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(Б;",";";")&"}"))))
Автор - krosav4ig Дата добавления - 28.04.2015 в 23:53
krosav4ig
Дата: Среда, 29.04.2015, 00:39 |
Сообщение № 34
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
[offtop]Понедельник. Вскрываемся.
чего-то вспомнилась фраза "Доживем до понедельника" К чему бы это ...[/offtop]
[offtop]Понедельник. Вскрываемся.
чего-то вспомнилась фраза "Доживем до понедельника" К чему бы это ...[/offtop] krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Ответить
Сообщение [offtop]Понедельник. Вскрываемся.
чего-то вспомнилась фраза "Доживем до понедельника" К чему бы это ...[/offtop] Автор - krosav4ig Дата добавления - 29.04.2015 в 00:39
AlexM
Дата: Среда, 29.04.2015, 00:46 |
Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4513
Репутация:
1128
±
Замечаний:
0% ±
Excel 2003
[offtop]Живем теперь до следующего. Задача палиндром решается.
[offtop]Живем теперь до следующего. Задача палиндром решается. AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Ответить
Сообщение [offtop]Живем теперь до следующего. Задача палиндром решается. Автор - AlexM Дата добавления - 29.04.2015 в 00:46
Светлый
Дата: Четверг, 30.04.2015, 19:49 |
Сообщение № 36
Группа: Друзья
Ранг: Старожил
Сообщений: 1830
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
и массивная 954891 для любого количества любых чисел
Я взял на себя смелость немного подправить эту формулу В функции НАИМЕНЬШИЙ в качестве k лучше использовать количество пробелов в строке+1, это сразу даст правильные массивы начал, концов и длин, но немного удлинит формулу. Для уменьшения длины формулы можно задать самый простой массив СТРОКА($1:99) - это уже 99 чисел в исходной строке. И ещё ТРАНСП() короче 9 символов разницы между СТРОКА и СТОЛБЕЦ и 9 ";" в функции НАИМЕНЬШИЙ. Привожу немного причёсанную и более понятную формулу 731 символ: Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)))=ТРАНСП(ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))))))
Спасибо за новые для меня знания.
и массивная 954891 для любого количества любых чисел
Я взял на себя смелость немного подправить эту формулу В функции НАИМЕНЬШИЙ в качестве k лучше использовать количество пробелов в строке+1, это сразу даст правильные массивы начал, концов и длин, но немного удлинит формулу. Для уменьшения длины формулы можно задать самый простой массив СТРОКА($1:99) - это уже 99 чисел в исходной строке. И ещё ТРАНСП() короче 9 символов разницы между СТРОКА и СТОЛБЕЦ и 9 ";" в функции НАИМЕНЬШИЙ. Привожу немного причёсанную и более понятную формулу 731 символ: Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)))=ТРАНСП(ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))))))
Спасибо за новые для меня знания.Светлый
Программировать проще, чем писать стихи.
Ответить
Сообщение и массивная 954891 для любого количества любых чисел
Я взял на себя смелость немного подправить эту формулу В функции НАИМЕНЬШИЙ в качестве k лучше использовать количество пробелов в строке+1, это сразу даст правильные массивы начал, концов и длин, но немного удлинит формулу. Для уменьшения длины формулы можно задать самый простой массив СТРОКА($1:99) - это уже 99 чисел в исходной строке. И ещё ТРАНСП() короче 9 символов разницы между СТРОКА и СТОЛБЕЦ и 9 ";" в функции НАИМЕНЬШИЙ. Привожу немного причёсанную и более понятную формулу 731 символ: Код
=СЧЁТ(1/(ПСТР(B2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&B2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)))=ТРАНСП(ПСТР(C2;НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999));НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))-НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(" "&C2;СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=" ";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999))))))
Спасибо за новые для меня знания.Автор - Светлый Дата добавления - 30.04.2015 в 19:49
krosav4ig
Дата: Пятница, 01.05.2015, 01:55 |
Сообщение № 37
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
Привожу немного причёсанную и более понятную формулу 731 символ:
А у мну все равно короче (411) Код
=СЧЁТ(1/(ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&B2;" ";"-";СТРОКА($1:999)))-1;)=ТРАНСП(ЗАМЕНИТЬ(ЛЕВБ(C2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&C2;" ";"-";СТРОКА($1:999)))-1;))))
Привожу немного причёсанную и более понятную формулу 731 символ:
А у мну все равно короче (411) Код
=СЧЁТ(1/(ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&B2;" ";"-";СТРОКА($1:999)))-1;)=ТРАНСП(ЗАМЕНИТЬ(ЛЕВБ(C2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&C2;" ";"-";СТРОКА($1:999)))-1;))))
krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Ответить
Сообщение Привожу немного причёсанную и более понятную формулу 731 символ:
А у мну все равно короче (411) Код
=СЧЁТ(1/(ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&B2;" ";"-";СТРОКА($1:999)))-1;)=ТРАНСП(ЗАМЕНИТЬ(ЛЕВБ(C2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(C2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(C2)+1)));СТРОКА($1:999)));1;ПОИСК("-";ПОДСТАВИТЬ(" "&C2;" ";"-";СТРОКА($1:999)))-1;))))
Автор - krosav4ig Дата добавления - 01.05.2015 в 01:55
Светлый
Дата: Пятница, 01.05.2015, 14:44 |
Сообщение № 38
Группа: Друзья
Ранг: Старожил
Сообщений: 1830
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
А у мну все равно короче (411)
Я в этом не сомневался. Очень красиво. и массивная 954 891 для любого количества любых чисел
Но если есть отрицательное число, то не срабатывает. Лечится заменой "-" в формуле на "#" [offtop]Приятно общаться с теми, кто знает и УМЕЕТ больше меня. И при этом делится своими знаниями.
А у мну все равно короче (411)
Я в этом не сомневался. Очень красиво. и массивная 954 891 для любого количества любых чисел
Но если есть отрицательное число, то не срабатывает. Лечится заменой "-" в формуле на "#" [offtop]Приятно общаться с теми, кто знает и УМЕЕТ больше меня. И при этом делится своими знаниями.Светлый
Программировать проще, чем писать стихи.
Сообщение отредактировал Светлый - Пятница, 01.05.2015, 14:56
Ответить
Сообщение А у мну все равно короче (411)
Я в этом не сомневался. Очень красиво. и массивная 954 891 для любого количества любых чисел
Но если есть отрицательное число, то не срабатывает. Лечится заменой "-" в формуле на "#" [offtop]Приятно общаться с теми, кто знает и УМЕЕТ больше меня. И при этом делится своими знаниями.Автор - Светлый Дата добавления - 01.05.2015 в 14:44
vikttur
Дата: Пятница, 01.05.2015, 17:32 |
Сообщение № 39
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Хоть и прошло дней 10, но не выбрасывать же 86: Код
=СЧЁТ(1/ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&B2&",")*ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&C2&","))
82: Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТОЛБЕЦ(A:T)&",";))))
Хоть и прошло дней 10, но не выбрасывать же 86: Код
=СЧЁТ(1/ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&B2&",")*ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&C2&","))
82: Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТОЛБЕЦ(A:T)&",";))))
vikttur
Ответить
Сообщение Хоть и прошло дней 10, но не выбрасывать же 86: Код
=СЧЁТ(1/ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&B2&",")*ПОИСК(" "&СТОЛБЕЦ(A:T)&",";" "&C2&","))
82: Код
=СУММ(Ч(ДЛСТР(B2&C2)>ДЛСТР(ПОДСТАВИТЬ(" "&B2&", "&C2&",";" "&СТОЛБЕЦ(A:T)&",";))))
Автор - vikttur Дата добавления - 01.05.2015 в 17:32
Светлый
Дата: Суббота, 02.05.2015, 21:51 |
Сообщение № 40
Группа: Друзья
Ранг: Старожил
Сообщений: 1830
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
krosav4ig А у мну все равно короче (411)
Если уж резать, то транспонированную часть вычислять не надо. Достаточно по первой ячейке получить список образцов поиска с пробелом и запятой и искать их во второй ячейке. Формула получится немного больше 200. Все объявленные возможности останутся в силе. Идея, очень математически красивая, Ваша. 224 символа: Код
=СЧЁТ(ПОИСК(" "&ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("#";ПОДСТАВИТЬ(" "&B2;" ";"#";СТРОКА($1:999)))-1;);" "&C2&","))
krosav4ig А у мну все равно короче (411)
Если уж резать, то транспонированную часть вычислять не надо. Достаточно по первой ячейке получить список образцов поиска с пробелом и запятой и искать их во второй ячейке. Формула получится немного больше 200. Все объявленные возможности останутся в силе. Идея, очень математически красивая, Ваша. 224 символа: Код
=СЧЁТ(ПОИСК(" "&ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("#";ПОДСТАВИТЬ(" "&B2;" ";"#";СТРОКА($1:999)))-1;);" "&C2&","))
Светлый
Программировать проще, чем писать стихи.
Сообщение отредактировал Светлый - Воскресенье, 03.05.2015, 18:18
Ответить
Сообщение krosav4ig А у мну все равно короче (411)
Если уж резать, то транспонированную часть вычислять не надо. Достаточно по первой ячейке получить список образцов поиска с пробелом и запятой и искать их во второй ячейке. Формула получится немного больше 200. Все объявленные возможности останутся в силе. Идея, очень математически красивая, Ваша. 224 символа: Код
=СЧЁТ(ПОИСК(" "&ЗАМЕНИТЬ(ЛЕВБ(B2&",";НАИМЕНЬШИЙ(ЕСЛИ(ПСТР(B2&",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1));1)=",";СТРОКА(СМЕЩ(A$1;;;ДЛСТР(B2)+1)));СТРОКА($1:999)));1;ПОИСК("#";ПОДСТАВИТЬ(" "&B2;" ";"#";СТРОКА($1:999)))-1;);" "&C2&","))
Автор - Светлый Дата добавления - 02.05.2015 в 21:51