![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
как добавить ячейку (диапазон) Х в диапазон А понятно
set A = Application.Union(A, X) А есть простой способ как ИСКЛЮЧИТЬ ячейку Х из диапазона А. Уважаемые программисты, нужна функция типа Function DeLCeLL(BaseRg as range, Cel2Del as range) as range т.е. на входе диапазон и какая-то ячейка из него, на выходе тот же диапазон, но уже без указанной ячейки (ни сама ячейка на листе, ни данные в ней не должны пострадать). Может есть стандартные средства VBA для этого? Спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Вроде кто-то из гуру делал это, и даже не для одной ячейки. Стандартных средств точно нет.
Если все же делать: можно перебрать области диапазона и проверять intersect с ячейкой. Если пересечения нет, область добавляется к выходному диапазону. Если пересечение есть, ячейка делит эту область на 4 диапазона (в общем случае): сверху, снизу, строка слева и строка справа. Или слева, справа, столбец сверху и столбец снизу - можно выбрать этот вариант, если область имеет .rows.count > .columns.count. Координаты диапазонов вычисляются арифметически, и диапазоны добавляются к выходному диапазону.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
![]() Код:
Последний раз редактировалось maksim_serg; 06.02.2014 в 20:24. Причина: Немного изменил. Удаляет диапозон ячеек из диапозона ячеек |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Если диапазон небольшой, можно, конечно, и по ячейкам. Но попробуйте таким способом исключить что-нибудь из целого столбца в 2007
![]()
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 25.03.2010
Сообщений: 417
|
![]() |
![]() |
![]() |
![]() |
#6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]() Код:
а теперь представте так, по одной, надо удалить ячейки из всего столбика = 61/2*1048000/60/60/24 = 369 дней. чуть больше года работы и готово! моя процедура делает это за 3-4 минуты это где-то в 200тыс.раз быстрее, чем 369 дней.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Если из диапазона "A" требуется получить диапазон с "вырезанной" ячейкой "X", то перебирать поячеечно, это слишком долго. Предлагаю, примерно так:
Код:
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#8 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
![]()
спасибо, SAS888!
с пришел к этому же решению чуть корявее записанному здесь а сейчас хотел поинтересоваться не изобрел-ли я велосипед, может среди обилия встроенных функций я недосмотрел готовую. ячейка, обозначена Я разбивает поле листа на 4 диапазона Код:
эти 4-е диапазона обьединялись в один, пересечение обьединенного диапазона и исходного давало исходный без ячейки Я. но в ситуации, когда отмечена колонка без 1 ячейки и надо инвертировать отметку и этот алгоритм работал несколько минут (3-4-5) не засекал точно, но долго - это факт.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 07.02.2014 в 12:46. |
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#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 |