Вступление
Тема должна включать информацию, конкретно связанную с именованными диапазонами в Excel, включая методы создания, изменения, удаления и доступа к определенным именованным диапазонам.
Определить именованный диапазон
Использование именованных диапазонов позволяет описать значение содержимого ячейки (я) и использовать это определенное имя вместо фактического адреса ячейки.
Например, формулу =A5*B5
можно заменить на =Width*Height
чтобы упростить чтение и понимание формулы.
Чтобы определить новый именованный диапазон, выберите ячейку или ячейки для имени, а затем введите новое имя в поле «Имя» рядом с панелью формул.
Примечание. Именованные диапазоны по умолчанию относятся к глобальной области, что означает, что к ним можно получить доступ из любой точки книги. Старые версии Excel позволяют дублировать имена, поэтому необходимо избегать дублирования имен глобальной области, иначе результаты будут непредсказуемыми. Используйте вкладку «Диспетчер имен» на вкладке «Формулы», чтобы изменить область действия.
Создайте новый именованный диапазон под названием «MyRange», назначенный ячейке A1
ThisWorkbook.Names.Add Name:="MyRange", _
RefersTo:=Worksheets("Sheet1").Range("A1")
Удалить определенный именованный диапазон по имени
ThisWorkbook.Names("MyRange").Delete
Доступ к именованному диапазону по имени
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("Sheet1").Range("MyRange")
Call MsgBox("Width = " & rng.Value)
Доступ к названию диапазона с ярлыком
Как и любой другой диапазон , именованные диапазоны могут быть доступны напрямую с помощью ярлыка, который не требует создания объекта Range
. Три строки из выдержки из вышеприведенного кода могут быть заменены одной строкой:
Call MsgBox("Width = " & [MyRange])
Примечание. Свойством по умолчанию для диапазона является его значение, поэтому
[MyRange]
совпадает с[MyRange].Value
Вы также можете вызвать методы в диапазоне. Следующий выбирает MyRange
:
[MyRange].Select
Примечание. Одно предостережение состоит в том, что нотация ярлыка не работает со словами, которые используются в другом месте библиотеки VBA. Например, диапазон с именем
Width
не будет доступен как[Width]
но будет работать, как ожидалось, при доступе черезThisWorkbook.Worksheets("Sheet1").Range("Width")
Управление именованным диапазоном (диапазонами) с помощью диспетчера имен
Вкладка «Формулы»> «Определенная группа имен»> «Диспетчер имен»
Именованный менеджер позволяет:
- Создайте или измените имя
- Создать или изменить ссылку на ячейку
- Создать или изменить область действия
- Удалить существующий именованный диапазон
Named Manager предоставляет полезный быстрый поиск неработающих ссылок.
Именованные массивы диапазонов
Примерный лист
Код
Sub Example()
Dim wks As Worksheet
Set wks = ThisWorkbook.Worksheets("Sheet1")
Dim units As Range
Set units = ThisWorkbook.Names("Units").RefersToRange
Worksheets("Sheet1").Range("Year_Max").Value = WorksheetFunction.Max(units)
Worksheets("Sheet1").Range("Year_Min").Value = WorksheetFunction.Min(units)
End Sub
Результат
November 15, 2015/
Chris Newman
What Is A Named Range?
Creating a named range allows you to refer to a cell or group of cells with a custom name instead of the usual column/row reference. The HUGE benefit to using Named Ranges is it adds the ability to describe the data inside your cells. Let’s look at a quick example:
Can you tell if shipping costs are charged with the product price?
-
= (B7 + B5 * C4) * (1 + A3)
-
=(ShippingCharge + ProductPrice * Quantity) * (1 + TaxRate)
Hopefully, you can clearly see option number TWO gives you immediate insight to whether the cost of the products includes shipping costs. This allows the user to easily understand how the formula is calculating without having to waste time searching through cells to figure out what is what.
How Do I Use Named Ranges?
As a financial analyst, I play around with a bunch of rates. Examples could be anything from a tax rate to an estimated inflation rate. I use named ranges to organize my variables that either are changed infrequently (ie Month or Year) or something that will be static for a good amount of time (ie inflation rate). Here are a list of common names I use on a regular basis:
-
ReportDate
-
Year
-
Month
-
FcstID
-
TaxRate
-
RawData
Creating Unique Names On The Fly
It is super easy to create a Named Range. All you have to do is highlight the cell(s) you want to reference and give it a name in the Name Box. You name cannot have any spaces in it, so if you need to separate words you can either capitalize the beginning of each new word or use an underscore (_). Make sure you hit the ENTER key after you have finished typing the name to confirm the creation of the Named Range.
As a side note, any Named Range created with the Name Box has a Workbook scope. This means the named range can be accessed by any worksheet in your Excel file.
Creating Names With The «Name Manager»
If you want to customize your named ranges even more, you can open up the Name Manager (Formulas tab > Defined Names group > Name Manager button) to edit and create new named ranges.
I won’t go into great detail in this article, but know that with the Name Manager you can
-
Change the name of an existing Named Range
-
Change the reference formula
-
Specify the scope (what worksheets the name can be accessed from)
On To The VBA
Now that you have had a brief overview on Named Ranges, lets dig into some VBA macros you can use to help automate the use of Named Ranges.
Add A Named Range
The below VBA code shows ways you can create various types of named ranges.
Sub NameRange_Add()
‘PURPOSE: Various ways to create a Named Range
‘SOURCE: www.TheSpreadsheetGuru.com
Dim cell As Range
Dim rng As Range
Dim RangeName As String
Dim CellName As String
‘Single Cell Reference (Workbook Scope)
RangeName = «Price»
CellName = «D7»
Set cell = Worksheets(«Sheet1»).Range(CellName)
ThisWorkbook.Names.Add Name:=RangeName, RefersTo:=cell
‘Single Cell Reference (Worksheet Scope)
RangeName = «Year»
CellName = «A2»
Set cell = Worksheets(«Sheet1»).Range(CellName)
Worksheets(«Sheet1»).Names.Add Name:=RangeName, RefersTo:=cell
‘Range of Cells Reference (Workbook Scope)
RangeName = «myData»
CellName = «F9:J18»
Set cell = Worksheets(«Sheet1»).Range(CellName)
ThisWorkbook.Names.Add Name:=RangeName, RefersTo:=cell
‘Secret Named Range (doesn’t show up in Name Manager)
RangeName = «Username»
CellName = «L45»
Set cell = Worksheets(«Sheet1»).Range(CellName)
ThisWorkbook.Names.Add Name:=RangeName, RefersTo:=cell, Visible:=False
End Sub
Loop Through Named Ranges
This VBA macro code shows how you can cycle through the named ranges within your spreadsheet.
Sub NamedRange_Loop()
‘PURPOSE: Delete all Named Ranges in the Active Workbook
‘SOURCE: www.TheSpreadsheetGuru.com
Dim nm As Name
‘Loop through each named range in workbook
For Each nm In ActiveWorkbook.Names
Debug.Print nm.Name, nm.RefersTo
Next nm
‘Loop through each named range scoped to a specific worksheet
For Each nm In Worksheets(«Sheet1»).Names
Debug.Print nm.Name, nm.RefersTo
Next nm
End Sub
Delete All Named Ranges
If you need to clean up a bunch of junk named ranges, this VBA code will let you do it.
Sub NamedRange_DeleteAll()
‘PURPOSE: Delete all Named Ranges in the ActiveWorkbook (Print Areas optional)
‘SOURCE: www.TheSpreadsheetGuru.com
Dim nm As Name
Dim DeleteCount As Long
‘Delete PrintAreas as well?
UserAnswer = MsgBox(«Do you want to skip over Print Areas?», vbYesNoCancel)
If UserAnswer = vbYes Then SkipPrintAreas = True
If UserAnswer = vbCancel Then Exit Sub
‘Error Handler in case Delete Function Errors out
On Error GoTo Skip
‘Loop through each name and delete
For Each nm In ActiveWorkbook.Names
If SkipPrintAreas = True And Right(nm.Name, 10) = «Print_Area» Then GoTo Skip
‘Error Handler in case Delete Function Errors out
On Error GoTo Skip
‘Delete Named Range
nm.Delete
DeleteCount = DeleteCount + 1
Skip:
‘Reset Error Handler
On Error GoTo 0
Next
‘Report Result
If DeleteCount = 1 Then
MsgBox «[1] name was removed from this workbook.»
Else
MsgBox «[» & DeleteCount & «] names were removed from this workbook.»
End If
End Sub
Delete Named Ranges with Error References
This VBA code will delete only Named Ranges with errors in them. These errors can be caused by worksheets being deleted or rows/columns being deleted.
Sub NamedRange_DeleteErrors()
‘PURPOSE: Delete all Named Ranges with #REF error in the ActiveWorkbook
‘SOURCE: www.TheSpreadsheetGuru.com
Dim nm As Name
Dim DeleteCount As Long
‘Loop through each name and delete
For Each nm In ActiveWorkbook.Names
If InStr(1, nm.RefersTo, «#REF!») > 0 Then
‘Error Handler in case Delete Function Errors out
On Error GoTo Skip
‘Delete Named Range
nm.Delete
DeleteCount = DeleteCount + 1
End If
Skip:
‘Reset Error Handler
On Error GoTo 0
Next
‘Report Result
If DeleteCount = 1 Then
MsgBox «[1] errorant name was removed from this workbook.»
Else
MsgBox «[» & DeleteCount & «] errorant names were removed from this workbook.»
End If
End Sub
Anything Missing From This Guide?
Let me know if you have any ideas for other useful VBA macros concerning Named Ranges. Or better yet, share with me your own macros and I can add them to the article for everyone else to see! I look forward to reading your comments below.
About The Author
Hey there! I’m Chris and I run TheSpreadsheetGuru website in my spare time. By day, I’m actually a finance professional who relies on Microsoft Excel quite heavily in the corporate world. I love taking the things I learn in the “real world” and sharing them with everyone here on this site so that you too can become a spreadsheet guru at your company.
Through my years in the corporate world, I’ve been able to pick up on opportunities to make working with Excel better and have built a variety of Excel add-ins, from inserting tickmark symbols to automating copy/pasting from Excel to PowerPoint. If you’d like to keep up to date with the latest Excel news and directly get emailed the most meaningful Excel tips I’ve learned over the years, you can sign up for my free newsletters. I hope I was able to provide you with some value today and I hope to see you back here soon!
— Chris
Founder, TheSpreadsheetGuru.com
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Создаю в книге, например, на Лист1 именованный диапазон «RngSh1» С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
слэн Пользователь Сообщений: 5192 |
|
слэн Пользователь Сообщений: 5192 |
или names(«RngSh1»).referstorange |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Круто! С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
> А почему же в VBA тогда обращение из других модулей книги проходит без ошибки только с указанием имени листа, где расположен именованный диапазон? Ты имеешь в виду модули листа? Тут дело в том, что в модуле листа Решение: ThisWorkbook.Names(«RngSh1»).RefersToRange |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Если обращаюсь из стандартных модулей, то лист не указываю — всё работает. |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
С Лист2 С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Да, из стандартных модулей стандартное обращение И к стати, а как узнать имя листа, на котором лежит именованный диапазон? С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
> С Лист2 Еще раз: Names без квалификатора в Лист2 это Sheets(«Лист2»).Names, а имя расположено в книге. а не в листе. Поэтому ThisWorkbook.Names(«RngSh1»).RefersToRange |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
MsgBox Range(«NNN»).Parent.Name |
> как узнать имя листа, на котором лежит именованный диапазон? ThisWorkbook.Names(«RngSh1»).RefersToRange.parent.name |
|
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Алексей, С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
{quote}{login=Юрий М}{date=14.07.2011 12:37}{thema=}{post}MsgBox Range(«NNN»).Parent.Name{/post}{/quote} С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
{quote}{login=Alex_ST}{date=14.07.2011 12:44}{thema=Re: }{post}{quote}{login=Юрий М}{date=14.07.2011 12:37}{thema=}{post}MsgBox Range(«NNN»).Parent.Name{/post}{/quote}это работает только из стандартного модуля… |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
Спасибо, ребята, здорово помогли. С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
VovaK Пользователь Сообщений: 1716 |
{quote}{login=Alex_ST}{date=14.07.2011 12:39}{thema=}{post}Алексей, Алекс, если пишешь надстройку, то ThisWorkbook надо не нигде не забывать. Если конечно не обращаешься на активную книгу… |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
#17 15.07.2011 08:36:51 Володя, спасибо за совет. С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
Хитрости »
1 Май 2011 195503 просмотров
Именованные диапазоны
- Общие сведения об именованных диапазонах
- Как обратиться к именованному диапазону(как использовать в формулах и VBA)
- Ограничения для именованных диапазонов
- Создание именованного диапазона
- Изменение именованного диапазона
- Удаление именованного диапазона
Для чего вообще нужны именованные диапазоны? Обращение к именованному диапазону гораздо удобнее, чем прописывание адреса в формулах и VBA:
- Предположим, что в формуле мы ссылаемся на диапазон A1:C10 (возможно даже не один раз). Для примера возьмем простую функцию СУММ(суммирует значения указанных ячеек):
=СУММ(A1:C10;F1:K10)
Затем нам стало необходимо суммировать другие данные(скажем вместо диапазона A1:C10 в диапазоне D2:F11). В случае с обычным указанием диапазона нам придется искать все свои формулы и менять там адрес диапазона на новый. Но если назначить своему диапазону A1:C10 имя(к примеру ДиапазонСумм), то в формуле ничего менять не придется — достаточно будет просто изменить ссылку на ячейки в самом имени один раз. Я привел пример с одной формулой — а что, если таких формул 10? 30?
Примерно такая же ситуация и с использованием в кодах: указав имя диапазона один раз не придется каждый раз при изменении и перемещении этого диапазона прописывать его заново в коде. - Именованный диапазон не просто так называется именованным. Если взять пример выше — то отображение в формуле названия ДиапазонСумм куда нагляднее, чем A1:C10. В сложных формулах куда проще будет ориентироваться по именам, чем по адресам. Почему удобнее: если сменить стиль отображения ссылок (подробнее про стиль), то диапазон A1:C10 будет выглядеть как-то вроде этого: R1C1:R10C3. А если назначить имя — то оно как было ДиапазонСумм, так им и останется.
- При вводе формулы/функции в ячейку, можно не искать нужный диапазон, а начать вводить лишь первые буквы его имени и Excel предложит его ко вводу:
Данный метод доступен лишь в версиях Excel 2007 и выше
Как обратиться к именованному диапазону
Обращение к именованному диапазону из VBA
MsgBox Range("ДиапазонСумм").Address
MsgBox [ДиапазонСумм].Address
Читать подробнее про обращение к диапазонам из VBA
Обращение к именованному диапазону в формулах/функциях
- =СУММ(ДиапазонСумм)
- =ВПР(«Критерий»;ДиапазонСумм;2;0)
Читать подробнее про функцию ВПР
Если при указании диапазона в формуле выделить именованный диапазон, то его имя автоматически подставится в формулу вместо фактического адреса ячеек:
Ограничения, накладываемые на создание имен
- В качестве имени диапазона не могут быть использованы словосочетания, содержащие пробел. Вместо него лучше использовать нижнее подчеркивание _ или точку: Name_1, Name.1
- Первым символом имени должна быть буква, знак подчеркивания (_) или обратная косая черта (). Остальные символы имени могут быть буквами, цифрами, точками и знаками подчеркивания
- Нельзя в качестве имени использовать зарезервированные в Excel константы — R, C и RC(как прописные, так и строчные). Связано с тем, что данные буквы используются самим Excel для адресации ячеек при использовании стиля ссылок R1C1 (читать подробнее про стили ссылок)
- Нельзя давать именам названия, совпадающие с адресацией ячеек: B$100, D2(для стиля ссылок А1) или R1C1, R7(для стиля R1C1). И хотя при включенном стиле ссылок R1C1 допускается дать имени название вроде A1 или D130 — это не рекомендуется делать, т.к. если впоследствии стиль отображения ссылок для книги будет изменен — то Excel не примет такие имена и предложит их изменить. И придется изменять названия всех подобных имен. Если очень хочется — можно просто добавить нижнее подчеркивание к имени: _A1
- Длина имени не может превышать 255 символов
Создание именованного диапазона
Способ первый
обычно при создании простого именованного диапазона я использую именно его. Выделяем ячейку или группу ячеек, имя которым хотим присвоить -щелкаем левой кнопкой мыши в окне адреса и вписываем имя, которое хотим присвоить. Жмем Enter:
Способ второй
Выделяем ячейку или группу ячеек. Жмем правую кнопку мыши для вызова контекстного меню ячеек. Выбираем пункт:
- Excel 2007: Имя диапазона (Range Name)
- Excel 2010: Присвоить имя (Define Name)
либо:
Жмем Ctrl+F3
либо:
- 2007-2016 Excel: вкладка Формулы (Formulas) —Диспетчер имен (Name Manager) —Создать (New)(либо на той же вкладке сразу — Присвоить имя (Define Name))
- 2003 Excel: Вставка —Имя —Присвоить
Появляется окно создания имени
Имя (Name) — указывается имя диапазона. Необходимо учитывать ограничения для имен, которые я описывал в начале статьи.
Область (Scope) — указывается область действия создаваемого диапазона — Книга, либо Лист1:
- Лист1 (Sheet1) — созданный именованный диапазон будет доступен только из указанного листа. Это позволяет указать разные диапазоны для разных листов, но указав одно и тоже имя диапазона
- Книга (Workbook) — созданный диапазон можно будет использовать из любого листа данной книги
Примечание (Comment) — здесь можно записать пометку о созданном диапазоне, например для каких целей планируется его использовать. Позже эту информацию можно будет увидеть из диспетчера имен (Ctrl+F3)
Диапазон (Refers to) — при данном способе создания в этом поле автоматически проставляется адрес выделенного ранее диапазона. Его можно при необходимости тут же изменить.
Изменение диапазона
Чтобы изменить имя Именованного диапазона, либо ссылку на него необходимо всего лишь вызывать диспетчер имен(Ctrl+F3), выбрать нужное имя и нажать кнопку Изменить(Edit…).
Изменить можно имя диапазона(Name), ссылку(RefersTo) и Примечание(Comment). Область действия(Scope) изменить нельзя, для этого придется удалить текущее имя и создать новое, с новой областью действия.
Удаление диапазона
Чтобы удалить Именованный диапазон необходимо вызывать диспетчер имен(Ctrl+F3), выбрать нужное имя и нажать кнопку Удалить(Delete…).
Так же можно создавать списки с автоматическим определением его размера. Например, если значения в списке периодически пополняются или удаляются и чтобы каждый раз не переопределять границы таких диапазонов. Такие диапазоны называют динамическими.
Так же см.:
Как обратиться к диапазону из VBA
Динамические именованные диапазоны
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Skip to content
Как создать и выбрать именованный диапазон
На чтение 2 мин. Просмотров 4.2k.
Одной из наиболее полезных функций в Excel является возможность дать диапазону имя, таким образом, чтобы можно было легко идентифицировать и обратиться к нему с помощью VBA.
Вот шаги, которые нужно выполнить, чтобы создать диапазон вручную:
- Выберите диапазон, который вы хотите назвать.
- Перейдите на вкладку Формулы в ленте и выберите команду Определить имя.
- Дайте выбранному диапазону удобное для пользователя имя в диалоговом окне «Новое имя».
После нажатия кнопки ОК, ваш диапазон именуется. Чтобы убедиться в этом, вы можете перейти на вкладку Формулы и выбрать команду Диспетчер имен. Это активизирует диалоговое окно Диспетчер имен , где вы можете увидеть все примененные именованные диапазоны.
Создание именованного диапазона с помощью VBA является менее трудоемким.
Содержание
- Код макроса
- Как этот код работает
- Как макрос работает
- Код макроса
- Как этот код работает
- Код макроса
- Как использовать
Код макроса
Sub PrisvaivaemImyaDiapazonu() 'Присваиваем имя диапазону Range("D6:D17").Name = "MyData" End Sub
Как этот код работает
Следует признать, что трудно найти такую ситуацию, когда вам нужно было бы автоматизировать создание именованных диапазонов. Реальная эффективность достигается в манипулировании их с помощью VBA.
Как макрос работает
Вы просто передаете имя диапазона с помощью объекта Range. Этот макрос позволяет выбрать диапазон:
Код макроса
Sub ViborDiapazona() Range("MyData").Select End Sub
Как этот код работает
Как и в случае нормальных диапазонов, вы можете обратиться к диапазону с помощью оператора With … End With. Этот оператор говорит Excel, что любое действие, которое вы выполняете относится к объекту, который вы указали. Это не только избавит вас от необходимости повторять синтаксис, но и позволит легко добавлять действия, просто добавляя их между With и End With.
Код макроса
Sub ViborDiapazonaFormatirovanieWith() With Range("MyData") .NumberFormat = "#,##0" .Font.Bold = True .Interior.ColorIndex = 36 End With End Sub
Как использовать
Для реализации такого рода макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код