Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.01.2009, 21:43   #1
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Как вычесть один диапазон из другого?

Мне нужно придать определенное форматирование диапазону. Это получается. Но также нужно снять выделение с остальных ячеек. Можно ли выделить все до конца документа, начиная с данной ячейки, и потом вычесть из этого нужный мне диапазон?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 19.01.2009, 22:29   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Почему работает вот это:
Код:
  Set oUsedRange = ActiveWorkbook.Sheets(1).Cells(9, 1).Resize([КоличествоЗаписей], 24)
И не работает вот это:
Код:
  Set oNotUsedRange = ActiveWorkbook.Sheets(1).Cells(9 + [КоличествоЗаписей], 1).Resize(1000, 1000)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 20.01.2009, 05:39   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В Excel доступны толко функции объединения и пересечения диапазонов.
Координаты других производных от этих диапазонов придется вычислять самому:

Код:
Sub test()
    [a1].Select

    Set ra = Union([e3:h30], [g5:j35]): ra.Select    ' объединение диапазонов
    MsgBox "Результат объединения диапазонов [e3:h30] и [g5:j35]", vbInformation

    Set ra = Intersect([e3:h30], [g5:j35]): ra.Select    ' пересечение диапазонов
    MsgBox "Результат пересечения диапазонов [e3:h30] и [g5:j35]", vbInformation

    Range("e3:h10,e3:d30,e20:h30,g3:h30").Select ' похоже, что только так...
    MsgBox "Исключаем диапазон  [f11:f19] из [e3:h30]", vbInformation

End Sub
Цитата:
не работает вот это:
Set oNotUsedRange = ActiveWorkbook.Sheets(1).Cells(9 + [КоличествоЗаписей], 1).Resize(1000, 1000)
1) Если у тебя Excel 2003 (или 2007 в режиме совместимости), то замени Resize(1000, 1000) на Resize(1000, 200)

2) Старайся использовать .Worksheets(1) вместо .Sheets(1)

3) Лист, содержащий ячейку [КоличествоЗаписей], должен быть активным (либо надо указывать, на каком листе искать эту ячейку)


А, может, поступить несколько иначе?
Сначала применить форматирование ко всему диапазону, а потом сбросить форматирование части этого диапазона?
Вроде, так будет даже проще...

Последний раз редактировалось EducatedFool; 20.01.2009 в 09:34.
EducatedFool вне форума
Старый 20.01.2009, 09:58   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
3) Лист, содержащий ячейку [КоличествоЗаписей], должен быть активным (либо надо указывать, на каком листе искать эту ячейку)
Так это не ячейка, а результат функции. Функция доступна для всей книги.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 20.01.2009, 10:43   #5
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Так это не ячейка, а результат функции. Функция доступна для всей книги.
Ты прав но и прав и EducatedFool , единственное замечание функция
[КоличествоЗаписей] возращает кол-во записей с активного листа.
Юнлинг вне форума
Старый 20.01.2009, 10:44   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Пусть, например, в диапазоне "A1:D10" нужно выделить все ячейки, кроме тех, которые входят в диапазон "B3:C5". Можно, например, так:
Код:
Sub DifRange()

    Dim x As Range, y As Range, z As Range, Cell As Range
    Set x = [A1:D10]: Set y = [B3:C5]
    For Each Cell In x
        If Intersect(Cell, y) Is Nothing Then If z Is Nothing Then Set z = Cell Else Set z = Union(z, Cell)
    Next
    z.Select

End Sub
Подставьте вместо x и y Ваши диапазоны.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 20.01.2009, 12:30   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Юнлинг Посмотреть сообщение
единственное замечание функция
[КоличествоЗаписей] возращает кол-во записей с активного листа.
Почему? У меня [КоличествоЗаписей] определена как
=МАКС(СМЕЩ('Producing Report for P&G'!$A$1;8;;ЧСТРОК('Producing Report for P&G'!$A:$A)-8))
т.е. она всегда возвращает количество записей с нужного листа этой книги. Я прав?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 20.01.2009, 16:02   #8
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Почему? У меня [КоличествоЗаписей] определена как
=МАКС(СМЕЩ('Producing Report for P&G'!$A$1;8;;ЧСТРОК('Producing Report for P&G'!$A:$A)-8))
т.е. она всегда возвращает количество записей с нужного листа этой книги. Я прав?
Мне кажется именнованные значения обозначаемые квадратными скопками индивидуальны для каждого листа. и когда вы определяете по Вашей формуле она определяется для активного листа, а не для книги. И если внутри проги вы сделаете активиным другой лист [КоличествоЗаписей] должа вернуть значение NULL.
Может быть я не прав?
Юнлинг вне форума
Старый 20.01.2009, 16:12   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Юнлинг Посмотреть сообщение
…Может быть я не прав?
Сейчас не могу проверить. Приду домой проверю. Но если в определении переменной прямо указан лист, то какая разница где она находится?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 20.01.2009, 16:23   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Но если в определении переменной прямо указан лист, то какая разница где она находится?
Цитата:
У меня [КоличествоЗаписей] определена как
=МАКС(СМЕЩ('Producing Report for P&G'!$A$1;8;;ЧСТРОК('Producing Report for P&G'!$A:$A)-8))
Это скорее не определение переменной, а просто формула в ячейке...

Никто не спорит, Excel корректно вычислит значение и поместит его в ячейку [КоличествоЗаписей].

Но при обращении из макроса к значению именованного диапазона (в данном случае ячейки [КоличествоЗаписей]) Excel будет пытаться искать этот именованный диапазон на активном листе. И если не найдёт, выведет сообщение об ошибке (даже если этот именованный диапазон присутствует на соседнем листе)
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как переименовать диапазон в Excel 2003? viter.alex Microsoft Office Excel 14 16.01.2009 02:07
Как работать с меню другого приложения ? Stimer Win Api 1 17.12.2008 16:30
как просуммировать динамический диапазон abocharov Microsoft Office Excel 8 22.10.2008 18:47
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11
Как указать диапазон чисел? Inbox Общие вопросы Delphi 2 29.06.2007 01:21