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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 15:32   #1
Miguel Sanchez
Пользователь
 
Регистрация: 09.03.2011
Сообщений: 33
По умолчанию Проверка на наличие общих ячеек диапазонов

Посоветуйте, пожалуйста, наиболее оптимальный способ определить присутствует ли именованный диапазон полностью или частично в проверяемом(текущем)

Sub form_to_list()
Dim m_range As Range
Set m_range = ActiveSheet.Cells.Item(1)
Set m_range = m_range.Offset(1, 0).Resize(ActiveSheet.UsedRange.Spe cialCells(xlCellTypeLastCell).Row, 1)

Если существует какой либо именованный диапазон, ячейки которого содержит m_range, то определяем его имя и работаем с ним, иначе -
ActiveSheet.Names.Add Name:="myName", RefersToR1C1:=m_range.Address

Names("myName").RefersToR1C1 = Range([myName]).Resize(Range([myName]).End(xlDown).Row + 1, 1).Address
Range([myName]).End(xlDown).Formula = Cells(1, 2).Value
Miguel Sanchez вне форума Ответить с цитированием
Старый 18.04.2011, 15:56   #2
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

см.
Intersect
Union
аналитика вне форума Ответить с цитированием
Старый 18.04.2011, 16:57   #3
Miguel Sanchez
Пользователь
 
Регистрация: 09.03.2011
Сообщений: 33
По умолчанию

В случае если пересечение есть, как вернуть имя диапазона? нужно всю коллекцию names перебирать или есть какое-то свойство/или метод, на подобие CurrentRegion??
Есть еще RefersToRange - не пойму как работает... Мож кто знает?
Miguel Sanchez вне форума Ответить с цитированием
Старый 18.04.2011, 17:42   #4
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

нужно всю коллекцию names перебирать
аналитика вне форума Ответить с цитированием
Старый 18.04.2011, 17:48   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в rg1, rg2 - поместите предварительно два исследуемых диапазона.
например
Код:
  Set rg1 = Range("A1:D10")
  Set rg2 = Range("I5:F10")
и проверяйте как они относятся друг к другу:
Код:
  Set rg0 = Intersect(rg1, rg2)
  If rg0 Is Nothing Then
    MsgBox "D2 = " & rg2.Address & " и D1 = " & rg1.Address & " не пересекаются"
  ElseIf rg0.Address = rg2.Address Then
    MsgBox "D2 = " & rg2.Address & " полностью в D1 = " & rg1.Address
  Else
    MsgBox "D2 = " & rg2.Address & " Частично (" & rg0.Address & ") в D1 = " & rg1.Address
  End If
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.04.2011, 06:09   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А если в текущий диапазон попадают (либо полностью, либо частично) несколько именованных диапазонов, какой из них требуется получить?
Так, или иначе, без перебора коллекции имен не обойтись.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 19.04.2011, 08:15   #7
Miguel Sanchez
Пользователь
 
Регистрация: 09.03.2011
Сообщений: 33
По умолчанию

Вообще, задумывалось, что на листе должна быть одна табличка накопления информации- источник первичных данных(БД), причем с локализацией в начале листа. Она и должна стать именованным диапазоном. Присутствие прочих имен нежелательно, поэтому тот диапазон который имеет крайнее верхнее левое положение имеет преимущество.
Видимо буду перебирать все Name, выбирая тот, у которого первая ячейка имеет наименьшую строку и столбец и затем интерсектить, как предложил IgorGO
Спасибо за советы, буду пробовать.
Miguel Sanchez вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на наличие файла ruavia3 Microsoft Office Excel 1 05.02.2010 21:13
Проверка на наличие файла Vladya Общие вопросы Delphi 7 10.10.2009 01:26
Проверка на наличие в массиве istoe Microsoft Office Excel 8 26.08.2009 11:55
Проверка на наличие файла Demetrius Помощь студентам 12 28.07.2009 00:27
Проверка на наличие таблицы в БД Ramires БД в Delphi 3 18.12.2008 08:59