Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
29.10.2020, 07:45:56

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
31 501 Сообщений в 5 057 Тем от 10 437 Пользователей
Последний пользователь: supptotlipho
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Как вывести адрес области ячеек(с помощью функции АДРЕС или какой- то другой?)
Страниц: [1]   Вниз
Печать
Автор Тема: Как вывести адрес области ячеек(с помощью функции АДРЕС или какой- то другой?)  (Прочитано 5080 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Annette
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля E-mail
« : 05.07.2015, 19:20:30 »

Помогите, пжл, вывести адрес области ячеек, чтобы было примерно так: Лист2¡B9:В12.Это делается с помощью функции АДРЕС или какой- то другой?
Записан
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #1 : 05.07.2015, 20:58:25 »

Попробуйте функцию =АДРЕС(1;1;;;"Лист1"). Она возвращает значение Лист1!$A$1.

Подробнее о функции Адрес:
https://support.office.com/ru-ru/article/Функция-АДРЕС-d0c26c0d-3991-446b-8de4-ab46431d4f89?sxpredir=true&ui=ru-RU&rs=ru-RU&ad=RU
« Последнее редактирование: 05.07.2015, 21:03:29 от Alex_Gur » Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Annette
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля E-mail
« Ответ #2 : 05.07.2015, 21:30:48 »

Спасибо, но это будет адрес одной ячейки, а мне нужно, чтоб прописывался адрес нескольких ячеек

Записан
Kuzmich
Постоялец
***

Репутация: +25/-0
Офлайн Офлайн

Сообщений: 147


Просмотр профиля
« Ответ #3 : 05.07.2015, 22:05:57 »

Код: (vb)

Sub АдресДиапазона()
Dim АдресДиапазона As Range
  Set АдресДиапазона = Application.InputBox(prompt:="Выделите нужный диапазон", Type:=8)
    MsgBox АдресДиапазона.Address
End Sub
Записан
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #4 : 05.07.2015, 22:14:32 »

В развитие макроса от Kuzmich:

Код: (vb)
Sub АдресДиапазона()
    Dim АдресДиапазона As Range
    Dim strI As String
    Set АдресДиапазона = Application.InputBox(prompt:="Выделите нужный диапазон", Type:=8)
    MsgBox АдресДиапазона.Address
    MsgBox ActiveSheet.Name
    strI = ActiveSheet.Name & "!" & АдресДиапазона.Address
    MsgBox strI
End Sub


Получаем значение типа: Лист1!$A$6:$D$15
« Последнее редактирование: 05.07.2015, 22:17:55 от Alex_Gur » Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #5 : 05.07.2015, 22:27:14 »

И еще дополнение: Чтобы получить ссылку типа: Лист1!A9:D17 (без знаков доллара) можно использовать следующий макрос:

Код: (vb)
Sub АдресДиапазона()
    Dim АдресДиапазона As Range
    Dim strI As String
    Set АдресДиапазона = Application.InputBox(prompt:="Выделите нужный диапазон", Type:=8)
    strI = ActiveSheet.Name & "!" & АдресДиапазона.Address(ColumnAbsolute:=False, RowAbsolute:=False)
    Range("A1").Value = strI
End Sub


Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Annette
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 3


Просмотр профиля E-mail
« Ответ #6 : 05.07.2015, 22:30:24 »

Спасибо!  Непонимающий
Записан
Юрий М
Глобальный модератор
Ветеран
*****

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 066



Просмотр профиля E-mail
« Ответ #7 : 06.07.2015, 12:21:16 »

Эту запись:
Код: (vb)
.Address(ColumnAbsolute:=False, RowAbsolute:=False) 

Можно сократить:
Код: (vb)
.Address(0, 0) 
  Подмигивающий
Записан
sv2015
Пользователь
**

Репутация: +3/-0
Офлайн Офлайн

Сообщений: 84


Просмотр профиля
« Ответ #8 : 06.07.2015, 13:31:38 »

Добрый день,Alex_Gur! Прошу считать мое данное обращение как дружественную конструктивную критику.
1. Почему Вы нарушаете ограничение на имена в VBA:
  Не следует использовать имена,совпадающие с именами процедур.
У Вас название процедуры АдресДиапазона и такое же имя у диапазона внутри процедуры.

2.Скажите, пожалуйста, кто такой Kuzmich у Вас в тексте,-может быть это название сборника их которого вы черпаете процедуры.

3.Кроме того уважаемая создатель темы просила решить вопрос с помощью функции Адрес или какой-то другой
Справку по функции АДРЕС вы провели,а затем решаете вопрос с помощью подпрограммы типа Sub End Sub и MsgBox,
подпрограммы ведь это не пользовательские функции VBA.
Вот пример такой пользовательской функции VBA,расположенной в стандартном модуле VBA:Вводите в ячейке =G,выскакивает диалоговое окно,выбирает двойным щелчком функцию,вводите диапазон мышью или клавиатурой.

Код: (vb)
Function GetAdress(r As Range) As String
GetAdress = r.Parent.Name & r.Address
End Function


4.Убедительно прошу Вас,пожалуйста,,не применяйте столько много Функций MsgBox в ваших процедурах,это не совсем правильный путь программирования.
 С уважением ко всем участникам обсуждения и Модератору.
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +450/-0
Офлайн Офлайн

Сообщений: 5 320



Просмотр профиля WWW
« Ответ #9 : 06.07.2015, 13:53:22 »

кто такой Kuzmich у Вас в тексте
Ну это уже не знаю даже на что похоже. Написано ведь:
Цитировать
В развитие макроса от Kuzmich:
А Kuzmich это один из наших участников, его сообщение есть в данной теме. Обзывать его каким-то сборником очень невежливо.

Замечание по вопросу совпадения имени процедуры и переменной очень верное, присоединюсь. А все остальное смахивает на агрессивные нравоучения, которые совсем лишние. MsgBox человек используется для показа результата отдельных частей результата выполнения кода, т.к. не факт, что автор темы умеет использовать тот же Immediate. А без показов всяких сообщений автор может вообще не понять, что ему предложили. И это никакого отношения к правильному и неправильному программированию не относится. Все зависит от задач. А здесь задача была показать суть кода.

Далее: да, просили с помощью функции. Но кто мешает предложить альтернативу? Вы предложили функцию - хорошо, автор, скорее всего, будет более рад именно ей. Но это не значит, что все остальные неверно советуют. Может автору как раз процедурой будет удобнее, а не функцией(далеко не всегда пользователи знают, что помимо функций можно и другие возможности использовать).

В общем выражайте своим мысли менее агрессивно. Даже слова "с уважением" и "пожалуйста" никак не смягчают тон Вашего сообщения.

Плюс никто не задал логичный вопрос: а откуда черпать адреса ячеек? Надо ли их задавать в функции или надо определить ячейки выделенные? К тому же можно применить тот же АДРЕС:
=АДРЕС(1;1;;;"Лист1")&":"&АДРЕС(1;2)
будет возвращен адрес диапазона в виде: Лист1!$A$1:$B$1

Для Лист2!В9:В12 с относительной адресацией:
=АДРЕС(9;2;4;;"Лист2")&":"&АДРЕС(12;2;4)

А в Вашей функции очень не хватает воскл.знака:
Код: (vb)
Function GetAdress(r As Range) As String
GetAdress = r.Parent.Name & "!" & r.Address(0, 0)
End Function

А еще лучше было бы добавить апострофы. Нужно для тех ситуаций, если адрес ячеек будет применяться далее в функциях вроде ДВССЫЛ, а в имени листа будет пробел или иной символ.
АДРЕС в этом случае сам добавляет апострофы, но для функции пользователя это на совести программиста:
Код: (vb)
Function GetAdress(r As Range) As String
GetAdress = "'" & r.Parent.Name & "'!" & r.Address(0, 0)
End Function

лишними они никогда не будут.
« Последнее редактирование: 06.07.2015, 14:17:24 от The_Prist » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #10 : 06.07.2015, 14:17:44 »

По поводу названия диапазона - я согласен (так было у пользователя Kuzmich (http://www.excel-vba.ru/forum/index.php?topic=3936.msg21224#msg21224), я это не менял).
И, совершенно верно, уважаемый sv2015, Вы почему-то ведете себя по отношению ко мне очень агрессивно и, к сожалению, уже не в первый раз.
Прошу Вас в будущем так не поступать.
Давайте жить дружно и работать вместе над ответами на сайте!
Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Alex_Gur
Старожил
****

Репутация: +11/-0
Офлайн Офлайн

Сообщений: 278


Просмотр профиля
« Ответ #11 : 06.07.2015, 15:10:21 »

Цитировать
Плюс никто не задал логичный вопрос: а откуда черпать адреса ячеек?
Можно предположить, что Annette знает, как преобразовать код, чтобы правильно указать адреса крайних ячеек диапазона.
Если же нет, то тогда она может задать вопрос, и мы ей с удовольствием ответим. Улыбка
Записан

Мы заинтересованы не только решить ваши задачи, но и помочь вам научиться решать их самостоятельно.
"Дай человеку рыбу, и он будет сыт весь день. Научи человека ловить рыбу, и он будет сыт всю жизнь" Улыбка
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +450/-0
Офлайн Офлайн

Сообщений: 5 320



Просмотр профиля WWW
« Ответ #12 : 06.07.2015, 15:20:56 »

Я даже по-другому вопрос поставлю автору темы: а для чего нужен адрес? Где его потом планируется применять? Зная это можно будет попробовать дать оптимальное решение. Есть подозрение, что можно и без макросов.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru