Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выделенная область в определенном диапазоне - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выделенная область в определенном диапазоне (Макросы/Sub)
Выделенная область в определенном диапазоне
Darck Дата: Среда, 02.12.2015, 16:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток.

Прошу не бить ногами если уже было. Честное пионерское юзал поиск.
Собственно вопрос:
Нужна проверка выделенных ячеек чтобы ругать пользователя если он выделил не то.
Конкретней:
Пользователь выделяет несколько ячеек (возможно не связанных). Выделенные ячейки должны находится только в столбце "A", строках, например, с 15 по 68.
Единственное что придумал это проверку адреса как строки на присутствие знаков отличных от буквы "A", цифр, и специальных знаков типа "$", ":" и т.д.
Но как-то это... неграмотно.

Заранее благодарен за помощь!
 
Ответить
СообщениеДоброго времени суток.

Прошу не бить ногами если уже было. Честное пионерское юзал поиск.
Собственно вопрос:
Нужна проверка выделенных ячеек чтобы ругать пользователя если он выделил не то.
Конкретней:
Пользователь выделяет несколько ячеек (возможно не связанных). Выделенные ячейки должны находится только в столбце "A", строках, например, с 15 по 68.
Единственное что придумал это проверку адреса как строки на присутствие знаков отличных от буквы "A", цифр, и специальных знаков типа "$", ":" и т.д.
Но как-то это... неграмотно.

Заранее благодарен за помощь!

Автор - Darck
Дата добавления - 02.12.2015 в 16:39
SLAVICK Дата: Среда, 02.12.2015, 16:46 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Используйте intersect


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеИспользуйте intersect

Автор - SLAVICK
Дата добавления - 02.12.2015 в 16:46
Darck Дата: Четверг, 03.12.2015, 11:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемый, SLAVICK!
На сколько я понимаю intersect возвращает область пересечения.
Т.е. в моем случае если хотя бы одна ячейка пересекается с моим диапазоном, то intersect будет выдавать область пересечения.
Что бы работало так, как мне нужно, то в проверяемую область нужно запихать весь лист, кроме той области где выделять можно, а объект Range не вмещает так много.
 
Ответить
СообщениеУважаемый, SLAVICK!
На сколько я понимаю intersect возвращает область пересечения.
Т.е. в моем случае если хотя бы одна ячейка пересекается с моим диапазоном, то intersect будет выдавать область пересечения.
Что бы работало так, как мне нужно, то в проверяемую область нужно запихать весь лист, кроме той области где выделять можно, а объект Range не вмещает так много.

Автор - Darck
Дата добавления - 03.12.2015 в 11:55
SLAVICK Дата: Четверг, 03.12.2015, 12:19 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вы задали общий вопрос - получили общий ответ.
Если хотите решить Вашу задачу - вложите файл пример согласно правилам форума.
Выделите в нем разрешенную область(и) - там видно будет.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеВы задали общий вопрос - получили общий ответ.
Если хотите решить Вашу задачу - вложите файл пример согласно правилам форума.
Выделите в нем разрешенную область(и) - там видно будет.

Автор - SLAVICK
Дата добавления - 03.12.2015 в 12:19
Roman777 Дата: Четверг, 03.12.2015, 12:21 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Darck, С чего Вы взяли, что
весь лист, кроме той области где выделять можно, а объект Range не вмещает так много
?
И можно использовать intersect для определения пересечения только столбца А и выделенной ячейки.


Много чего не знаю!!!!
 
Ответить
СообщениеDarck, С чего Вы взяли, что
весь лист, кроме той области где выделять можно, а объект Range не вмещает так много
?
И можно использовать intersect для определения пересечения только столбца А и выделенной ячейки.

Автор - Roman777
Дата добавления - 03.12.2015 в 12:21
Darck Дата: Пятница, 04.12.2015, 17:21 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
?
И можно использовать intersect для определения пересечения только столбца А и выделенной ячейки.

Это не решает проблему.
При выделении хотя бы одной ячейки в разрешенном диапазоне прописанном в intersect будет возвращаться именно она, а остальные выделенные ячейки могут лежать в НЕ разрешенной области.
Нужно именно определить выходит ли выделенный диапазон за разрешенную область, а для этого нужно искать пересечение НЕ разрешенной области которая не помещается в один объект Range.


Сообщение отредактировал Darck - Пятница, 04.12.2015, 17:22
 
Ответить
Сообщение
?
И можно использовать intersect для определения пересечения только столбца А и выделенной ячейки.

Это не решает проблему.
При выделении хотя бы одной ячейки в разрешенном диапазоне прописанном в intersect будет возвращаться именно она, а остальные выделенные ячейки могут лежать в НЕ разрешенной области.
Нужно именно определить выходит ли выделенный диапазон за разрешенную область, а для этого нужно искать пересечение НЕ разрешенной области которая не помещается в один объект Range.

Автор - Darck
Дата добавления - 04.12.2015 в 17:21
SLAVICK Дата: Пятница, 04.12.2015, 17:26 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Если хотите решить Вашу задачу - вложите файл пример согласно правилам форума.
Выделите в нем разрешенную область(и) - там видно будет.

rules


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Если хотите решить Вашу задачу - вложите файл пример согласно правилам форума.
Выделите в нем разрешенную область(и) - там видно будет.

rules

Автор - SLAVICK
Дата добавления - 04.12.2015 в 17:26
Gustav Дата: Пятница, 04.12.2015, 19:40 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Рискну предположить без долгожданного примера. Предлагаю просто сосчитать ячейки в выборе пользователя и в пересечении диапазонов. Равенство = полное вхождение.
[vba]
Код
Sub test()
    
    Dim rngColA      As Range 'диапазон попадания (вхождения) - зеленый
    Dim rngUser      As Range 'выбор пользователя - жёлтый
    Dim rngIntersect As Range 'диапазон пересечения - голубой
                   
    Set rngColA = Range("A1:A68")
        
    Set rngUser = Range("A16:B17,A16:B17,A20:C21,D22:D26")
    Set rngUser = Union(rngUser, rngUser)
        
    'визуализация
    Cells.ClearFormats
    rngColA.Interior.ColorIndex = 35 'зеленый
    rngUser.Interior.ColorIndex = 36 'жёлтый
        
    Set rngIntersect = Intersect(rngColA, rngUser)
        
    If rngIntersect Is Nothing Then
        MsgBox "Выбор пользователя не пересекается с Диапазоном попадания"
        Exit Sub
    End If
        
    rngIntersect.Interior.ColorIndex = 37 'голубой
                
    If rngUser.Cells.Count = rngIntersect.Cells.Count Then
        MsgBox "Выбор пользователя полностью входит в Диапазон попадания"
    Else
        MsgBox "Выбор пользователя частично входит в Диапазон попадания"
    End If
        
End Sub
[/vba]
P.S. Предвосхищая возможный вопрос. Смысл трюка Union(rngUser, rngUser) в подавлении повторного выделения некоторых ячеек пользователем. Без Set rngUser = Union(rngUser, rngUser) результат rngUser.Cells.Count будет 19, а с ним - только 15. Имитация повторного выделения выполнена задвоением адреса A16:B17 в Range("A16:B17,A16:B17...").


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 04.12.2015, 19:47
 
Ответить
СообщениеРискну предположить без долгожданного примера. Предлагаю просто сосчитать ячейки в выборе пользователя и в пересечении диапазонов. Равенство = полное вхождение.
[vba]
Код
Sub test()
    
    Dim rngColA      As Range 'диапазон попадания (вхождения) - зеленый
    Dim rngUser      As Range 'выбор пользователя - жёлтый
    Dim rngIntersect As Range 'диапазон пересечения - голубой
                   
    Set rngColA = Range("A1:A68")
        
    Set rngUser = Range("A16:B17,A16:B17,A20:C21,D22:D26")
    Set rngUser = Union(rngUser, rngUser)
        
    'визуализация
    Cells.ClearFormats
    rngColA.Interior.ColorIndex = 35 'зеленый
    rngUser.Interior.ColorIndex = 36 'жёлтый
        
    Set rngIntersect = Intersect(rngColA, rngUser)
        
    If rngIntersect Is Nothing Then
        MsgBox "Выбор пользователя не пересекается с Диапазоном попадания"
        Exit Sub
    End If
        
    rngIntersect.Interior.ColorIndex = 37 'голубой
                
    If rngUser.Cells.Count = rngIntersect.Cells.Count Then
        MsgBox "Выбор пользователя полностью входит в Диапазон попадания"
    Else
        MsgBox "Выбор пользователя частично входит в Диапазон попадания"
    End If
        
End Sub
[/vba]
P.S. Предвосхищая возможный вопрос. Смысл трюка Union(rngUser, rngUser) в подавлении повторного выделения некоторых ячеек пользователем. Без Set rngUser = Union(rngUser, rngUser) результат rngUser.Cells.Count будет 19, а с ним - только 15. Имитация повторного выделения выполнена задвоением адреса A16:B17 в Range("A16:B17,A16:B17...").

Автор - Gustav
Дата добавления - 04.12.2015 в 19:40
Darck Дата: Пятница, 04.12.2015, 23:23 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
SLAVICK, Gustav.
В разговор о правилах:
Вопрос вполне себе общий, потому и нет примера!
Да, в моем общем вопросе присутствуют некоторые ограничения, тем не менее он все такой же общий (на мой взгляд).
Ну если вам так уж приспичило, то приложу файлик. В VBA мой вариант с проверкой адреса как текстовой строки на вхождение ненужных знаков. НО входит весь столбец А, а не необходимый диапазон. Да и выглядит неграмотно как писал выше.
Intersect я рассматривал долго и с разных сторон. Я мог что-то упустить, не так силен в программировании (вообще не силен). Но на мой взгляд не подходит.
Ограничения на общий вопрос:
Пользователь должен выбирать только номера, т.е. выделенные ячейки должны быть в диапазоне A2:A7 (выделено желтым).
При выделении хотя бы одной ячейки вне диапазона пользователь должен получать соответствующее сообщение.
Gustav, Вам отдельное спасибо за Union!
И, насколько я понимаю глядя на Ваш листинг, MsgBox "Выбор пользователя частично входит в Диапазон попадания" - будет выводиться в случае если хоть одна из ячеек в диапазоне выделена, но при этом может быть выделена и ячейка вне диапазона (а может и не быть выделена). А нужно сообщение срабатывающее при выделении хотя бы одной ячейки вне диапазона (повторяюсь).
К сообщению приложен файл: 2920074.xlsm (18.2 Kb)
 
Ответить
СообщениеSLAVICK, Gustav.
В разговор о правилах:
Вопрос вполне себе общий, потому и нет примера!
Да, в моем общем вопросе присутствуют некоторые ограничения, тем не менее он все такой же общий (на мой взгляд).
Ну если вам так уж приспичило, то приложу файлик. В VBA мой вариант с проверкой адреса как текстовой строки на вхождение ненужных знаков. НО входит весь столбец А, а не необходимый диапазон. Да и выглядит неграмотно как писал выше.
Intersect я рассматривал долго и с разных сторон. Я мог что-то упустить, не так силен в программировании (вообще не силен). Но на мой взгляд не подходит.
Ограничения на общий вопрос:
Пользователь должен выбирать только номера, т.е. выделенные ячейки должны быть в диапазоне A2:A7 (выделено желтым).
При выделении хотя бы одной ячейки вне диапазона пользователь должен получать соответствующее сообщение.
Gustav, Вам отдельное спасибо за Union!
И, насколько я понимаю глядя на Ваш листинг, MsgBox "Выбор пользователя частично входит в Диапазон попадания" - будет выводиться в случае если хоть одна из ячеек в диапазоне выделена, но при этом может быть выделена и ячейка вне диапазона (а может и не быть выделена). А нужно сообщение срабатывающее при выделении хотя бы одной ячейки вне диапазона (повторяюсь).

Автор - Darck
Дата добавления - 04.12.2015 в 23:23
RAN Дата: Суббота, 05.12.2015, 00:04 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМакрос "InvertSelection"

Автор - RAN
Дата добавления - 05.12.2015 в 00:04
Darck Дата: Суббота, 05.12.2015, 00:56 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, Вы в очередной раз меня выручаете!
Спасибо!
 
Ответить
СообщениеRAN, Вы в очередной раз меня выручаете!
Спасибо!

Автор - Darck
Дата добавления - 05.12.2015 в 00:56
Gustav Дата: Суббота, 05.12.2015, 02:45 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
И, насколько я понимаю глядя на Ваш листинг, MsgBox "Выбор пользователя частично входит в Диапазон попадания" - будет выводиться в случае если хоть одна из ячеек в диапазоне выделена, но при этом может быть выделена и ячейка вне диапазона (а может и не быть выделена). А нужно сообщение срабатывающее при выделении хотя бы одной ячейки вне диапазона (повторяюсь).

Эммм... Еще раз, уже не кодом, а человечьими словами. По взаимодействию диапазонов ситуации могут быть следующими (и других не бывает):
1. Диапазоны не пересекаются, т.е. не имеют общих ячеек.
2. Один диапазон может быть полностью внутри другого.
3. Не все ячейки одного диапазона находятся внутри другого, т.е. частично. При этом остальные ячейки первого диапазона находятся, естественно, за пределами второго.
В моем примере выше рассмотрены все три эти ситуации (см. соответствующие MsgBox).

Чтобы Вам было всё окончательно понятно, я добавил в Ваш файл свою кнопку и адаптировал свой вышеприведенный пример (см. в файле и под спойлером).


RAN, Вы в очередной раз меня выручаете!

И мне очень любопытно, каким образом Вы собираетесь в своей задаче использовать материал по ссылке Андрея
К сообщению приложен файл: Darck03.xlsm (21.4 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
И, насколько я понимаю глядя на Ваш листинг, MsgBox "Выбор пользователя частично входит в Диапазон попадания" - будет выводиться в случае если хоть одна из ячеек в диапазоне выделена, но при этом может быть выделена и ячейка вне диапазона (а может и не быть выделена). А нужно сообщение срабатывающее при выделении хотя бы одной ячейки вне диапазона (повторяюсь).

Эммм... Еще раз, уже не кодом, а человечьими словами. По взаимодействию диапазонов ситуации могут быть следующими (и других не бывает):
1. Диапазоны не пересекаются, т.е. не имеют общих ячеек.
2. Один диапазон может быть полностью внутри другого.
3. Не все ячейки одного диапазона находятся внутри другого, т.е. частично. При этом остальные ячейки первого диапазона находятся, естественно, за пределами второго.
В моем примере выше рассмотрены все три эти ситуации (см. соответствующие MsgBox).

Чтобы Вам было всё окончательно понятно, я добавил в Ваш файл свою кнопку и адаптировал свой вышеприведенный пример (см. в файле и под спойлером).


RAN, Вы в очередной раз меня выручаете!

И мне очень любопытно, каким образом Вы собираетесь в своей задаче использовать материал по ссылке Андрея

Автор - Gustav
Дата добавления - 05.12.2015 в 02:45
Darck Дата: Суббота, 05.12.2015, 10:11 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, ооо... тоже работает, очень рад!
не додумался до такой проверки:

Она-то все и решила, конечно в купе с Union.
Как собирался использовать макрос от RAN... все получилось, файл прикладываю.
Но у Вас код по компактней и исполнение проще. В частности в макросе предложенном RAN при работе создается книга и она же удаляется что занимает время.
К сообщению приложен файл: 2804663.xlsm (24.3 Kb)


Сообщение отредактировал Darck - Суббота, 05.12.2015, 10:13
 
Ответить
СообщениеGustav, ооо... тоже работает, очень рад!
не додумался до такой проверки:

Она-то все и решила, конечно в купе с Union.
Как собирался использовать макрос от RAN... все получилось, файл прикладываю.
Но у Вас код по компактней и исполнение проще. В частности в макросе предложенном RAN при работе создается книга и она же удаляется что занимает время.

Автор - Darck
Дата добавления - 05.12.2015 в 10:11
SLAVICK Дата: Суббота, 05.12.2015, 11:14 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Ну если вам так уж приспичило,

Есть правила. Их нужно соблюдать. Спасибо за столь великое одолжение чти соизволили приложить пример. >(
Это же наверное нам нужна была помощь.
Как видите я был прав. Решение Gustav именно с intersect. :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Ну если вам так уж приспичило,

Есть правила. Их нужно соблюдать. Спасибо за столь великое одолжение чти соизволили приложить пример. >(
Это же наверное нам нужна была помощь.
Как видите я был прав. Решение Gustav именно с intersect. :D

Автор - SLAVICK
Дата добавления - 05.12.2015 в 11:14
Gustav Дата: Суббота, 05.12.2015, 14:03 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2748
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Gustav, ооо... тоже работает

Да уж не возражаю! :)
не додумался до такой проверки:

До нее не надо было додумываться - всё было уже "украдено до нас" выложено в сообщении № 8. Надо было только повнимательнее его читать и заметить тождество между окончательным:
[vba]
Код
If rngUser.Cells.Count <> rngIntersect.Cells.Count Then
    бла-бла-бла 'MsgBox "Выделите только номера банкоматов"
End If
[/vba]
и предварительным (заметьте, про банкоматы тогда еще ничего не было известно и была только голая абстрактная логика):
[vba]
Код
If rngUser.Cells.Count = rngIntersect.Cells.Count Then
    ..........
Else
    бла-бла-бла по сути того же смысла  'MsgBox "Выбор пользователя частично входит в Диапазон попадания"
End If
[/vba]
Она-то все и решила, конечно в купе с Union.

Купа с юнионом, конечно, представляет тонкость, которую лучше знать, чем не знать, но ее роль не такая уж решающая и нужна она только тогда, когда найдётся изысканный негодяй-пользователь, который будет повторно "промазывать" мышью уже выделенные ячейки


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Gustav, ооо... тоже работает

Да уж не возражаю! :)
не додумался до такой проверки:

До нее не надо было додумываться - всё было уже "украдено до нас" выложено в сообщении № 8. Надо было только повнимательнее его читать и заметить тождество между окончательным:
[vba]
Код
If rngUser.Cells.Count <> rngIntersect.Cells.Count Then
    бла-бла-бла 'MsgBox "Выделите только номера банкоматов"
End If
[/vba]
и предварительным (заметьте, про банкоматы тогда еще ничего не было известно и была только голая абстрактная логика):
[vba]
Код
If rngUser.Cells.Count = rngIntersect.Cells.Count Then
    ..........
Else
    бла-бла-бла по сути того же смысла  'MsgBox "Выбор пользователя частично входит в Диапазон попадания"
End If
[/vba]
Она-то все и решила, конечно в купе с Union.

Купа с юнионом, конечно, представляет тонкость, которую лучше знать, чем не знать, но ее роль не такая уж решающая и нужна она только тогда, когда найдётся изысканный негодяй-пользователь, который будет повторно "промазывать" мышью уже выделенные ячейки

Автор - Gustav
Дата добавления - 05.12.2015 в 14:03
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выделенная область в определенном диапазоне (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!