powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачи со звездочкой * (только для настоящих профи)-2
142 сообщений из 142, показаны все 6 страниц
Задачи со звездочкой * (только для настоящих профи)-2
    #35536752
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не наращивать итак уже довольно "длинную" тему "Задачи со звездочкой * (только для настоящих профи)" создаю такую же, но цифрой 2.

Задача 345
В файле приведен пример, когда требуется по части, которая точно присутствует в одной из ячеек нужного диапазона, вернуть значение этой ячейки.

Это показано на примере стихотворения Пушкина.
На листе "стих" бессмертное произведение поэта, а на листе "куски" - несколько начальных слов (или даже слова оборваны).
Необходимо формулой воссоздать стих в первозданном виде.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35536912
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35537027
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое!
Не знал, что и ВПР работает с конструкцией "*"&B2&"*" !
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35537032
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы будете смеяться, но я все-таки решил сам немного раньше, однако формула получилась ужасная!
=ИНДЕКС(стих!$B$2:$B$21;СУММПРОИЗВ(СТРОКА(стих!$B$2:$B$21)*ЕЧИСЛО(ПОИСК(B2;стих!$B$2:$B$21;1)))-СТРОКА(стих!$B$1);1)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538521
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0)

KL
[MVP - Microsoft Excel]
Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений

"Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный...

Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала...
Почему?
А если бы их было эдак с 1000 штук?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538530
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKВы будете смеяться, но я все-таки решил сам немного раньше, однако формула получилась ужасная!
=ИНДЕКС(стих!$B$2:$B$21;СУММПРОИЗВ(СТРОКА(стих!$B$2:$B$21)*ЕЧИСЛО(ПОИСК(B2;стих!$B$2:$B$21;1)))-СТРОКА(стих!$B$1);1)

Нормальная получилась формула.
Не знай я про ВПР() сам бы так сделал. Оно ещё не известно как лучше?
единственное зачем минусовать строку
=ИНДЕКС(стих!B:B;СУММПРОИЗВ(СТРОКА(стих!$B$2:$B$21)*ЕЧИСЛО(ПОИСК(B2;стих!$B$2:$B$21;1))))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538531
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dan-K KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0)

KL
[MVP - Microsoft Excel]
Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений

"Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный...

Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала...
Почему?
А если бы их было эдак с 1000 штук?

А вот тут что-то с обновлением у тебя. Такой проблемы воспроизвести не удалось
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538534
Rom@n_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервис - параметры - вычисления - автоматически.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538629
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadНе знай я про ВПР() сам бы так сделал. Оно ещё не известно как лучше?
ВПР() однозначно быстрее, возможно в разы :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35538660
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL) DeggasadНе знай я про ВПР() сам бы так сделал. Оно ещё не известно как лучше?
ВПР() однозначно быстрее, возможно в разы :-)
Верю, но ведь шанс был,
что неточный поиск как нибуть там тормозит вычисления или какая-нибуть ещё мулька!
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35540756
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad Dan-K KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0)

KL
[MVP - Microsoft Excel]
Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений

"Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный,
Я памятник себе воздвиг нерукотворный...

Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала...
Почему?
А если бы их было эдак с 1000 штук?

А вот тут что-то с обновлением у тебя. Такой проблемы воспроизвести не удалось

Все , нашел. Файл от DaniilK был с "ручным пересчетом"...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35549884
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0)

А как аналогичную конструкция вставить в функцию "НАЙТИ" для работы с текстом в ячейке?

Варианты текста:
10*80(кор=50шт)АнкерБОЛТ6-грголова,Omax
10*100(кор=80)АнкерБОЛТ6-грголова,Omax
10*120(кор=50шт)АнкерБОЛТ6-грголова,70024;3,87kg

хотелось бы чтото типа

=НАЙТИ("(кор="&"*"&"шт)";S38;1)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35550054
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=ПОИСК("(кор=*шт)";A1;1)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35550306
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а смысл данной операции в чем (в контексте предыдущей задачи)?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35552468
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)а смысл данной операции в чем (в контексте предыдущей задачи)?

Подозреваю, что вопрос был не ко мне.
И снова задачка

Задача 351

В файле-примере в столбце "отбор по условиям" формула возвращает 0 или 1 в зависимсоти от того удовлетворяют ли значения в текущей строке заданным условиям. Все прекрасно работает, однако, хотелось бы добиться универсализации формулы. Т.е. если условие "отключено" (ячейки C3:E3), то оно бы нивелировалось и в формуле и она продолжала бы корректно работать.
Подскажите идеи как такое сделать? (если это, вообще, возможно).
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35553317
Фотография Dan-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)а смысл данной операции в чем (в контексте предыдущей задачи)?
=ПОИСК("(кор=*шт)";A1;1)
- очень помогло для автоматизации ПРИЕМКИ И ВВОДА крепежа в 1С и вспомогательную бухгалтерию в Excel - Постоянно приходят накладные по крепежным изделиям на 300-400 позиций а ИХ названия не совпадают с НАШИМИ да еще и меняются постоянно и отписывают то штуками то упаковками, то килограммами. Менеджеры по нескольку дней разбираются с одним приходом...
В итоге сделал мегаформулку учитывающую все "извращения" бухгалтерии поставщиков для приведения ИХ накладной в НАШУ накладную с автоматическим переводом упаковок в штуки...
А так как извращения в каждой бухгалтерии свои, то для других поставшиков приходится писать то же самое, но чуть-чуть другое...
Спасибо за помощь и идею...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35553318
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По простому так:
=--(И(ЕСЛИ($C$3=1;C7=$C$2);ЕСЛИ($D$3=1;D7=$D$2);ЕСЛИ($E$3=1;E7=$E$2)))

или же еще проще (помня о том, что аргументов у функции может быть 30):
=--(И(C7=$C$2;D7=$D$2;E7=$E$2;$C$3=1;$D$3=1;$E$3=1))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35553724
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не работают эти формулы:
=--(И(C7=$C$2;D7=$D$2;E7=$E$2;$C$3=1;$D$3=1;$E$3=1))
=--(И(ЕСЛИ($C$3=1;C7=$C$2);ЕСЛИ($D$3=1;D7=$D$2);ЕСЛИ($E$3=1;E7=$E$2)))

Выбрал ноль в C3 и D3. По идее формулы должны были проставить единицы напротив всех строк где область совпадает с выбранной в E2. Однако этого не произошло...
Попробуйте и убедитесь сами.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35553979
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilK...По идее формулы должны были проставить единицы напротив всех строк где область совпадает с выбранной в E2. ....Да, я не верно понял условия задачи. Прошу простить.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35553988
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда подойдет вот это:
=--(И(ЕСЛИ($C$3=1;C7=$C$2;ИСТИНА);ЕСЛИ($D$3=1;D7=$D$2;ИСТИНА);ЕСЛИ($E$3=1;E7=$E$2;ИСТИНА))) .
Идея все таже
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35554447
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, теперь работает
А по проще и/или универсальнее никак нельзя?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35554485
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKДа, теперь работает
А по проще и/или универсальнее никак нельзя?А что значит прощщще???
И универсальнее???
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35555566
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06 DaniilKДа, теперь работает
А по проще и/или универсальнее никак нельзя?А что значит прощщще???
И универсальнее???
Избаловали :)
подавай позамудренее:
{=--И((C7:E7=$C$2:$E$2)+($C$3:$E$3=0))} <Ctrl>+<Shift>+<Enter>
=--(СУММПРОИЗВ($C$3:$E$3*(C7:E7<>$C$2:$E$2))=0)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35556035
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при чем тут баловство? :)
тут рациональность!
Ведь, согласитесь, приятно, когда формула в 2 раза короче. В реальных данных условий намного больше и формула с ЕСЛИ() выросла бы в длиннющую строку. Предложенные же Deggasad формулы намного удобнее в работе!
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35557496
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
продолжение следует..

А как быть, если в условии присутствует больше либо равно и меньше либо равно (которое нужно отключать одним нулем), а также, если условия "учитывать ли" разорваны один или нескллько раз одной или более пустых либо не имеющих отношения к условию ячеек?

Пример прилагается.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35557951
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно проще и универсальнее то так (см. приложение)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35574811
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Если нужно проще и универсальнее то так (см. приложение)

KL
[MVP - Microsoft Excel]
Да
только, к сожалению, не формулами, а макросами...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35574824
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ячейки с текстом, пример:
1, вода
2 тепло
3. Воздух

Необъодимо формулой определить порядковый номер первой русской буквы
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35574980
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-моему уже не раз обсуждалось..

{=МИН(ЕСЛИ(ПСТР(A1;СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));1)>="А";СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));99999))}
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35575402
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под первой русской буквой понимается не "А"! :)
а любая буква русского алфавита!
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35575455
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри....
формула делает то что надо...
но как??
поясните, плиз, принцип!
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35576758
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_по-моему уже не раз обсуждалось..

{=МИН(ЕСЛИ(ПСТР(A1;СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));1)>="А";СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));99999))}
При длине слов приведенной в примере...

Значительно короче (66 vs. 105) и быстрее на 25% в XL2007 в 1500 ячейках:
{=ПОИСКПОЗ(ИСТИНА;ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)>="А";0)}

Вот так уже не требует ввода через CTRL+SHIFT+ENTER, скорость та же и короче (76 vs. 105):
=ПОИСКПОЗ(ИСТИНА;ИНДЕКС(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)>="А";0);0)

Не требует ввода через CTRL+SHIFT+ENTER, не летучая, медленнее на 8.5% и все еще короче (89 vs. 105):
=ПОИСКПОЗ(ИСТИНА;ИНДЕКС(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)>="А";0);0)

При возрастании длины слов, все три приведенные формулы значительно опережают формулу предложенную _slan_ по скорости пересчета в XL2007 (например: при длине в 43 знака, последняя формула на 18% быстрее в 1500 ячейках)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35579533
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как формулой найти последний символ "\" в таких строках:

Код: plaintext
1.
2.
3.
\\serv\шара\папка\мамка\дочка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\жучка\файл.xls

количество слешей может быть произвольным...
Задача: разделить путь к файлу на путь папки и сам файл.
или только макросом?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35580013
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06Как формулой найти последний символ "\" в таких строках:

Код: plaintext
1.
2.
3.
\\serv\шара\папка\мамка\дочка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\жучка\файл.xls

количество слешей может быть произвольным...
Задача: разделить путь к файлу на путь папки и сам файл.
или только макросом?

Например так
=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";"")))))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35580088
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так
{=ПСТР($A$1;МАКС(--((ПСТР(A1;СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A$1)));1)="\")*СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A$1)))))+1;ДЛСТР($A$1))} вводится через <Ctrl>+<Shift>+<Enter>
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35580214
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad[quot Сергей06]
Например так
=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))) Точно. Видел же я уже такое решение :-) Только не разобрался сразу, а сейчас вот понадобилось. Спасибо.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35581488
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deggasad Сергей06Как формулой найти последний символ "\" в таких строках:

Код: plaintext
1.
2.
3.
\\serv\шара\папка\мамка\дочка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\файл.xls
\\serv\шара\папка\мамка\дочка\внучка\жучка\файл.xls

количество слешей может быть произвольным...
Задача: разделить путь к файлу на путь папки и сам файл.
или только макросом?

Например так
=ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";"")))))

Еще:
=ПСТР(A1;НАЙТИ("|";ПОДСТАВИТЬ(A1;"\";"|";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))+1;30000)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35583590
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так:
{=ПСТР(A1;1+ПОИСКПОЗ(2;ЕСЛИ(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)="\";1));3000)}
Пусть не самый быстрый, но отличный...... (от других). Прям как АО "МММ" !

P.S.
Что-то не смог я залогиниться под своим старым ником..... Пришлось создать новый...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35583714
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik
Пусть не самый быстрый, но отличный...... (от других). Прям как АО "МММ" !
Нееееее, так Хопёр-инвест себя позиционировал :-)

Честно, не понял второй пример Deggesаdа и пример A-Nikа
Как вы по буквам распределили строку?
Я также хотел сделать сначала, но не получилось.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35583801
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну здрасьте ! Говорили-балакали, сіли та заплакали! Ты про назначение клавишы Ф9 в экселе слышал ? Так вот, для разбора и отладки формул это незаменимая вещь! В офисах свыше 2000 имеется подсветка синтаксиса формул. Ставишь курсор в часть формулы, которая тебе непонятна. При этом в подсвеченной формуле какой-то из параметров выделится жирным шрифтом. Щёлкаешь на этом параметре и у тебя выделяется сразу весь аргумент функции (который чаще всего составной). Затем нажимаешь Ф9 и смотришь что получается в результате выполнения выделеного куска формулы. Разбирать формула проще всего с середины от более простых выражений к более сложным.
Вот только после этого задавай вопросы более конкретных непонятных тебе выражений, а не сразу спрашивай как работает формуа :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35584063
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik1. Про этот способ просмотра вычислений формулы спасибо.
я пользовал "вычислить формулу" на панели "зависимости". Не всегда это удобно.
2. Я не спрашивал (как мне до сих пор думается) как работает вся формула. Буду разбираться как в массив попали отдельные символы одной строки.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35587279
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что, разобрался ? Помощь нужна ? ;-)

Пока Сергей06 думает, у меня появилась очередная задача, с которой справиться не удалось! :(( Есть массив N x M. Надо получить массив сумм столбцов массива :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588150
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikНу что, разобрался ? Помощь нужна ? ;-)

Пока Сергей06 думает, у меня появилась очередная задача, с которой справиться не удалось! :(( Есть массив N x M. Надо получить массив сумм столбцов массива :-)
Массив в диапазоне или получен формулой?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588399
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, массив в диапазоне. Но не против посмотреть и для случая массива в формуле.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588571
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот примеры на скорую руку

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588591
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача 361

Есть формула с использованием СУММПРОИЗВ(), которая занимается тем, что подсчитывает на основании нескольких условий.
Хочется упростить формулу в части ЕСЛИ($D$119=0;--(ДЛСТР($D$3:$D$116)>0);--($D$3:$D$116=$D$118)).
Смысл в том, что если в D119 ноль, то условие $D$3:$D$116=$D$118 никак не принималось бы во внимание.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588619
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думал на тему --((--($D$3:$D$116=$D$118))^$D$119), но так не работает...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588647
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKЗадача 361

Есть формула с использованием СУММПРОИЗВ(), которая занимается тем, что подсчитывает на основании нескольких условий.
Хочется упростить формулу в части ЕСЛИ($D$119=0;--(ДЛСТР($D$3:$D$116)>0);--($D$3:$D$116=$D$118)).
Смысл в том, что если в D119 ноль, то условие $D$3:$D$116=$D$118 никак не принималось бы во внимание.
Без CTRL+SHIFT+ENTER:
=СУММПРОИЗВ(--($C$3:$C$116=$C$118);(($D$3:$D$116=$D$118)+($D$119=0))^($D$119<>0);--($E$3:$E$116=$E121);$F$3:$F$116)

С CTRL+SHIFT+ENTER:
{=СУММ(($C$3:$C$116=$C$118)*ЕСЛИ($D$119=0;1;$D$3:$D$116=$D$118)*($E$3:$E$116=$E121)*$F$3:$F$116)}
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588799
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Большое!!!
а какая формула предпочтительнее по скорости работы?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588878
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKСпасибо Большое!!!
а какая формула предпочтительнее по скорости работы?
Вторая.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588916
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL), спасибо!!! А я всё вокруг да около бродил...... :-))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35588944
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35589793
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даю подсказку: я не зря выше спрашивал как получить строку сумм столбцов массива... ;-) Это, так сказать, основная идея... Технику же выделения ячеек (столбцов) можно посмотреть тут .
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35589892
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikТут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-)
Полного решения самой задачи всё равно не получится, ибо удалять-то формулой как?

Предлагаю немного переформулировать задачу:
"Получить список незаполненных столбцов массива (диапазона)"
В виде диапазонов ( "B:B,D:D,F:G,I:I" или "B1:B23,F1:F23" ), или по-другому, главное - чтобы затем
полученное значение позволило удалить данные диапазоны одним методом какого-либо объекта.
Исходим из того, что на листе - таблица с данными A1... (с подписями слева и сверху), кроме
таблицы, на листе присутствуют другие заполненные ячейки (границы таблицы желательно
определять "по концу" подписей строк и столбцов).
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590065
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMA-NikТут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-)
Полного решения самой задачи всё равно не получится, ибо удалять-то формулой как?

Предлагаю немного переформулировать задачу:
"Получить список незаполненных столбцов массива (диапазона)"
В виде диапазонов ( "B:B,D:D,F:G,I:I" или "B1:B23,F1:F23" ), или по-другому, главное - чтобы затем
полученное значение позволило удалить данные диапазоны одним методом какого-либо объекта.
Исходим из того, что на листе - таблица с данными A1... (с подписями слева и сверху), кроме
таблицы, на листе присутствуют другие заполненные ячейки (границы таблицы желательно
определять "по концу" подписей строк и столбцов).

Легко! Но будут ограничения по двум параметрам:
- длина текстовой строки как аргумента Range
- кол-во одновременно удаляемых областей

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub test()
    Dim rng As String, frm As String, txt As String
    'Для краткости исхожу из того, что есть фильтр.
    With Me.AutoFilter.Range: rng = .Offset( 1 ).Resize(.Rows.Count -  1 ).Address( 0 ,  0 ): End With
    frm = "=IF(COUNTIF(OFFSET(" & rng & ",,COLUMN(INDEX(1:1,,1):INDEX(1:1,,COLUMNS(" & rng & ")))-1,,1),""<>""),"""",ADDRESS(1,COLUMN(" & rng & "),4))"
    txt = Replace(Application.Trim(Join(Evaluate(frm), " ")), " ", ",")
    Intersect(Range(txt), Range(rng).EntireColumn).EntireColumn.Delete
End Sub
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590070
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMПолного решения самой задачи всё равно не получится, ибо удалять-то формулой как?
Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла "
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590354
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла "
Ну, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-)
А если такие варианты: "Получить список незаполненных столбцов массива (диапазона)"
1) VBA - без цикла.
2) Формулой.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590537
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMKL (XL)Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла "
Ну, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-)
А если такие варианты: "Получить список незаполненных столбцов массива (диапазона)"
1) VBA - без цикла.
2) Формулой.

А стандартные функции экселя типа countif, counta и пр. разве не на циклах сделаны? :) Хоть и скрыты от кодеров.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590812
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMepА стандартные функции экселя типа countif, counta и пр. разве не на циклах сделаны? :) Хоть и скрыты от кодеров.
На циклах, на чем же еще. Но суть именно в том, что не на VBA, а на C и быстрее во много раз.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590827
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMНу, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-)
В данной задаче нахождение исходного диапазона вторично. Способов масса и они все описаны в этом форуме. Фильтр был выбран мной для сокращения времени на написание примера.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35590973
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот мои способа решения этой задачи....... ;-);-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35591944
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек.
Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-)
Желаю успехов ! ;-))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35592251
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikНу что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек.
Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-)
Желаю успехов ! ;-))
Только не говори, что ты сделал это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub test()
    x = Selection.Address( 0 ,  0 )
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With Worksheets.Add
        .Range(x).Value =  1 
        Me.Activate
        Me.Range(.UsedRange.SpecialCells(xlCellTypeBlanks).Address( 0 ,  0 )).Select
        .Delete
    End With
    Application.DisplayAlerts = True
End Sub
Во-первых, это неинтересно
Во-вторых, ограничение в 255 знаков для текстовой строки как параметра Range()
В-третьих, ограничение в ~8.192 несмежных областей для SpecialCells
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35592357
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikНу что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек.
Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-)
Желаю успехов ! ;-))

Почему-то мне кажется что первая часть не очень сложная (хотя может и ошибаюсь, но сейчас некогда подумать)
А касательно второй части вопроса - другого варианта сделать это без цикла, кроме того что описан тут я не придумал
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35592658
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки
Код: plaintext
Range(Replace(Selection.Address( 0 ,  0 ), ",", ":")).Select
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35592931
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот относительно "дешевый" вариант нахождения общей области выборки, который пришел мне на ум сегодня утром:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub SelectionQuadrant()
    With Selection
        colMax = Evaluate("1+MAX(" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & ")")
        colMin = Evaluate("1+MIN(" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & ")")
        rowMax = Evaluate("1+MAX(" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & ")")
        rowMin = Evaluate("1+MIN(" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & ")")
    End With
    Range(Cells(rowMin, colMin), Cells(rowMax, colMax)).Select
End Sub
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35593072
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub SelectionQuadrant()
    With Selection
    a = "1+MAX({" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "})"
        colMax = Evaluate("1+MAX({" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "})")
        colMin = Evaluate("1+MIN({" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "})")
        rowMax = Evaluate("1+MAX({" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "})")
        rowMin = Evaluate("1+MIN({" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "})")
    End With
    Range(Cells(rowMin, colMin), Cells(rowMax, colMax)).Select
End Sub
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35593177
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikДа, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }...
Или в (...):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub SelectionQuadrant()
    With Selection
    a = "1+MAX((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))"
        colMax = Evaluate("1+MAX((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))")
        colMin = Evaluate("1+MIN((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))")
        rowMax = Evaluate("1+MAX((" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "))")
        rowMin = Evaluate("1+MIN((" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "))")
    End With
    Range(Cells(rowMin, colMin), Cells(rowMax, colMax)).Select
End Sub

Кстати, идея родилась именно с {...}, но перед отправкой в форум я счел это излишним, забыв об ограничении кол-ва параметров :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35593286
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё-таки, ограничения всё равно остались те же..... :-( (для 2003 офиса). Проблема в том, что Selection.Address при достаточно большом количестве выделении выдаёт не полный набор адресов. Так, примерно 20-25 отдельных выделений и длина строки Selection.Address замирает, не растёт, при добавлении новых выделений.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub CommandButton1_Click()
Dim Rng As Range, colMax As Long, colMin As Long, rowMax As Long, rowMin As Long, Disp As Long
    With Selection
        colMax = Evaluate("1+MAX({" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "})")
        colMin = Evaluate("1+MIN({" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "})")
        rowMax = Evaluate("1+MAX({" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "})")
        rowMin = Evaluate("1+MIN({" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "})")
    End With
    Set Rng = Range(Cells(rowMin, colMin), Cells(rowMax, colMax))
    Disp = Application.Columns.Count - colMax
    Selection.Offset(, Disp).Value =  1 
    Rng.Offset(, Disp).SpecialCells(xlCellTypeBlanks).Offset(, -Disp).Select
    Rng.Offset(, Disp).ClearContents
End Sub
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35593510
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот вариант, который у меня был изначально.... :-)))))))) Тоже не учёл, что Selection.Address не даст полный перечень диапазонов.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35595257
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фух! Наконец-то выкрутился из ограничения в 255 символов для Range и .Address !!! Правда, появилось другое ограничение - не должно быть никаких данных и форматирования в ячейках свыше 128 столбца и само выделение тоже не должно захватывать 128 столбец! :-((( Предлагаю взглянуть, что у меня получилось. В файле два способа. Первый не работает для сложных выделений.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35598804
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что, господа, готовы продолжить ? :-)) Домашнее задание: решить эту задачу без единого цикла на ВБА!
Рассматриваются такие ситуации:
Вариант 1: Подразумевается, что в искомый цвет окрашена либо вся строка, либо только определённый столбец (т.е. знаем где искать).
Вариант 2: Расположение ячейки, окрашенной искомым цветом, в строке неизвестно (либо может быть разным)

А теперь, к снаряду!! (а точнее, к клавиатуре!) :))
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35601718
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И, наконец,
Вариант 3: Найти и выделить не просто строки, а все ячейки, окрашенные в искомый цвет, без единого цикла на ВБА!!!
У меня получилось !!!!! При чём двумя способами!!!

Конечно, без кучи вспомогательных ячеек не обошлось, но ради такого дела - ничего не жалко...... !!! Любо глянуть! Во мгновение ока находится практически любое количество искомых элементов! (предполагается, что таблица (диапазон), где искать, заранее известен)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35601824
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, один из методов решения варианта 3 невероятно простой! В нём нет ни единой формулы! Только обычные довольно часто используемые возможности экселя! Так что, рекомендую подумать над задачкой всем! Вы будете смеяться, когда увидите насколько он прост! А решив вариант 3, с лёгкостью решите первый и второй! :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35601987
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikФух! Наконец-то выкрутился из ограничения в 255 символов для Range и .Address !!! Правда, появилось другое ограничение - не должно быть никаких данных и форматирования в ячейках свыше 128 столбца и само выделение тоже не должно захватывать 128 столбец! :-((( Предлагаю взглянуть, что у меня получилось. В файле два способа. Первый не работает для сложных выделений.

а вот разбирали похожую тему - из предложенных способов два первых по скорости - с циклами..

http://www.sql.ru/forum/actualthread.aspx?tid=583442&pg=1

конечно, не все условия были протестированы.. но ограничений нет.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35602147
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)A-NikДа, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }...
Или в (...):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub SelectionQuadrant()
    With Selection
    a = "1+MAX((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))"
        colMax = Evaluate("1+MAX((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))")
        colMin = Evaluate("1+MIN((" & Replace(Replace(Replace(.EntireColumn.Address( 1 ,  0 , xlR1C1), "C[", ""), "]", ""), ":", ",") & "))")
        rowMax = Evaluate("1+MAX((" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "))")
        rowMin = Evaluate("1+MIN((" & Replace(Replace(Replace(.EntireRow.Address( 0 ,  1 , xlR1C1), "R[", ""), "]", ""), ":", ",") & "))")
    End With
    Range(Cells(rowMin, colMin), Cells(rowMax, colMax)).Select
End Sub

Кстати, идея родилась именно с {...}, но перед отправкой в форум я счел это излишним, забыв об ограничении кол-ва параметров :-)
Несмотря на то, что ограничения все те же, я тут готовил курс по формулам Excel для продвинутых пользователей, и меня вдруг осенило (наш человек силен-таки задним умом):

Код: plaintext
1.
2.
Sub test()
    Range(Replace(Selection.Address( 0 ,  0 ), ",", ":")).Select
End Sub
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35602149
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как же мой пост от 14.10.2008

DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки
Код: plaintext
Range(Replace(Selection.Address( 0 ,  0 ), ",", ":")).Select
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35602150
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadА как же мой пост от 14.10.2008

DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки
Код: plaintext
Range(Replace(Selection.Address( 0 ,  0 ), ",", ":")).Select

Намана!!! Слона-то я и не заметил. А что же ты молчал, когда мы продолжали маятся дурью сильно после твоего ответа :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35602152
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)DeggasadА как же мой пост от 14.10.2008

DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки
Код: plaintext
Range(Replace(Selection.Address( 0 ,  0 ), ",", ":")).Select

Намана!!! Слона-то я и не заметил. А что же ты молчал, когда мы продолжали маятся дурью сильно после твоего ответа :-)
Ввиду имеющегося недостатка
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35602177
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikКстати, один из методов решения варианта 3 невероятно простой! В нём нет ни единой формулы! Только обычные довольно часто используемые возможности экселя! Так что, рекомендую подумать над задачкой всем! Вы будете смеяться, когда увидите насколько он прост! А решив вариант 3, с лёгкостью решите первый и второй! :-)
А вот было время, когда не было Офиса с VBA... SQLServer приравнивался к мэйнфремам... Вообще, не было Win... Была, конечно, но NT3, Win3... И никто не задумывался над "один из методов решения варианта 3 невероятно простой". Забивали на это. Ибо уже тогда имелись практически стандарные решения алгоритмов... "Лучшее- враг хорошего" - первый принцип для программиста...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35607520
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM"Лучшее- враг хорошего" - первый принцип для программиста...Что касается меня - то я не согласен относительно этого принципа для программиста :-)

А теперь вернёмся к нашим баранам :-) Сделал я тремя способами поиск определённого цвета в заданном диапазоне :-) А потом решил посмотреть насколько мои способы "обгоняют" варианты с циклом. И какого же было моё удивление, когда я увидел, что перебор по всем ячейкам диапазона зачастую оказывается даже быстрее Главное - выявить и исключить из тела цикла наиболее ресурсоёмкую операцию. В данном примере самая ресурсоёмкая операция оказалась Union(), как ни странно! :-) Если выбрать поиск чёрного цвета, вы сразу ощутите разницу в скорости процедур с Union() и без неё (примерно в 10 раз )!
Предлагаю взглянуть что у меня получилось! :-)

Вывод: В данной задаче использование безциклового поиска формата оказалось неэффективным! . Наиболее эффективно работает процедура поиска цвета на основе метода Find() без использования Union().
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35609711
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и, наконец, четвёртый способ без цикла, который обогнал по скорости все другие имеющиеся способы !!! :-)) К тому же, он ещё и самый простой! :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35621967
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikAndreTM"Лучшее- враг хорошего" - первый принцип для программиста...Что касается меня - то я не согласен относительно этого принципа для программиста :-)
...
когда я увидел, что перебор по всем ячейкам диапазона зачастую оказывается даже быстрее Главное - выявить и исключить из тела цикла наиболее ресурсоёмкую операцию...

И ви мне будете доказать, шо я не прав?

И не надо кричать насчёт неверного квотирования - смысл был ясен всегда. Я говорю об известных алгоритмах. Зачем придумывать (впрочем, конечно, если до вас никто на языке "хума-кику-бос" не программировал - то да, конечно, как круто будет адаптировать сортировку методом пузырька... Или настрадать кучку кода, который уткнётся в предел уже на пятитысячной строке таблицы... Или не проверить граничные значения...) что-то своё - если можно просто объяснять с важным видом всем известные истины...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35622210
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTMИ ви мне будете доказать, шо я не прав?
И не надо кричать насчёт неверного квотирования - смысл был ясен всегда. Я говорю об известных алгоритмах. Зачем придумывать (впрочем, конечно, если до вас никто на языке "хума-кику-бос" не программировал - то да, конечно, как круто будет адаптировать сортировку методом пузырька... Или настрадать кучку кода, который уткнётся в предел уже на пятитысячной строке таблицы... Или не проверить граничные значения...) что-то своё - если можно просто объяснять с важным видом всем известные истины...
Ну, давайте разберёмся, кто из нас прав :-)
1. Размер кода. Сравните размер кода метода 1 и 4 (без цикла) и любой из вариантов с циклом :-)
2. Относительно 5000й строки. Распространил данные до 10000й строки и все три цвета находятся и выделяются без проблем.
3. Скорость. 4й мой вариант работает в разы быстрее любого из варианта с циклом! А на больших диапазонах - в десятки разов быстрее, если использовать обычный неадаптированный алгоритм на основе известный истин (я имею в виду обычный перебор с использованием Union()). Для примера: если скопировать приведённый пример таблицы на 10000 строк, поиск зелёных ячеек методом перебора всех ячеек с исп. Union() справился за 114,84с, мой вариант №4 справился за 0,41с.
4. Сложность алгоритма. Лично для меня сложным является только безцикловый алгоритм №3. Его сразу на помойку (овчинка вычинки не стоит). Варианты 1, 2 и 4 - не сожержат ничего сложного для понимания :-)

P.S.
В своих ответах я просто показываю возможности экселя. Конечно, тому человеку, который задал вопрос решить эту задачу, подойдёт любой самый простой для его понимания алгоритм. Но иногда мы с талкиваемся с задачами, что эксель "задумывается" на некоторое время, дольше желаемого :-) Именно для таких целей я и придумываю более быстрые способы решения. Конечно же они будут немного сложнее для понимания, и это нормально. Если для того, чтобы эксель справился с задачей на за несколько секунд, а за доли одной секунды вам понадобится выделить пускай даже половину свободно листа под промежуточные ячейки, то разве вы не пойдёте на это :-) Мне, например, не жалко выделить любое количество незадействованных ячеек для увеличения быстродействия программы ! :-) Терпеть не могу задержки ! Меня так раздражает мой Samsung i710, что не передать! Вроде бы проц 416 Мгц, но такое ощущение, что у него Zilog Z80 :))
Так что, просто примите к сведенью имеющиеся возможности экселя и вспомните про них, когда не будет хватать быстродействия ! :-)

Примечание: В последнем моём вложении мой первый вариант без цикла перестал работать из-за совпадения имени пользовательской функции GetColor и названия именованной формулы. Не уследил :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35628766
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прислали мне интересный файлик...... Как сделано - не знаю... :-) Повторить не удалось... :-)
Может кто тоже хочет попробовать "раскусить" ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35629056
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik,
Возможно этот файл сделан не в Экселе, а в другой программе, например, в Опен Офисе
:-)
/topic/571206&pg=1&hl=%f3%e4%e0%eb%e8%f2%fc+%e8%ec%ff
В этом топике обсуждались недопустимые имена в файле.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35636789
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я уверен, что этот файл сделан в Экселе
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35636927
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilK,

Точно :-)
Вот сделал по трем столбцам
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35637069
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гыыы, действительно ! А ларчик просто открывался Сначала диапазон указываешь на один столбец, задаешь его в Данные/Проверка/Список, а затем указываешь этот диапазон (в данном случае "Организация_Менеджер") на два и более столбцов :-)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35637774
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-NikГыыы, действительно ! А ларчик просто открывался Сначала диапазон указываешь на один столбец, задаешь его в Данные/Проверка/Список, а затем указываешь этот диапазон (в данном случае "Организация_Менеджер") на два и более столбцов :-)
Принцип тот же что и в трюке с с именами листов в именованных формулах.

1) длина именованных формул ограничена 255-ю знаками.
2) имена листов автоматически включаются во все ссылки (кроме сылок типа "!A1")
3) если по вине имен листов лимит превышен и имя не создается...
а. сокращаем имена листов до, скажем, "1", "2", "3" и т.д.
б. создаем именованную формулу
в. возвращаем листам их прежние (длинные) имена
г. именованная формула работает
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35759031
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача на макрос "Три слова"

В ячейках B2:B5 находится пример текста, который необходимо привести к виду, пример которого показан в C2:C5. Правила, по которым сформирован текст в C2:C5:
1 от первоначального текста должно остаться не более 3-х слов
2 должны остаться только слова начинающиеся с большой буквы
3 словом считатьется неразрывная последовательность текстовых символов (знаки припинания, цифры и другие символы игнорировать) состоящая не менее чем из 3-х символов

в ячейках могут встречаться только русские буквы, цифры, знаки припинния, кавычки, скобки и пр.

файл прилагается
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35759818
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсить строку по пробелам, счётчик на заглавные буквы не более 1 в слове, если найденных таким образом слов Ю 3? то выход из цыкла. Не так сложно, только от кавычек надо избавляться...
Я думаю, по ascii можно принимать в рассчёт только буквы.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35759820
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*цикла
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35759853
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению, я в ВБА не разбираюсь вообще, но оч. надеюсь, что кто-то откликнется и поможет...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35759861
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл добавить: слово не всегда может заканчиваться на пробел. конец слово это любой символ - не буква
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35760718
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слова должны разделяться пробелами. Иначе никакой макрос не поможет :) А всякие там ковычки - потом поудалять, просто сделав небольшой справочник того, что надо искать и заменять на пустое место.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35761408
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поудалять вручную?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35761453
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKпоудалять вручную?
да вот ещё!

Сверять посимвольно со справочниом ненужных символов программно и всё. Вам на форум vba надо. ща просто работы много, не успеваю вам помочь. но это очень просто. нужно только время...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35761610
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilKЗадача на макрос "Три слова"

В ячейках B2:B5 находится пример текста, который необходимо привести к виду, пример которого показан в C2:C5. Правила, по которым сформирован текст в C2:C5:
1 от первоначального текста должно остаться не более 3-х слов
2 должны остаться только слова начинающиеся с большой буквы
3 словом считатьется неразрывная последовательность текстовых символов (знаки припинания, цифры и другие символы игнорировать) состоящая не менее чем из 3-х символов

в ячейках могут встречаться только русские буквы, цифры, знаки припинния, кавычки, скобки и пр.

файл прилагаетсяДумаю, что этот вариант с формулами тебе поможет, если ты предварительно обработаешь данные заменив все не нужные символы на пробелы.
Возможно у кого-то это получится в одной формуле

http://www.sql.ru/forum/actualthread.aspx?tid=195493&hl=%e4%eb%f1%f2%f0#2858599
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35761724
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей06, спасибо, интересные примеры
но, все-таки, это не то :(
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35763558
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а что делать, например, с записью [ЧП Ян Майорович Арлазоров] или [ООО "УМ"]? По заданным правилам формулы урежут смысловые значения напрочь...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35764129
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это допустимо, ибо таких вариантов как вы привели будет 1-2, поэтому их можно игнорировать...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35765171
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если основной акцент сделать на формулы, то можно так (см. вложение). Однако для работы этого варианта надо предварительно заменить все "." на " ." (пробел-точка). И так для всех возможных символов, на которые может закончиться слово. Поиск окончания слова на любой символ (не букву) при помощи формул я не осилил
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35765187
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот при помощи ВБА всё возможно без особых проблем! Вот ещё 2 варианта:
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35769355
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik , спасибо огромное!
то, что надо!!!
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35820013
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решение задачи перемешивания случайных значений формулами
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35820365
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, интересная задачка

А вот мой вариант...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35820375
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_slan_, твою формулу можно немного упростить (см. выделенный кусок)
{=ИНДЕКС(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(Лист1!$A$1:$A1;dan)>0;"";dan);СТРОКА(dan));ЦЕЛОЕ(СЛЧИС()* (60-G1) +1))}
Это формула для ячейки А2
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35820802
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik, скажу более - ее еще можно упростить:
=НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(Лист1!$A$1:$A1;dan)>0;"";dan);ЦЕЛОЕ(СЛЧИС()*(61-СТРОКА())+1))


я просто делал как когда-то уже, только теперь все формулами. Особенно думать было некогда сегодня днем - работа-работа.

А вот идя домой, я немного помозговал..

и пришел еще к двум формулам - во вложении
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35820816
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik, посмотрел твой способ - в общем мы пришли к одному выводу :)

ну а как тебе мой вторй?

третий - так, для разнообразия :)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35821413
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, и второй и третий - здорово !

Я тоже по дороге домой подумал, что можно сделать на основе РАНГ(), но не добрался до компа
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35824863
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-Nik,
а вот решение задачки нахождения суммы элементов
только не полное - только нахождение первого подходящего значения, да и без гарантии, что лучших комбинаций не найдетя. Но для начала..
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35826724
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача 416
В ячейке есть дата (например, сегодняшняя - 19.02.09), необходимо в соседней ячейке получить количество четвергов с начала текущего месяца и по сегодня как это лучше всего сделать?
(имеется ввиду тех же дней недели, что и указанная дата)

С помощью формулы, конечно.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35827327
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilK,
ЦЕЛОЕ(ДЕНЬ(C3)/7-0,01)+1 ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35827551
DaniilK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, похоже то, что надо
а принцип можете объяснить?
почему эта формула вообще возвращает корректный результат?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35827853
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ещё можно так:
=СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ИНДЕКС(A:A;ДАТА(ГОД(C3);МЕСЯЦ(C3);1)):ИНДЕКС(A:A;C3));2)=ДЕНЬНЕД(C3;2)))
где исходная дата лежит в ячейке С3
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35829526
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilK, а почему она не должна возвращать?


считаете количество недель(7мидневных отрезков) с начала месяца, если количество ровное(7ечисло, 14е, 21е, 28е), то надо брать на 1 меньше, для этого и отнимаем 0,01(0,01<1/7, поэтому на другие числа это не повлияет)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35848550
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выкладываю свой вариант перебора решений при поиске элементов, составляющих заданную сумму..
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35852203
Фотография Wordex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вах, только набрел на этот замечтательный форум, и на эту прекрасную тему.
Никогда не встречал олимпиад по Экселю. Наверняка должны быть.
Формула про четверги прекрасная, компактная, но труднопостижимая.
Это мне напомнило одну из самых мудреных формул, которые мне приходилось встречать.
Формула расчета даты Пасхи для любого года.
Задача не получить её, а попытаться понять, как она работает:
=FLOOR("5/"&DAY(MINUTE(cellYear/38)/2+56)&"/"&cellYear,7)-34
где cellYear - ячейка куда вводим год. Формула возвращает значение даты.
ну, или еще сразу отформатировать, но это уже мелочи:
=TEXT(FLOOR(DATE(cellYear,5,DAY(MINUTE(cellYear/38)/2+56)),7)-34,"dd-mmm-yyyy")
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35856169
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обнаружил ошибку в программе перебора, ну и пригладил малость
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35856175
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_вот..
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #35857025
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще варианты..
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36275919
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Родилась ещё одна задача со звёздочкой. Я бы даже сказал, что с двумя звёздочками, а то и со всеми тремя
Тут сложность заключается в двух моментах: первое - непосредственно получить результат, второе - получить его за как можно более короткое время.
Условие задачи тут. Только смотрите осторожно, а то можно мозг сломать
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36276347
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТут сложность заключается в двух моментах: первое - непосредственно получить результат, второе - получить его за как можно более короткое время.

Выложите, пожалуйста, словарь. И не совсем понятно, каким образом получить результат.
Здесь написано что игроки ходят по очереди, как Вы хотите это реализовать в экселе? Или нужно просто заполнить матрицу максимально длинными словами, при этом соблюдая правила построения слов(начинать строить слово со смежной ячейки к любой заполненнной ячейки матрицы и двигатся как по вертикали так и по и горизонтали)? Я никогда не играл в эту игру, возможно не правильно себе представляю процесс...
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36277463
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Требуется составить не полноценную игру, а электронный помощник для одного из играющего. Если зайти в свою почту на mail.ru, появится возможность зайти на вкладку "Игры". Там эта игра есть. Там же можно уточнить правила и попробовать поиграть с виртуальным соперником. Предлагаю сделать копию игрового поля в экселе и синхронно его вести. Компьютер испольозовать в качестве помощника :-) Если кому по душе ближе другой язык программирования, можно выбрать его, совсем не обязательно это делать в экселе.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36277507
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А словарь ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36278486
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, такой
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36279694
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня уже получилось !
Результатом доволен !

Ну что, тогда пока свой вариант не засвечиваю... ждём решения от кого-то ещё, а потом сравним
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36283025
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, выкладываю свой вариант. Кому понравится - можете написать сюда пару реплик

Скачать файл
Единственное, что неудобно - сложно подключать новый словарь либо добавлять слова в словарь. Надо будет подумать над этим как-то.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36289919
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Хорошо получилось :)... Даже подсвечивается расположение... Теперь первое место на mail.ru ? ...
Какая логика решения была ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313162
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Захотелось сделать более-менне полноценную версию с обновлением словаря.
Работу следует начать с листа "Новый словарь". Кликаем в поле "Сkick me ..." и выбираем файл словаря, который может быть либо текстовый, либо экселевский. Затем нажимаем кнопку "Обновить словарь". Процесс обновления контролировать в статус-баре. После обновления сохраните файл, дабы не проделывать эту процедуру при каждом открытии программы.
Теперь программа готова к работе.
После некоторых оптимизаций удалось в несколько раз увеличить скорость работы программы. Теперь на моём компьютере очень редко, когда программа "думает" более 1 секунды
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313169
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Словарь (ч.1)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313171
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Словарь (ч.2)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313205
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mХорошо получилось :)... Даже подсвечивается расположение... Теперь первое место на mail.ru ?
Ага, вот сегодня, наконец, закончил то, что хотел... и оптимизацию, и словарь... Прихожу на работу, а нам позакрывали порты и теперь игры на меил.ру не идут ! И произошло это именно сегодня!
Так что, уже не получится быть впереди планеты всей
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313610
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A-Nik, вот хотел полюбопытствовать, так на Dim fd As FileDialog ругается... (сразу при загрузке словаря).
Не могли бы Вы дать код по этому типу, пожалуйста.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313725
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже не знаю, что Вам посоветовать! Код работы с FileDialog взял со справки. Нажмите на этом слове Ф1 и почитайте, может что-то найдёте... Но у меня на работе, дома, у знакомых эта версия пошла без проблем. Какая у вас версия офиса ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313771
qwrqwr_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121на Dim fd As FileDialog ругается.должна быть подключена библиотека Microsoft Office 11.0 Object Library (для 2003-го)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36313959
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я по старинке, всюду на 2000 сижу - дома русский, на работе английский... Наверное пора хоть дома переходить, но русского посвежее нет... Так что мне похоже не запустить - нет такой библиотеки, только 9.0. Но всё равно спасибо.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36314865
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Краткое" описание работы программы.

Основная сложность задачи заключается в том, чтобы добиться максимальной скорости работы программы. Быстродействие для этой задачи определяется двумя моментами: количеством перебираемых вариантов и размером словаря.
Размер словаря можно сократить, если разложить его на двумерный массив, где в первом столбце будут идти слова из 2х букв, во втором – из 3х и т.д. до определённого предела (скажем, делать это до 14 символов не имеет смысла, поскольку таких слов оч. мало.). До скольких букв раскладывать так словарь определяется ячейкой [SymbNumb]. Даже 10 букв – это много для данной задачи. Слова, длиннее 8 символов мне ещё ни разу не попадались во время игры.
Кроме того, для каждого такого столбца можно построить таблицу индексов по двум первым буквам слова, в которой будет храниться смещение до слов, начинающихся на эти две первые буквы и перебирать уже не во всём столбце, а только там, где лежат слова, начинающиеся на эти 2 первых символа. при чём, доступ к индексной таблице осуществляется не поиском первых двух символов в таблице, а вычислением смещения математическим путём: напр. если нужно найти слова, начинающиеся на "ба" (балда), достаточно обратиться к ячейке со смещением (Asc("б") - 224) * 32 + Asc("а") – 223 и прочитать там число, которое будет являться смещением в словаре до слов, начинающихся на "ба". Словарь просматривать только до строки, где начинаются слова на "бб".
От буквы "ё" пришлось избавиться путём замены "ё" на "е", поскольку её код лежит совсем в другом диапазоне.

Количество перебираемых вариантов можно значительно сократить, если не перебирать слова, которые начинаются на несуществующие начальные комбинации букв. Т.е. при каждом добавлении очередной буквы во время перебора производится проверка есть ли в словаре слова, начинающиеся на данную комбинацию букв. Для этого словарь дополняется не только готовыми словами, а и всеми словами, начинающимися на заданную последовательность. Например, в 4м столбце (для слов из 5 букв) имеются такие слова: балбе, балда, балер, балет, балка, балко и т.д. Для тех слов, которые состоят всего из 5, рядом в столбце будет стоять "1". Если это только начальные символы – единицы не будет. Т.о., если в соответствующем столбце не найдётся слов, начинающихся на заданные нач. буквы, развитие такого направления не осуществляется и эта буква отбрасывается.
Если же во время просмотра столбца (определённого его диапазона) в смежных столбцах находились единицы, то такие слова сразу же записывались в массив, как готовые варианты слов для последующего вывода на лист.
Если кому что непонятно со словарём, то достаточно просто в пошаговом режиме пройтись по процедуре обработчика события кнопки "Обновить словарь".

Добавлять новые слова в словарь оч. просто – достаточно просто дописать их в самый низ словаря (столбец "В" лист "Новый словарь") и заново перестроить словарь кнопкой "Обновить словарь".

Если у кого возникли ещё какие-либо вопросы – с удовольствием отвечу.
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36314889
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
A-NikПрихожу на работу, а нам позакрывали порты и теперь игры на меил.ру не идут !
Ну так Вы из дома... . Как там в Житомире ?
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36314930
A-Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mНу так Вы из дома... . Как там в Житомире ?
А мне, чем самому играть в эту игру, более интересно сделать подобную программку и наблюдать, как мои коллеги и друзья чувствуют себя непобедимыми, обыгрывая всех и вся! , получая от этого удовольствие и приговаривая: "мля...я с твоей прогой реальный ГЕНИЙ!!!!!!!!!!!!!!!" (цитата из аськи)
...
Рейтинг: 0 / 0
Задачи со звездочкой * (только для настоящих профи)-2
    #36314946
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
:)
...
Рейтинг: 0 / 0
142 сообщений из 142, показаны все 6 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Задачи со звездочкой * (только для настоящих профи)-2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]