|
|
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Чтобы не наращивать итак уже довольно "длинную" тему "Задачи со звездочкой * (только для настоящих профи)" создаю такую же, но цифрой 2. Задача 345 В файле приведен пример, когда требуется по части, которая точно присутствует в одной из ячеек нужного диапазона, вернуть значение этой ячейки. Это показано на примере стихотворения Пушкина. На листе "стих" бессмертное произведение поэта, а на листе "куски" - несколько начальных слов (или даже слова оборваны). Необходимо формулой воссоздать стих в первозданном виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 15:46 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 16:49 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Спасибо большое! Не знал, что и ВПР работает с конструкцией "*"&B2&"*" ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 17:38 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Вы будете смеяться, но я все-таки решил сам немного раньше, однако формула получилась ужасная! =ИНДЕКС(стих!$B$2:$B$21;СУММПРОИЗВ(СТРОКА(стих!$B$2:$B$21)*ЕЧИСЛО(ПОИСК(B2;стих!$B$2:$B$21;1)))-СТРОКА(стих!$B$1);1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 17:39 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0) KL [MVP - Microsoft Excel] Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений "Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный... Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала... Почему? А если бы их было эдак с 1000 штук? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2008, 22:00 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
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)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2008, 22:14 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Dan-K KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0) KL [MVP - Microsoft Excel] Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений "Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный... Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала... Почему? А если бы их было эдак с 1000 штук? А вот тут что-то с обновлением у тебя. Такой проблемы воспроизвести не удалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2008, 22:15 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Сервис - параметры - вычисления - автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2008, 22:18 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DeggasadНе знай я про ВПР() сам бы так сделал. Оно ещё не известно как лучше? ВПР() однозначно быстрее, возможно в разы :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 00:40 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL) DeggasadНе знай я про ВПР() сам бы так сделал. Оно ещё не известно как лучше? ВПР() однозначно быстрее, возможно в разы :-) Верю, но ведь шанс был, что неточный поиск как нибуть там тормозит вычисления или какая-нибуть ещё мулька! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 01:40 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Deggasad Dan-K KL (XL)=ВПР("*"&B2&"*";стих!$B$2:$B$21;1;0) KL [MVP - Microsoft Excel] Ввел формулу в файл, скопировал в низ и получил столбец из одинаковых значений "Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный, Я памятник себе воздвиг нерукотворный... Пока каждую ячейку через двойной клик -enter не "обновил" - формула не заработала... Почему? А если бы их было эдак с 1000 штук? А вот тут что-то с обновлением у тебя. Такой проблемы воспроизвести не удалось Все , нашел. Файл от DaniilK был с "ручным пересчетом"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 21:33 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
=ВПР("*"&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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2008, 20:47 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
=ПОИСК("(кор=*шт)";A1;1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2008, 00:59 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
а смысл данной операции в чем (в контексте предыдущей задачи)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2008, 14:54 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)а смысл данной операции в чем (в контексте предыдущей задачи)? Подозреваю, что вопрос был не ко мне. И снова задачка Задача 351 В файле-примере в столбце "отбор по условиям" формула возвращает 0 или 1 в зависимсоти от того удовлетворяют ли значения в текущей строке заданным условиям. Все прекрасно работает, однако, хотелось бы добиться универсализации формулы. Т.е. если условие "отключено" (ячейки C3:E3), то оно бы нивелировалось и в формуле и она продолжала бы корректно работать. Подскажите идеи как такое сделать? (если это, вообще, возможно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2008, 16:08 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)а смысл данной операции в чем (в контексте предыдущей задачи)? =ПОИСК("(кор=*шт)";A1;1) - очень помогло для автоматизации ПРИЕМКИ И ВВОДА крепежа в 1С и вспомогательную бухгалтерию в Excel - Постоянно приходят накладные по крепежным изделиям на 300-400 позиций а ИХ названия не совпадают с НАШИМИ да еще и меняются постоянно и отписывают то штуками то упаковками, то килограммами. Менеджеры по нескольку дней разбираются с одним приходом... В итоге сделал мегаформулку учитывающую все "извращения" бухгалтерии поставщиков для приведения ИХ накладной в НАШУ накладную с автоматическим переводом упаковок в штуки... А так как извращения в каждой бухгалтерии свои, то для других поставшиков приходится писать то же самое, но чуть-чуть другое... Спасибо за помощь и идею... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 06:38 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
По простому так: =--(И(ЕСЛИ($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)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 06:40 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
не работают эти формулы: =--(И(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. Однако этого не произошло... Попробуйте и убедитесь сами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 11:03 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilK...По идее формулы должны были проставить единицы напротив всех строк где область совпадает с выбранной в E2. ....Да, я не верно понял условия задачи. Прошу простить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 12:20 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Тогда подойдет вот это: =--(И(ЕСЛИ($C$3=1;C7=$C$2;ИСТИНА);ЕСЛИ($D$3=1;D7=$D$2;ИСТИНА);ЕСЛИ($E$3=1;E7=$E$2;ИСТИНА))) . Идея все таже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 12:25 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Да, теперь работает А по проще и/или универсальнее никак нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 14:32 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilKДа, теперь работает А по проще и/или универсальнее никак нельзя?А что значит прощщще??? И универсальнее??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 14:39 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Сергей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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2008, 23:43 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
при чем тут баловство? :) тут рациональность! Ведь, согласитесь, приятно, когда формула в 2 раза короче. В реальных данных условий намного больше и формула с ЕСЛИ() выросла бы в длиннющую строку. Предложенные же Deggasad формулы намного удобнее в работе! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 10:40 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
продолжение следует.. А как быть, если в условии присутствует больше либо равно и меньше либо равно (которое нужно отключать одним нулем), а также, если условия "учитывать ли" разорваны один или нескллько раз одной или более пустых либо не имеющих отношения к условию ячеек? Пример прилагается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 16:44 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Если нужно проще и универсальнее то так (см. приложение) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2008, 18:45 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)Если нужно проще и универсальнее то так (см. приложение) KL [MVP - Microsoft Excel] Да только, к сожалению, не формулами, а макросами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 13:53 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
есть ячейки с текстом, пример: 1, вода 2 тепло 3. Воздух Необъодимо формулой определить порядковый номер первой русской буквы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 13:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
по-моему уже не раз обсуждалось.. {=МИН(ЕСЛИ(ПСТР(A1;СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));1)>="А";СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));99999))} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 14:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
под первой русской буквой понимается не "А"! :) а любая буква русского алфавита! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 16:24 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
сорри.... формула делает то что надо... но как?? поясните, плиз, принцип! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2008, 16:42 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
_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 ячейках) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2008, 15:20 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Как формулой найти последний символ "\" в таких строках: Код: plaintext 1. 2. 3. количество слешей может быть произвольным... Задача: разделить путь к файлу на путь папки и сам файл. или только макросом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 09:45 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Сергей06Как формулой найти последний символ "\" в таких строках: Код: plaintext 1. 2. 3. количество слешей может быть произвольным... Задача: разделить путь к файлу на путь папки и сам файл. или только макросом? Например так =ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 12:32 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Или так {=ПСТР($A$1;МАКС(--((ПСТР(A1;СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A$1)));1)="\")*СТРОКА($A$1:ИНДЕКС($A:$A;ДЛСТР($A$1)))))+1;ДЛСТР($A$1))} вводится через <Ctrl>+<Shift>+<Enter> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 12:48 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Deggasad[quot Сергей06] Например так =ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))) Точно. Видел же я уже такое решение :-) Только не разобрался сразу, а сейчас вот понадобилось. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 13:19 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Deggasad Сергей06Как формулой найти последний символ "\" в таких строках: Код: plaintext 1. 2. 3. количество слешей может быть произвольным... Задача: разделить путь к файлу на путь папки и сам файл. или только макросом? Например так =ПРАВСИМВ(A1;ДЛСТР(A1)-ПОИСК("|||";ПОДСТАВИТЬ(A1;"\";"|||";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))) Еще: =ПСТР(A1;НАЙТИ("|";ПОДСТАВИТЬ(A1;"\";"|";ДЛСТР(A1)-ДЛСТР(ПОДСТАВИТЬ(A1;"\";""))))+1;30000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2008, 18:52 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Или так: {=ПСТР(A1;1+ПОИСКПОЗ(2;ЕСЛИ(ПСТР(A1;СТРОКА(ИНДЕКС(A:A;1):ИНДЕКС(A:A;ДЛСТР(A1)));1)="\";1));3000)} Пусть не самый быстрый, но отличный...... (от других). Прям как АО "МММ" ! P.S. Что-то не смог я залогиниться под своим старым ником..... Пришлось создать новый... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2008, 16:04 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik Пусть не самый быстрый, но отличный...... (от других). Прям как АО "МММ" ! Нееееее, так Хопёр-инвест себя позиционировал :-) Честно, не понял второй пример Deggesаdа и пример A-Nikа Как вы по буквам распределили строку? Я также хотел сделать сначала, но не получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2008, 16:48 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ну здрасьте ! Говорили-балакали, сіли та заплакали! Ты про назначение клавишы Ф9 в экселе слышал ? Так вот, для разбора и отладки формул это незаменимая вещь! В офисах свыше 2000 имеется подсветка синтаксиса формул. Ставишь курсор в часть формулы, которая тебе непонятна. При этом в подсвеченной формуле какой-то из параметров выделится жирным шрифтом. Щёлкаешь на этом параметре и у тебя выделяется сразу весь аргумент функции (который чаще всего составной). Затем нажимаешь Ф9 и смотришь что получается в результате выполнения выделеного куска формулы. Разбирать формула проще всего с середины от более простых выражений к более сложным. Вот только после этого задавай вопросы более конкретных непонятных тебе выражений, а не сразу спрашивай как работает формуа :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2008, 17:13 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik1. Про этот способ просмотра вычислений формулы спасибо. я пользовал "вычислить формулу" на панели "зависимости". Не всегда это удобно. 2. Я не спрашивал (как мне до сих пор думается) как работает вся формула. Буду разбираться как в массив попали отдельные символы одной строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2008, 18:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ну что, разобрался ? Помощь нужна ? ;-) Пока Сергей06 думает, у меня появилась очередная задача, с которой справиться не удалось! :(( Есть массив N x M. Надо получить массив сумм столбцов массива :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 10:22 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikНу что, разобрался ? Помощь нужна ? ;-) Пока Сергей06 думает, у меня появилась очередная задача, с которой справиться не удалось! :(( Есть массив N x M. Надо получить массив сумм столбцов массива :-) Массив в диапазоне или получен формулой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 14:30 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Да, массив в диапазоне. Но не против посмотреть и для случая массива в формуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 15:26 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Вот примеры на скорую руку KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 16:11 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Задача 361 Есть формула с использованием СУММПРОИЗВ(), которая занимается тем, что подсчитывает на основании нескольких условий. Хочется упростить формулу в части ЕСЛИ($D$119=0;--(ДЛСТР($D$3:$D$116)>0);--($D$3:$D$116=$D$118)). Смысл в том, что если в D119 ноль, то условие $D$3:$D$116=$D$118 никак не принималось бы во внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 16:17 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
думал на тему --((--($D$3:$D$116=$D$118))^$D$119), но так не работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 16:24 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
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)} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 16:33 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Спасибо Большое!!! а какая формула предпочтительнее по скорости работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 17:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilKСпасибо Большое!!! а какая формула предпочтительнее по скорости работы? Вторая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 18:11 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL), спасибо!!! А я всё вокруг да около бродил...... :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 18:46 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Тут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2008, 19:09 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Даю подсказку: я не зря выше спрашивал как получить строку сумм столбцов массива... ;-) Это, так сказать, основная идея... Технику же выделения ячеек (столбцов) можно посмотреть тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2008, 02:37 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikТут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-) Полного решения самой задачи всё равно не получится, ибо удалять-то формулой как? Предлагаю немного переформулировать задачу: "Получить список незаполненных столбцов массива (диапазона)" В виде диапазонов ( "B:B,D:D,F:G,I:I" или "B1:B23,F1:F23" ), или по-другому, главное - чтобы затем полученное значение позволило удалить данные диапазоны одним методом какого-либо объекта. Исходим из того, что на листе - таблица с данными A1... (с подписями слева и сверху), кроме таблицы, на листе присутствуют другие заполненные ячейки (границы таблицы желательно определять "по концу" подписей строк и столбцов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2008, 12:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
AndreTMA-NikТут некоторые знают как я не люблю циклы в ВБА...... Посему предлагаю решить эту задачку вообще без цикла! :-) Полного решения самой задачи всё равно не получится, ибо удалять-то формулой как? Предлагаю немного переформулировать задачу: "Получить список незаполненных столбцов массива (диапазона)" В виде диапазонов ( "B:B,D:D,F:G,I:I" или "B1:B23,F1:F23" ), или по-другому, главное - чтобы затем полученное значение позволило удалить данные диапазоны одним методом какого-либо объекта. Исходим из того, что на листе - таблица с данными A1... (с подписями слева и сверху), кроме таблицы, на листе присутствуют другие заполненные ячейки (границы таблицы желательно определять "по концу" подписей строк и столбцов). Легко! Но будут ограничения по двум параметрам: - длина текстовой строки как аргумента Range - кол-во одновременно удаляемых областей Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2008, 17:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
AndreTMПолного решения самой задачи всё равно не получится, ибо удалять-то формулой как? Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2008, 18:04 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла " Ну, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-) А если такие варианты: "Получить список незаполненных столбцов массива (диапазона)" 1) VBA - без цикла. 2) Формулой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 03:02 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
AndreTMKL (XL)Полное решение задачи согласно ее постановке не в отказе от макросов и удалении столбцов формулой, а в том, чтобы "...решить эту задачку вообще без цикла " Ну, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-) А если такие варианты: "Получить список незаполненных столбцов массива (диапазона)" 1) VBA - без цикла. 2) Формулой. А стандартные функции экселя типа countif, counta и пр. разве не на циклах сделаны? :) Хоть и скрыты от кодеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 09:39 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
nporaMepА стандартные функции экселя типа countif, counta и пр. разве не на циклах сделаны? :) Хоть и скрыты от кодеров. На циклах, на чем же еще. Но суть именно в том, что не на VBA, а на C и быстрее во много раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 11:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
AndreTMНу, это-то я понял. А вот если фильтра нет? Не буду же я накладывать фильтр только для того, чтобы анализировать данные "без цикла" :-) В данной задаче нахождение исходного диапазона вторично. Способов масса и они все описаны в этом форуме. Фильтр был выбран мной для сокращения времени на написание примера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 11:39 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А вот мои способа решения этой задачи....... ;-);-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 12:29 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ну что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек. Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-) Желаю успехов ! ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 17:46 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikНу что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек. Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-) Желаю успехов ! ;-)) Только не говори, что ты сделал это так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Во-вторых, ограничение в 255 знаков для текстовой строки как параметра Range() В-третьих, ограничение в ~8.192 несмежных областей для SpecialCells ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 20:47 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikНу что, друзья, тогда держите следующую задачу, ещё более интересную!!! :-))) Давно хотел её сделать, но не было никаких идей! А вот сейчас придумал ! И так, требуется сделать инвертирование выделения :-)) Разумеется, без единого цикла на ВБА :-)))) Количество областей - практически любое (в разумных пределах). Границы общей области инвертирования вычислить по текущим выделениям - т.е. вычислить из всех выделений самый левый исп. столбец, самую верхнюю исп. строку, самый правый охваченный столбец и самую нижнюю охваченную выделением строку. Разрешается использовать любое число промежуточных ячеек. Задачи, тут две - без цикла на ВБА перебрать все выделения, найти их границы и определить общую область и вторая - проинвертировать выделения в полученной области. Кто решит хоть одну из этих задач без цикла - тоже выкладывайте :-) Желаю успехов ! ;-)) Почему-то мне кажется что первая часть не очень сложная (хотя может и ошибаюсь, но сейчас некогда подумать) А касательно второй части вопроса - другого варианта сделать это без цикла, кроме того что описан тут я не придумал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 22:46 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Вариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 09:55 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Вот относительно "дешевый" вариант нахождения общей области выборки, который пришел мне на ум сегодня утром: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 11:35 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Да, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 12:20 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikДа, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }... Или в (...): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Кстати, идея родилась именно с {...}, но перед отправкой в форум я счел это излишним, забыв об ограничении кол-ва параметров :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 12:51 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Всё-таки, ограничения всё равно остались те же..... :-( (для 2003 офиса). Проблема в том, что Selection.Address при достаточно большом количестве выделении выдаёт не полный набор адресов. Так, примерно 20-25 отдельных выделений и длина строки Selection.Address замирает, не растёт, при добавлении новых выделений. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 13:24 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А вот вариант, который у меня был изначально.... :-)))))))) Тоже не учёл, что Selection.Address не даст полный перечень диапазонов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 14:38 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Фух! Наконец-то выкрутился из ограничения в 255 символов для Range и .Address !!! Правда, появилось другое ограничение - не должно быть никаких данных и форматирования в ячейках свыше 128 столбца и само выделение тоже не должно захватывать 128 столбец! :-((( Предлагаю взглянуть, что у меня получилось. В файле два способа. Первый не работает для сложных выделений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2008, 11:35 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ну что, господа, готовы продолжить ? :-)) Домашнее задание: решить эту задачу без единого цикла на ВБА! Рассматриваются такие ситуации: Вариант 1: Подразумевается, что в искомый цвет окрашена либо вся строка, либо только определённый столбец (т.е. знаем где искать). Вариант 2: Расположение ячейки, окрашенной искомым цветом, в строке неизвестно (либо может быть разным) А теперь, к снаряду!! (а точнее, к клавиатуре!) :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2008, 16:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
И, наконец, Вариант 3: Найти и выделить не просто строки, а все ячейки, окрашенные в искомый цвет, без единого цикла на ВБА!!! У меня получилось !!!!! При чём двумя способами!!! Конечно, без кучи вспомогательных ячеек не обошлось, но ради такого дела - ничего не жалко...... !!! Любо глянуть! Во мгновение ока находится практически любое количество искомых элементов! (предполагается, что таблица (диапазон), где искать, заранее известен) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 18:04 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Кстати, один из методов решения варианта 3 невероятно простой! В нём нет ни единой формулы! Только обычные довольно часто используемые возможности экселя! Так что, рекомендую подумать над задачкой всем! Вы будете смеяться, когда увидите насколько он прост! А решив вариант 3, с лёгкостью решите первый и второй! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 19:11 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikФух! Наконец-то выкрутился из ограничения в 255 символов для Range и .Address !!! Правда, появилось другое ограничение - не должно быть никаких данных и форматирования в ячейках свыше 128 столбца и само выделение тоже не должно захватывать 128 столбец! :-((( Предлагаю взглянуть, что у меня получилось. В файле два способа. Первый не работает для сложных выделений. а вот разбирали похожую тему - из предложенных способов два первых по скорости - с циклами.. http://www.sql.ru/forum/actualthread.aspx?tid=583442&pg=1 конечно, не все условия были протестированы.. но ограничений нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2008, 22:37 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)A-NikДа, действительно, не плохо.... :-) Только его надо чуток подправить, а то аргуметов у МАКС() и МИН() может быть только 32, на сколько я понимаю (в офисах до 2003). Просто вложить полученное в { }... Или в (...): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Кстати, идея родилась именно с {...}, но перед отправкой в форум я счел это излишним, забыв об ограничении кол-ва параметров :-) Несмотря на то, что ограничения все те же, я тут готовил курс по формулам Excel для продвинутых пользователей, и меня вдруг осенило (наш человек силен-таки задним умом): Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 03:06 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А как же мой пост от 14.10.2008 DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 03:10 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DeggasadА как же мой пост от 14.10.2008 DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки Код: plaintext Намана!!! Слона-то я и не заметил. А что же ты молчал, когда мы продолжали маятся дурью сильно после твоего ответа :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 03:14 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
KL (XL)DeggasadА как же мой пост от 14.10.2008 DeggasadВариант решения первого подвопроса, обладает уже описанными выше недостатками на ограничение текстовой строки Код: plaintext Намана!!! Слона-то я и не заметил. А что же ты молчал, когда мы продолжали маятся дурью сильно после твоего ответа :-) Ввиду имеющегося недостатка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 03:23 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikКстати, один из методов решения варианта 3 невероятно простой! В нём нет ни единой формулы! Только обычные довольно часто используемые возможности экселя! Так что, рекомендую подумать над задачкой всем! Вы будете смеяться, когда увидите насколько он прост! А решив вариант 3, с лёгкостью решите первый и второй! :-) А вот было время, когда не было Офиса с VBA... SQLServer приравнивался к мэйнфремам... Вообще, не было Win... Была, конечно, но NT3, Win3... И никто не задумывался над "один из методов решения варианта 3 невероятно простой". Забивали на это. Ибо уже тогда имелись практически стандарные решения алгоритмов... "Лучшее- враг хорошего" - первый принцип для программиста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 08:36 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
AndreTM"Лучшее- враг хорошего" - первый принцип для программиста...Что касается меня - то я не согласен относительно этого принципа для программиста :-) А теперь вернёмся к нашим баранам :-) Сделал я тремя способами поиск определённого цвета в заданном диапазоне :-) А потом решил посмотреть насколько мои способы "обгоняют" варианты с циклом. И какого же было моё удивление, когда я увидел, что перебор по всем ячейкам диапазона зачастую оказывается даже быстрее Главное - выявить и исключить из тела цикла наиболее ресурсоёмкую операцию. В данном примере самая ресурсоёмкая операция оказалась Union(), как ни странно! :-) Если выбрать поиск чёрного цвета, вы сразу ощутите разницу в скорости процедур с Union() и без неё (примерно в 10 раз )! Предлагаю взглянуть что у меня получилось! :-) Вывод: В данной задаче использование безциклового поиска формата оказалось неэффективным! . Наиболее эффективно работает процедура поиска цвета на основе метода Find() без использования Union(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2008, 18:06 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ну и, наконец, четвёртый способ без цикла, который обогнал по скорости все другие имеющиеся способы !!! :-)) К тому же, он ещё и самый простой! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2008, 16:21 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikAndreTM"Лучшее- враг хорошего" - первый принцип для программиста...Что касается меня - то я не согласен относительно этого принципа для программиста :-) ... когда я увидел, что перебор по всем ячейкам диапазона зачастую оказывается даже быстрее Главное - выявить и исключить из тела цикла наиболее ресурсоёмкую операцию... И ви мне будете доказать, шо я не прав? И не надо кричать насчёт неверного квотирования - смысл был ясен всегда. Я говорю об известных алгоритмах. Зачем придумывать (впрочем, конечно, если до вас никто на языке "хума-кику-бос" не программировал - то да, конечно, как круто будет адаптировать сортировку методом пузырька... Или настрадать кучку кода, который уткнётся в предел уже на пятитысячной строке таблицы... Или не проверить граничные значения...) что-то своё - если можно просто объяснять с важным видом всем известные истины... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2008, 09:34 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
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 и названия именованной формулы. Не уследил :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2008, 10:54 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Прислали мне интересный файлик...... Как сделано - не знаю... :-) Повторить не удалось... :-) Может кто тоже хочет попробовать "раскусить" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2008, 17:08 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik, Возможно этот файл сделан не в Экселе, а в другой программе, например, в Опен Офисе :-) /topic/571206&pg=1&hl=%f3%e4%e0%eb%e8%f2%fc+%e8%ec%ff В этом топике обсуждались недопустимые имена в файле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2008, 18:19 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
а я уверен, что этот файл сделан в Экселе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 10:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilK, Точно :-) Вот сделал по трем столбцам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 11:24 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Гыыы, действительно ! А ларчик просто открывался Сначала диапазон указываешь на один столбец, задаешь его в Данные/Проверка/Список, а затем указываешь этот диапазон (в данном случае "Организация_Менеджер") на два и более столбцов :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 11:53 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikГыыы, действительно ! А ларчик просто открывался Сначала диапазон указываешь на один столбец, задаешь его в Данные/Проверка/Список, а затем указываешь этот диапазон (в данном случае "Организация_Менеджер") на два и более столбцов :-) Принцип тот же что и в трюке с с именами листов в именованных формулах. 1) длина именованных формул ограничена 255-ю знаками. 2) имена листов автоматически включаются во все ссылки (кроме сылок типа "!A1") 3) если по вине имен листов лимит превышен и имя не создается... а. сокращаем имена листов до, скажем, "1", "2", "3" и т.д. б. создаем именованную формулу в. возвращаем листам их прежние (длинные) имена г. именованная формула работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 15:00 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Задача на макрос "Три слова" В ячейках B2:B5 находится пример текста, который необходимо привести к виду, пример которого показан в C2:C5. Правила, по которым сформирован текст в C2:C5: 1 от первоначального текста должно остаться не более 3-х слов 2 должны остаться только слова начинающиеся с большой буквы 3 словом считатьется неразрывная последовательность текстовых символов (знаки припинания, цифры и другие символы игнорировать) состоящая не менее чем из 3-х символов в ячейках могут встречаться только русские буквы, цифры, знаки припинния, кавычки, скобки и пр. файл прилагается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2009, 12:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Парсить строку по пробелам, счётчик на заглавные буквы не более 1 в слове, если найденных таким образом слов Ю 3? то выход из цыкла. Не так сложно, только от кавычек надо избавляться... Я думаю, по ascii можно принимать в рассчёт только буквы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2009, 17:05 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
*цикла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2009, 17:05 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
к сожалению, я в ВБА не разбираюсь вообще, но оч. надеюсь, что кто-то откликнется и поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2009, 17:15 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
забыл добавить: слово не всегда может заканчиваться на пробел. конец слово это любой символ - не буква ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2009, 17:18 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Слова должны разделяться пробелами. Иначе никакой макрос не поможет :) А всякие там ковычки - потом поудалять, просто сделав небольшой справочник того, что надо искать и заменять на пустое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2009, 10:09 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
поудалять вручную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2009, 13:54 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilKпоудалять вручную? да вот ещё! Сверять посимвольно со справочниом ненужных символов программно и всё. Вам на форум vba надо. ща просто работы много, не успеваю вам помочь. но это очень просто. нужно только время... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2009, 14:08 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2009, 14:53 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Сергей06, спасибо, интересные примеры но, все-таки, это не то :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2009, 15:33 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Кстати, а что делать, например, с записью [ЧП Ян Майорович Арлазоров] или [ООО "УМ"]? По заданным правилам формулы урежут смысловые значения напрочь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2009, 19:56 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
это допустимо, ибо таких вариантов как вы привели будет 1-2, поэтому их можно игнорировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 11:08 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Если основной акцент сделать на формулы, то можно так (см. вложение). Однако для работы этого варианта надо предварительно заменить все "." на " ." (пробел-точка). И так для всех возможных символов, на которые может закончиться слово. Поиск окончания слова на любой символ (не букву) при помощи формул я не осилил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 16:18 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А вот при помощи ВБА всё возможно без особых проблем! Вот ещё 2 варианта: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2009, 16:22 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik , спасибо огромное! то, что надо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 14:04 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
решение задачи перемешивания случайных значений формулами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 15:49 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 17:19 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
_slan_, твою формулу можно немного упростить (см. выделенный кусок) {=ИНДЕКС(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(Лист1!$A$1:$A1;dan)>0;"";dan);СТРОКА(dan));ЦЕЛОЕ(СЛЧИС()* (60-G1) +1))} Это формула для ячейки А2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 17:23 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik, скажу более - ее еще можно упростить: =НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(Лист1!$A$1:$A1;dan)>0;"";dan);ЦЕЛОЕ(СЛЧИС()*(61-СТРОКА())+1)) я просто делал как когда-то уже, только теперь все формулами. Особенно думать было некогда сегодня днем - работа-работа. А вот идя домой, я немного помозговал.. и пришел еще к двум формулам - во вложении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 20:13 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik, посмотрел твой способ - в общем мы пришли к одному выводу :) ну а как тебе мой вторй? третий - так, для разнообразия :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2009, 20:30 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ага, и второй и третий - здорово ! Я тоже по дороге домой подумал, что можно сделать на основе РАНГ(), но не добрался до компа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 10:17 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik, а вот решение задачки нахождения суммы элементов только не полное - только нахождение первого подходящего значения, да и без гарантии, что лучших комбинаций не найдетя. Но для начала.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 14:41 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Задача 416 В ячейке есть дата (например, сегодняшняя - 19.02.09), необходимо в соседней ячейке получить количество четвергов с начала текущего месяца и по сегодня как это лучше всего сделать? (имеется ввиду тех же дней недели, что и указанная дата) С помощью формулы, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2009, 11:45 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilK, ЦЕЛОЕ(ДЕНЬ(C3)/7-0,01)+1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2009, 14:18 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Да, похоже то, что надо а принцип можете объяснить? почему эта формула вообще возвращает корректный результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2009, 15:14 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А ещё можно так: =СУММПРОИЗВ(--(ДЕНЬНЕД(СТРОКА(ИНДЕКС(A:A;ДАТА(ГОД(C3);МЕСЯЦ(C3);1)):ИНДЕКС(A:A;C3));2)=ДЕНЬНЕД(C3;2))) где исходная дата лежит в ячейке С3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2009, 16:29 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
DaniilK, а почему она не должна возвращать? считаете количество недель(7мидневных отрезков) с начала месяца, если количество ровное(7ечисло, 14е, 21е, 28е), то надо брать на 1 меньше, для этого и отнимаем 0,01(0,01<1/7, поэтому на другие числа это не повлияет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 12:45 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
выкладываю свой вариант перебора решений при поиске элементов, составляющих заданную сумму.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2009, 15:32 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Вах, только набрел на этот замечтательный форум, и на эту прекрасную тему. Никогда не встречал олимпиад по Экселю. Наверняка должны быть. Формула про четверги прекрасная, компактная, но труднопостижимая. Это мне напомнило одну из самых мудреных формул, которые мне приходилось встречать. Формула расчета даты Пасхи для любого года. Задача не получить её, а попытаться понять, как она работает: =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") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2009, 07:31 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
обнаружил ошибку в программе перебора, ну и пригладил малость ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2009, 15:17 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
_вот.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2009, 15:19 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
вот еще варианты.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2009, 12:19 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Родилась ещё одна задача со звёздочкой. Я бы даже сказал, что с двумя звёздочками, а то и со всеми тремя Тут сложность заключается в двух моментах: первое - непосредственно получить результат, второе - получить его за как можно более короткое время. Условие задачи тут. Только смотрите осторожно, а то можно мозг сломать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2009, 23:42 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
авторТут сложность заключается в двух моментах: первое - непосредственно получить результат, второе - получить его за как можно более короткое время. Выложите, пожалуйста, словарь. И не совсем понятно, каким образом получить результат. Здесь написано что игроки ходят по очереди, как Вы хотите это реализовать в экселе? Или нужно просто заполнить матрицу максимально длинными словами, при этом соблюдая правила построения слов(начинать строить слово со смежной ячейки к любой заполненнной ячейки матрицы и двигатся как по вертикали так и по и горизонтали)? Я никогда не играл в эту игру, возможно не правильно себе представляю процесс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2009, 10:24 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Требуется составить не полноценную игру, а электронный помощник для одного из играющего. Если зайти в свою почту на mail.ru, появится возможность зайти на вкладку "Игры". Там эта игра есть. Там же можно уточнить правила и попробовать поиграть с виртуальным соперником. Предлагаю сделать копию игрового поля в экселе и синхронно его вести. Компьютер испольозовать в качестве помощника :-) Если кому по душе ближе другой язык программирования, можно выбрать его, совсем не обязательно это делать в экселе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2009, 14:55 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А словарь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2009, 15:04 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Например, такой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 00:40 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
А у меня уже получилось ! Результатом доволен ! Ну что, тогда пока свой вариант не засвечиваю... ждём решения от кого-то ещё, а потом сравним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2009, 14:10 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Ладно, выкладываю свой вариант. Кому понравится - можете написать сюда пару реплик Скачать файл Единственное, что неудобно - сложно подключать новый словарь либо добавлять слова в словарь. Надо будет подумать над этим как-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2009, 17:56 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Хорошо получилось :)... Даже подсвечивается расположение... Теперь первое место на mail.ru ? ... Какая логика решения была ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2009, 10:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Захотелось сделать более-менне полноценную версию с обновлением словаря. Работу следует начать с листа "Новый словарь". Кликаем в поле "Сkick me ..." и выбираем файл словаря, который может быть либо текстовый, либо экселевский. Затем нажимаем кнопку "Обновить словарь". Процесс обновления контролировать в статус-баре. После обновления сохраните файл, дабы не проделывать эту процедуру при каждом открытии программы. Теперь программа готова к работе. После некоторых оптимизаций удалось в несколько раз увеличить скорость работы программы. Теперь на моём компьютере очень редко, когда программа "думает" более 1 секунды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 17:35 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Словарь (ч.1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 17:38 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Словарь (ч.2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 17:39 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
mХорошо получилось :)... Даже подсвечивается расположение... Теперь первое место на mail.ru ? Ага, вот сегодня, наконец, закончил то, что хотел... и оптимизацию, и словарь... Прихожу на работу, а нам позакрывали порты и теперь игры на меил.ру не идут ! И произошло это именно сегодня! Так что, уже не получится быть впереди планеты всей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 17:50 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-Nik, вот хотел полюбопытствовать, так на Dim fd As FileDialog ругается... (сразу при загрузке словаря). Не могли бы Вы дать код по этому типу, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 21:57 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Даже не знаю, что Вам посоветовать! Код работы с FileDialog взял со справки. Нажмите на этом слове Ф1 и почитайте, может что-то найдёте... Но у меня на работе, дома, у знакомых эта версия пошла без проблем. Какая у вас версия офиса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 00:17 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Hugo121на Dim fd As FileDialog ругается.должна быть подключена библиотека Microsoft Office 11.0 Object Library (для 2003-го) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 01:27 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
Я по старинке, всюду на 2000 сижу - дома русский, на работе английский... Наверное пора хоть дома переходить, но русского посвежее нет... Так что мне похоже не запустить - нет такой библиотеки, только 9.0. Но всё равно спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 09:09 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
"Краткое" описание работы программы. Основная сложность задачи заключается в том, чтобы добиться максимальной скорости работы программы. Быстродействие для этой задачи определяется двумя моментами: количеством перебираемых вариантов и размером словаря. Размер словаря можно сократить, если разложить его на двумерный массив, где в первом столбце будут идти слова из 2х букв, во втором – из 3х и т.д. до определённого предела (скажем, делать это до 14 символов не имеет смысла, поскольку таких слов оч. мало.). До скольких букв раскладывать так словарь определяется ячейкой [SymbNumb]. Даже 10 букв – это много для данной задачи. Слова, длиннее 8 символов мне ещё ни разу не попадались во время игры. Кроме того, для каждого такого столбца можно построить таблицу индексов по двум первым буквам слова, в которой будет храниться смещение до слов, начинающихся на эти две первые буквы и перебирать уже не во всём столбце, а только там, где лежат слова, начинающиеся на эти 2 первых символа. при чём, доступ к индексной таблице осуществляется не поиском первых двух символов в таблице, а вычислением смещения математическим путём: напр. если нужно найти слова, начинающиеся на "ба" (балда), достаточно обратиться к ячейке со смещением (Asc("б") - 224) * 32 + Asc("а") – 223 и прочитать там число, которое будет являться смещением в словаре до слов, начинающихся на "ба". Словарь просматривать только до строки, где начинаются слова на "бб". От буквы "ё" пришлось избавиться путём замены "ё" на "е", поскольку её код лежит совсем в другом диапазоне. Количество перебираемых вариантов можно значительно сократить, если не перебирать слова, которые начинаются на несуществующие начальные комбинации букв. Т.е. при каждом добавлении очередной буквы во время перебора производится проверка есть ли в словаре слова, начинающиеся на данную комбинацию букв. Для этого словарь дополняется не только готовыми словами, а и всеми словами, начинающимися на заданную последовательность. Например, в 4м столбце (для слов из 5 букв) имеются такие слова: балбе, балда, балер, балет, балка, балко и т.д. Для тех слов, которые состоят всего из 5, рядом в столбце будет стоять "1". Если это только начальные символы – единицы не будет. Т.о., если в соответствующем столбце не найдётся слов, начинающихся на заданные нач. буквы, развитие такого направления не осуществляется и эта буква отбрасывается. Если же во время просмотра столбца (определённого его диапазона) в смежных столбцах находились единицы, то такие слова сразу же записывались в массив, как готовые варианты слов для последующего вывода на лист. Если кому что непонятно со словарём, то достаточно просто в пошаговом режиме пройтись по процедуре обработчика события кнопки "Обновить словарь". Добавлять новые слова в словарь оч. просто – достаточно просто дописать их в самый низ словаря (столбец "В" лист "Новый словарь") и заново перестроить словарь кнопкой "Обновить словарь". Если у кого возникли ещё какие-либо вопросы – с удовольствием отвечу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 14:08 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
A-NikПрихожу на работу, а нам позакрывали порты и теперь игры на меил.ру не идут ! Ну так Вы из дома... . Как там в Житомире ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 14:17 |
|
||
|
Задачи со звездочкой * (только для настоящих профи)-2
|
|||
|---|---|---|---|
|
#18+
mНу так Вы из дома... . Как там в Житомире ? А мне, чем самому играть в эту игру, более интересно сделать подобную программку и наблюдать, как мои коллеги и друзья чувствуют себя непобедимыми, обыгрывая всех и вся! , получая от этого удовольствие и приговаривая: "мля...я с твоей прогой реальный ГЕНИЙ!!!!!!!!!!!!!!!" (цитата из аськи) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 14:35 |
|
||
|
|

start [/forum/topic.php?all=1&fid=61&tid=2178833]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 506ms |

| 0 / 0 |
