Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение ячеек со множеством значений - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Сравнение ячеек со множеством значений (Формулы/Formulas)
Сравнение ячеек со множеством значений
AlexM Дата: Воскресенье, 26.04.2015, 16:44 | Сообщение № 21
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4495
Репутация: 1116 ±
Замечаний: 0% ±

Excel 2003
Кажется глюк в моей голове.
Я же писал сообщение, в котором указывал результат 74 символа.
А теперь его нет. Оно было то ли до, то ли после сообщения MCH.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеКажется глюк в моей голове.
Я же писал сообщение, в котором указывал результат 74 символа.
А теперь его нет. Оно было то ли до, то ли после сообщения MCH.

Автор - AlexM
Дата добавления - 26.04.2015 в 16:44
krosav4ig Дата: Воскресенье, 26.04.2015, 19:28 | Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
неа, глюк в теме, из нее исчезло 2 поста


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениенеа, глюк в теме, из нее исчезло 2 поста

Автор - krosav4ig
Дата добавления - 26.04.2015 в 19:28
AlexM Дата: Понедельник, 27.04.2015, 10:10 | Сообщение № 23
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4495
Репутация: 1116 ±
Замечаний: 0% ±

Excel 2003
Понедельник. Вскрываемся.
Код
=СУММ(Ч(МУМНОЖ(-ЕОШ(ПОИСК(" "&СТРОКА($1:$20)&",";" "&B2:C2&","));{1:1})=0))
74 символа
К сообщению приложен файл: 9532041_AlexM.xls (25.5 Kb)



Номер мобильного модема (без голосовой связи)
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
Дата добавления - 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))

и массивная 954891 для любого количества любых чисел
Код
=СЧЁТ(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. переписал пост, перевложил файл, ошибочка вышла
К сообщению приложен файл: 9532041_krosav4.xlsx (10.4 Kb)


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))

и массивная 954891 для любого количества любых чисел
Код
=СЧЁТ(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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4495
Репутация: 1116 ±
Замечаний: 0% ±

Excel 2003
63 символа
Класс!!!



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение
63 символа
Класс!!!

Автор - 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
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
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]
К сообщению приложен файл: Rio_CareOMP.xls (32.5 Kb)


Роман, Москва, 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, никак не могу без боли смотреть на неоптимизированный код :)


Ну и так тоже внеконкурсно, но простенько и быстренько:
К сообщению приложен файл: 7-17062-2.xls (36.0 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Вторник, 28.04.2015, 16:42
 
Ответить
СообщениеRioran, никак не могу без боли смотреть на неоптимизированный код :)


Ну и так тоже внеконкурсно, но простенько и быстренько:

Автор - 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. Предположу, что сделано для повышения производительности. Я бы сделал нечто похожее, но в ветке МШ привык ориентироваться на пусть и более ресурсно-затратные, но в то же время более "компактные" решения.

Вроде, ничего не упустил.


Роман, Москва, 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 вообще показывает, как можно произвести проверку всего за один проход по списку всех элементов.


Skype: andre.tm.007
Donate: Qiwi: 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/(ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(А;",";":")&"}")=ВЫЧИСЛИТЬ("{"&ПОДСТАВИТЬ(Б;",";";")&"}"))))
К сообщению приложен файл: 9532041_krosav4.xls (45.5 Kb)


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]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение[offtop]
Понедельник. Вскрываемся.
чего-то вспомнилась фраза "Доживем до понедельника" К чему бы это ...[/offtop]

Автор - krosav4ig
Дата добавления - 29.04.2015 в 00:39
AlexM Дата: Среда, 29.04.2015, 00:46 | Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4495
Репутация: 1116 ±
Замечаний: 0% ±

Excel 2003
[offtop]Живем теперь до следующего. Задача палиндром решается. :)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение[offtop]Живем теперь до следующего. Задача палиндром решается. :)

Автор - AlexM
Дата добавления - 29.04.2015 в 00:46
Светлый Дата: Четверг, 30.04.2015, 19:49 | Сообщение № 36
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 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))))))

Спасибо за новые для меня знания.

Автор - Светлый
Дата добавления - 30.04.2015 в 19:49
krosav4ig Дата: Пятница, 01.05.2015, 01:55 | Сообщение № 37
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
Привожу немного причёсанную и более понятную формулу 731 символ:
А у мну все равно короче (411) :p
Код
=СЧЁТ(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;))))


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
Привожу немного причёсанную и более понятную формулу 731 символ:
А у мну все равно короче (411) :p
Код
=СЧЁТ(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
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 510 ±
Замечаний: 0% ±

Excel 2013, 2016
А у мну все равно короче (411)

Я в этом не сомневался. Очень красиво.
и массивная 954891 для любого количества любых чисел

Но если есть отрицательное число, то не срабатывает. Лечится заменой "-" в формуле на "#"
[offtop]Приятно общаться с теми, кто знает и УМЕЕТ больше меня. И при этом делится своими знаниями.


Программировать проще, чем писать стихи.

Сообщение отредактировал Светлый - Пятница, 01.05.2015, 14:56
 
Ответить
Сообщение
А у мну все равно короче (411)

Я в этом не сомневался. Очень красиво.
и массивная 954891 для любого количества любых чисел

Но если есть отрицательное число, то не срабатывает. Лечится заменой "-" в формуле на "#"
[offtop]Приятно общаться с теми, кто знает и УМЕЕТ больше меня. И при этом делится своими знаниями.

Автор - Светлый
Дата добавления - 01.05.2015 в 14:44
vikttur Дата: Пятница, 01.05.2015, 17:32 | Сообщение № 39
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2941
Репутация: 526 ±
Замечаний: 0% ±

Хоть и прошло дней 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
Дата добавления - 01.05.2015 в 17:32
Светлый Дата: Суббота, 02.05.2015, 21:51 | Сообщение № 40
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация: 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&","))


Программировать проще, чем писать стихи.

Сообщение отредактировал Светлый - Воскресенье, 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
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Сравнение ячеек со множеством значений (Формулы/Formulas)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!