|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.02.2014, 16:35 | #1 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Как исключить ячейку Х из диапазона А
как добавить ячейку (диапазон) Х в диапазон А понятно
set A = Application.Union(A, X) А есть простой способ как ИСКЛЮЧИТЬ ячейку Х из диапазона А. Уважаемые программисты, нужна функция типа Function DeLCeLL(BaseRg as range, Cel2Del as range) as range т.е. на входе диапазон и какая-то ячейка из него, на выходе тот же диапазон, но уже без указанной ячейки (ни сама ячейка на листе, ни данные в ней не должны пострадать). Может есть стандартные средства VBA для этого? Спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
06.02.2014, 19:33 | #2 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Вроде кто-то из гуру делал это, и даже не для одной ячейки. Стандартных средств точно нет.
Если все же делать: можно перебрать области диапазона и проверять intersect с ячейкой. Если пересечения нет, область добавляется к выходному диапазону. Если пересечение есть, ячейка делит эту область на 4 диапазона (в общем случае): сверху, снизу, строка слева и строка справа. Или слева, справа, столбец сверху и столбец снизу - можно выбрать этот вариант, если область имеет .rows.count > .columns.count. Координаты диапазонов вычисляются арифметически, и диапазоны добавляются к выходному диапазону.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
06.02.2014, 20:00 | #3 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
Код:
Последний раз редактировалось maksim_serg; 06.02.2014 в 20:24. Причина: Немного изменил. Удаляет диапозон ячеек из диапозона ячеек |
06.02.2014, 21:02 | #4 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Если диапазон небольшой, можно, конечно, и по ячейкам. Но попробуйте таким способом исключить что-нибудь из целого столбца в 2007
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
06.02.2014, 21:04 | #5 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
|
07.02.2014, 01:06 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
а теперь представте так, по одной, надо удалить ячейки из всего столбика = 61/2*1048000/60/60/24 = 369 дней. чуть больше года работы и готово! моя процедура делает это за 3-4 минуты это где-то в 200тыс.раз быстрее, чем 369 дней.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
07.02.2014, 06:12 | #7 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Если из диапазона "A" требуется получить диапазон с "вырезанной" ячейкой "X", то перебирать поячеечно, это слишком долго. Предлагаю, примерно так:
Код:
Чем шире угол зрения, тем он тупее.
|
07.02.2014, 12:43 | #8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
спасибо, SAS888!
с пришел к этому же решению чуть корявее записанному здесь а сейчас хотел поинтересоваться не изобрел-ли я велосипед, может среди обилия встроенных функций я недосмотрел готовую. ячейка, обозначена Я разбивает поле листа на 4 диапазона Код:
эти 4-е диапазона обьединялись в один, пересечение обьединенного диапазона и исходного давало исходный без ячейки Я. но в ситуации, когда отмечена колонка без 1 ячейки и надо инвертировать отметку и этот алгоритм работал несколько минут (3-4-5) не засекал точно, но долго - это факт.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 07.02.2014 в 12:46. |
07.02.2014, 13:10 | #9 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
о, исправил (на примерно миллион строк):
DelCell2([c:c], [c3]).Select=1,92 сек DelCell2([c:c], [c:c]).Select=3,32 сек DelCell2([a:z], [c3]).Select=37,2 сек DelCell2([1:1], [c1]).Select=0.18 сек DelCell2([1:100], [c1]).Select=2,3 сек DelCell2([a1:a1048576], [c1]).Select=1,93 |
07.02.2014, 15:14 | #10 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
это все удалено
Последний раз редактировалось maksim_serg; 07.02.2014 в 15:37. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как исключить данные запросом? | Вадичок | Microsoft Office Access | 9 | 16.09.2012 08:49 |
Подставновка значений в ячейку из диапазона | p2rpower | Microsoft Office Excel | 3 | 15.08.2012 10:12 |
Как исключить запись в таблице. | vlkr | Microsoft Office Access | 4 | 14.07.2012 16:38 |
Нужен Макрос для ввода данных в перую пустую ячейку диапазона | valik65 | Microsoft Office Excel | 4 | 16.12.2010 16:01 |
как исключить слова RegExp | kroŧ | Общие вопросы Delphi | 0 | 24.10.2010 18:40 |