|
|
|
Задачи со звездочкой * (только для настоящих профи)-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 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=35601987&tid=2178833]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 316ms |

| 0 / 0 |
