Vba excel присвоить имя диапазону


November 15, 2015/



Chris Newman

Blog Post Banner (hdr).png

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?

  1. = (B7 + B5 * C4) * (1 + A3)

  2. =(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.

Name Box.png

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

  1. Change the name of an existing Named Range

  2. Change the reference formula

  3. 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

Присвоение диапазона ячеек объектной переменной в VBA Excel. Адресация ячеек в переменной диапазона и работа с ними. Определение размера диапазона. Примеры.

Присвоение диапазона ячеек переменной

Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

Dim myRange1 As Variant

Dim myRange2 As Object

Dim myRange3 As Range

Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

Присваивается переменной диапазон ячеек с помощью оператора Set:

Set myRange1 = Range(«B5:E16»)

Set myRange2 = Range(Cells(3, 4), Cells(26, 18))

Set myRange3 = Selection

В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.

Адресация ячеек в диапазоне

К ячейкам присвоенного диапазона можно обращаться по их индексам, а также по индексам строк и столбцов, на пересечении которых они находятся.

Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

‘обращение по индексам строки и столбца

myRange.Cells(2, 4)

‘обращение по индексу ячейки

myRange.Cells(9)

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

обращение к первой строке присвоенного диапазона размерностью 5х5:

myRange.Range(«A1:E1»)

‘или

myRange.Range(Cells(1, 1), Cells(1, 5))

и обращение к первому столбцу присвоенного диапазона размерностью 5х5:

myRange.Range(«A1:A5»)

‘или

myRange.Range(Cells(1, 1), Cells(5, 1))

Работа с диапазоном в переменной

Работать с диапазоном в переменной можно точно также, как и с диапазоном на рабочем листе. Все свойства и методы объекта Range действительны и для диапазона, присвоенного переменной. При обращении к ячейке без указания свойства по умолчанию возвращается ее значение. Строки

MsgBox myRange.Cells(6)

MsgBox myRange.Cells(6).Value

равнозначны. В обоих случаях информационное сообщение MsgBox выведет значение ячейки с индексом 6.

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

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

Пример 1 — работа со значениями

Скопируйте процедуру в программный модуль и запустите ее выполнение.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Sub Test1()

‘Объявляем переменную

Dim myRange As Range

‘Присваиваем диапазон ячеек

Set myRange = Range(«C6:E8»)

‘Заполняем первую строку

‘Присваиваем значение первой ячейке

myRange.Cells(1, 1) = 5

‘Присваиваем значение второй ячейке

myRange.Cells(1, 2) = 10

‘Присваиваем третьей ячейке

‘значение выражения

myRange.Cells(1, 3) = myRange.Cells(1, 1) _

* myRange.Cells(1, 2)

‘Заполняем вторую строку

myRange.Cells(2, 1) = 20

myRange.Cells(2, 2) = 25

myRange.Cells(2, 3) = myRange.Cells(2, 1) _

+ myRange.Cells(2, 2)

‘Заполняем третью строку

myRange.Cells(3, 1) = «VBA»

myRange.Cells(3, 2) = «Excel»

myRange.Cells(3, 3) = myRange.Cells(3, 1) _

& » « & myRange.Cells(3, 2)

End Sub

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

Пример 2 — работа с форматами

Продолжаем работу с тем же диапазоном рабочего листа «C6:E8»:

Sub Test2()

‘Объявляем переменную

Dim myRange As Range

‘Присваиваем диапазон ячеек

Set myRange = Range(«C6:E8»)

‘Первую строку выделяем жирным шрифтом

myRange.Range(«A1:C1»).Font.Bold = True

‘Вторую строку выделяем фоном

myRange.Range(«A2:C2»).Interior.Color = vbGreen

‘Третьей строке добавляем границы

myRange.Range(«A3:C3»).Borders.LineStyle = True

End Sub

Опять же, обратите внимание, что все изменения форматов в присвоенном диапазоне отобразились на рабочем листе, несмотря на то, что мы непосредственно с ячейками рабочего листа не работали.

Пример 3 — копирование и вставка диапазона из переменной

Значения ячеек диапазона, присвоенного переменной, передаются в другой диапазон рабочего листа с помощью оператора присваивания.

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

В примере используется тот же диапазон, что и в первых двух, так как он уже заполнен значениями и форматами.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Sub Test3()

‘Объявляем переменную

Dim myRange As Range

‘Присваиваем диапазон ячеек

Set myRange = Range(«C6:E8»)

‘Присваиваем ячейкам рабочего листа

‘значения ячеек переменной диапазона

Range(«A1:C3») = myRange.Value

MsgBox «Пауза»

‘Копирование диапазона переменной

‘и вставка его на рабочий лист

‘с указанием начальной ячейки

myRange.Copy Range(«E1»)

MsgBox «Пауза»

‘Копируем и вставляем часть

‘диапазона из переменной

myRange.Range(«A2:C2»).Copy Range(«E11»)

End Sub

Информационное окно MsgBox добавлено, чтобы вы могли увидеть работу процедуры поэтапно, если решите проверить ее в своей книге Excel.

Размер диапазона в переменной

При получении диапазона с помощью метода Application.InputBox и присвоении его переменной диапазона, бывает полезно узнать его размерность. Это можно сделать следующим образом:

Sub Test4()

‘Объявляем переменную

Dim myRange As Range

‘Присваиваем диапазон ячеек

Set myRange = Application.InputBox(«Выберите диапазон ячеек:», , , , , , , 8)

‘Узнаем количество строк и столбцов

MsgBox «Количество строк = « & myRange.Rows.Count _

& vbNewLine & «Количество столбцов = « & myRange.Columns.Count

End Sub

Запустите процедуру, выберите на рабочем листе Excel любой диапазон и нажмите кнопку «OK». Информационное сообщение выведет количество строк и столбцов в диапазоне, присвоенном переменной myRange.

Появилась необходимость задать имя выделеному диапазону с помощью VBA. решил воспользоваться макрорекодером и получил следующее:  

  Range(Selection, Selection.End(xlToRight)).Select  
   Range(Selection, Selection.End(xlDown)).Select  

  ActiveWorkbook.Names(«кодирование»).Delete  
   ActiveWorkbook.Names.Add Name:=»кодирование», RefersToR1C1:= _  
       «=Заготовительный!R1C1:R3C3»  

  Первый блок кода выделяет диапазон, а второй должен удалять имя «кодирование», если таковое имеется и присвоить это имя выделенному диапазону. Но как видете макрорекодер дает абсолютную ссылку на диапазон «=Заготовительный!R1C1:R3C3» и в случае если будет добавлена строка или столбец имя будет присваиваться не всему выделеному диапазону а только для «=Заготовительный!R1C1:R3C3»  
знатоки VBA помощи в решении.

Вступление

Тема должна включать информацию, конкретно связанную с именованными диапазонами в 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")

Управление именованным диапазоном (диапазонами) с помощью диспетчера имен

Вкладка «Формулы»> «Определенная группа имен»> «Диспетчер имен»

Именованный менеджер позволяет:

  1. Создайте или измените имя
  2. Создать или изменить ссылку на ячейку
  3. Создать или изменить область действия
  4. Удалить существующий именованный диапазон

введите описание изображения здесь


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

Результат

введите описание изображения здесь

Skip to content

Как создать и выбрать именованный диапазон

На чтение 2 мин. Просмотров 4.2k.

Одной из наиболее полезных функций в Excel является возможность дать диапазону имя, таким образом, чтобы можно было легко идентифицировать и обратиться к нему с помощью VBA.
Вот шаги, которые нужно выполнить, чтобы создать диапазон вручную:

  1. Выберите диапазон, который вы хотите назвать.
  2. Перейдите на вкладку Формулы в ленте и выберите команду Определить имя.
  3. Дайте выбранному диапазону удобное для пользователя имя в диалоговом окне «Новое имя».

После нажатия кнопки ОК, ваш диапазон именуется. Чтобы убедиться в этом, вы можете перейти на вкладку Формулы и выбрать команду Диспетчер имен. Это активизирует диалоговое окно Диспетчер имен , где вы можете увидеть все примененные именованные диапазоны.

Define Name

New Name

Name Manager

Создание именованного диапазона с помощью VBA является менее трудоемким.

Содержание

  1. Код макроса
  2. Как этот код работает
  3. Как макрос работает
  4. Код макроса
  5. Как этот код работает
  6. Код макроса
  7. Как использовать

Код макроса

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

Как использовать

Для реализации такого рода макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код

0 / 0 / 0

Регистрация: 22.11.2012

Сообщений: 5

1

Макрос, присваивающий имя диапазону ячейки

22.11.2012, 21:49. Показов 8057. Ответов 7


Студворк — интернет-сервис помощи студентам

маркос присваивающий имя диапазону ячейки



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

22.11.2012, 22:09

2

Visual Basic
1
2
3
4
5
6
7
8
9
Sub Макрос1()
'
' Макрос1 Макрос
'
 
'
'    Range("B14:C14").Select 'это лишнее, отключаем
    ActiveWorkbook.Names.Add Name:="имя", RefersToR1C1:="=Лист1!R14C2:R14C3"
End Sub

У Вас рекордер за неуплату отключен? Т.е. Эксель Стартер? (не знаю, может там всёже есть рекордер?)



1



0 / 0 / 0

Регистрация: 22.11.2012

Сообщений: 5

29.11.2012, 21:16

 [ТС]

3

спасибо это не то что надо, как мне объяснили макрос должен работать в любом месте и спрашивать какое ему задать имя



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

29.11.2012, 21:46

4

Visual Basic
1
2
3
4
5
Sub bb()
On Error Resume Next
Selection.Name = InputBox("Введите имя для выделенного диапазона")
If Err Then MsgBox "Имя не присвоено!", vbExclamation
End Sub



1



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

30.11.2012, 06:38

5

Казанский, использование On Error Resume Next должно всегда сопровождаться On Error GoTo 0, чтобы ошибки пропускались только на заданном участке кода.



0



Апострофф

Заблокирован

30.11.2012, 07:34

6

Скрипт,

Цитата
Сообщение от MSDN

Если оператор On Error GoTo 0 отсутствует, обработчик событий автоматически отключается при выходе из процедуры.

Какой смысл ставить его перед End Sub в данном случае?



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

30.11.2012, 07:36

7

Цитата
Сообщение от Апострофф
Посмотреть сообщение

Какой смысл ставить его перед End Sub в данном случае?

информационный.



0



Апострофф

30.11.2012, 07:48


    Макрос, присваивающий имя диапазону ячейки

Не по теме:

Цитата
Сообщение от Скрипт
Посмотреть сообщение

использование On Error Resume Next должно всегда сопровождаться On Error GoTo 0

Звучало как закон=-O
А оказалось8-)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

30.11.2012, 07:48

8

Именованный диапазон Excel VBA

Когда мы работаем с большим объемом данных, чтобы избежать ссылки на определенную ячейку или диапазоны ячеек, мы обычно создаем именованные диапазоны, и это позволяет нам ссылаться на требуемый диапазон ячеек через именованный диапазон. В VBA для создания диапазона имен у нас есть функция добавления имени.

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

Вы можете скачать этот шаблон Excel для именованного диапазона VBA здесь — Шаблон Excel для именованного диапазона VBA

Как создавать именованные диапазоны?

Создание именных диапазонов — это прогулка в парке. Первое, что нам нужно сделать, это определить ячейки, в которых мы хотим создать диапазон имен в excel.

Для примера посмотрите на изображение ниже.

Чтобы получить прибыль в ячейке B4, я применил формулу B2 — B3.

Это обычное дело. Но как насчет создания имен и применения формулы вроде «Продажи» — «Стоимость».

Поместите курсор в ячейку B2> Перейти к полю имени и назовите его Продажи.

Поместите курсор в ячейку B3 и назовите ее Стоимость.

Теперь в столбце прибыли мы можем ссылаться на эти имена вместо ссылок на ячейки.

Это основная особенность именованных диапазонов.

Как создать именованные диапазоны с помощью кода VBA?

Пример # 1

Вы когда-нибудь думали о создании именованного диапазона с помощью кода VBA?

Выполните следующие шаги, чтобы создать именованный диапазон.

Шаг 1: Определите переменную как «Диапазон».

Код:

 Sub NamedRanges_Example () Dim Rng As Range End Sub 

Шаг 2: Теперь установите переменную «Rng» для конкретных ячеек, которые вы хотите назвать.

Код:

 Sub NamedRanges_Example () Dim Rng As Range Set Rng = Range ("A2: A7") End Sub 

Шаг 3. Использование объекта «ThisWorkbook» для доступа к свойству Names.

У нас так много параметров с методом Names.Add . Ниже приведены объяснения.

[Имя]: Имя — это не что иное, как имя, которое мы хотели бы дать указанному диапазону.

При именовании ячейки она не должна содержать никаких специальных символов, кроме символа подчеркивания (_), а также не должна содержать пробелов, она не должна начинаться с числовых значений.

[Относится к]: Это не что иное, как диапазон ячеек, о которых мы говорим.

Я думаю, что этих двух параметров достаточно, чтобы начать работу.

Шаг 4: В имени аргумент входит имя, которое вы хотите дать. Я назвал его «SalesNumbers».

Код:

 Sub NamedRanges_Example () Dim Rng As Range Set Rng = Range ("A2: A7") ThisWorkbook.Names.Add Name: = "SalesNumbers" End Sub 

Шаг 5: В аргументе ссылается на диапазон ячеек, который мы хотим создать. В имени переменной «Rng» мы уже присвоили диапазон ячеек от A2 до A7, поэтому укажите аргумент как «Rng».

Код:

 Sub NamedRanges_Example () Dim Rng As Range Set Rng = Range ("A2: A7") ThisWorkbook.Names.Add Name: = "SalesNumbers", RefersTo: = Rng End Sub 

Хорошо, этот код создаст именованный диапазон для ячеек от A2 до A7.

Теперь на листе я создал несколько чисел от A2 до A7.

In the A8 cell, I want to have the total of the above cell numbers. Using named range, we will create a SUM of these numbers.

Code:

 Sub NamedRanges_Example() Dim Rng As Range Set Rng = Range("A2:A7") ThisWorkbook.Names.Add Name:="SalesNumbers", RefersTo:=Rng Range("A8").Value = WorksheetFunction.Sum(Range("SalesNumbers")) End Sub 

If you run this code manually or by pressing f5 key then, we will get the total of a named range in cell A8.

This is the basic must-know facts about “Named Ranges”.

Example #2

In VBA using RANGE object, we can refer to the cells. Similarly, we can also refer to those cells by using named ranges as well.

For example, in the above example, we have named the cell B2 as “Sales” and B3 as “Cost”.

By using actual cell reference we refer to those cells like this.

Code:

 Sub NamedRanges() Range("B2").Select 'This will select the B2 cell Range("B3").Select 'This will select the B3 cell End Sub 

Since we already created these cells we can refer to using those names like the below.

Code:

 Sub NamedRanges() Range("Sales").Select 'This will select cell named as "Sales" i.e. B2 cell Range("Cost").Select 'This will select cell named as "Cost" i.e. B3 cell End Sub 

Like this using Named Ranges, we can make use of those cells. Using these named we can calculate the profit amount in cell B4. For this first name the cell B4 as Profit.

Now in the VBA editor apply this code.

Code:

 Sub NamedRanges_Example1() Range("Profit").Value = Range("Sales") - Range("Cost") End Sub 

This will calculate the profit amount in the cell named “Profit”.

  • Обзор именного диапазона Excel VBA

Обзор именного диапазона Excel VBA

В Excel мы узнали, как назвать диапазон и использовать его. Теперь мы узнаем, как использовать этот диапазон имен в VBA, и в дополнение к этому мы также узнаем, как назвать диапазон из VBA. Диапазон является важной частью рабочей таблицы, поскольку он содержит данные для нас. Конкретное присвоение имен диапазонам помогает нам определить, какая часть диапазона содержит какие данные.

Давайте начнем с того, как мы можем назвать диапазон в Excel, а затем использовать его в VBA. Чтобы назвать группу диапазонов в Excel, мы просто выбираем диапазоны следующим образом:

Теперь есть поле, где оно упоминается как A1, мы нажимаем на него и даем ему имя.

Коробка называется коробкой имени, и мы используем ее, чтобы дать имя нашему диапазону. Для текущего примера я дал его в качестве именованного диапазона. Теперь, когда мы дали имя диапазона, как мы используем его в VBA. Предположим, что мы должны были изменить цвет интерьера вышеупомянутого диапазона ранее в VBA, что мы сделали в VBA, так как мы ссылались на диапазон следующим образом:

 Рабочие листы («Лист1»). Диапазон («А1: В5»). Интерьер.Цвет = Цветовой код 

Теперь, когда мы дали диапазону имя, мы можем сделать следующее, чтобы изменить цвет диапазона следующим образом:

 Рабочие листы («Sheet1»). Диапазон («NEW»). Interior.Color = Some Colour code 

NEW — это имя диапазона, которое мы дали для выбора ячейки A1: B5. Вот как мы используем диапазоны имен в VBA, как только мы назвали их.

Теперь мы можем также назвать диапазоны, используя VBA, слишком хорошо, это немного более длительный процесс, чем выше, но давайте пройдемся по нему.

Чтобы присвоить VBA диапазон в рабочей таблице, мы используем следующий код:

 Установите myWorksheet = ThisWorkbook.Worksheets («Именованный диапазон») 
 Установите myNamedRangeWorksheet = myWorksheet.Range («Диапазон значений») 

Как использовать именованный диапазон в Excel VBA?

Существует два метода использования именованного диапазона в Excel VBA:

  1. Во-первых, мы называем диапазон в Excel, а затем используем его в VBA.
  2. Второй метод заключается в создании именованного диапазона в самом VBA и использовании его свойств.

Ниже приведены различные примеры использования именованного диапазона в Excel:

Вы можете скачать этот шаблон Excel с именованным диапазоном VBA здесь — Шаблон Excel с именованным диапазоном VBA

Пример № 1

Для первого примера давайте используем диапазон имен, который мы использовали выше, превратив его в таблицу Excel. Выполните следующие шаги:

Шаг 1: Выберите диапазон, который мы хотим назвать первым, следующим образом:

Шаг 2: Над диапазоном мы используем поле для имени, чтобы присвоить имя диапазону, в этом примере я назвал диапазон как Новый .

Шаг 3. Теперь давайте перейдем к VBA, перейдите на вкладку « Разработчик » и нажмите Visual Basic, чтобы войти в VBA.

Шаг 4: Как только мы попадаем в VBA, нам нужно вставить модуль, чтобы мы могли писать в нем код. Сделайте следующее

Шаг 5: Теперь давайте начнем писать код, для этого нам нужно сначала назвать макрос следующим образом:

Код:

 Sub Sample () End Sub 

Шаг 6: Напишите следующий код, чтобы сначала активировать лист, чтобы использовать диапазон имен.

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать End Sub 

Шаг 7: Теперь давайте используем наш диапазон имен следующим образом:

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать диапазон ("NEW"). Значение = 10 End Sub 

Шаг 8: Как только мы запустим приведенный выше код, мы увидим, что каждая ячейка в нашем диапазоне имен имеет такое же значение, как показано ниже:

Шаг 9: Давайте также проверим, можем ли мы изменить свойства ячейки. Давайте изменим цвет диапазона, используя диапазон имен следующим образом:

Код:

 Sub Sample () Worksheets ("Sheet1"). Активировать Range ("NEW"). Value = 10 Range ("NEW"). Interior.Color = 255 End Sub 

Шаг 10: Запустите приведенный выше код, нажав F5 или кнопку Run, и увидите следующий результат,

Пример № 2

Сначала мы создадим именованный диапазон с помощью VBA и используем свойства диапазона имен в самом VBA. Выполните следующие шаги:

Шаг 1: Теперь давайте начнем писать код, для этого нам нужно сначала назвать макрос следующим образом:

Код:

 Sub Sample1 () End Sub 

Шаг 2: Объявите переменную, которая будет хранить имя диапазона имен следующим образом,

Код:

 Sub Sample1 () Dim myRangeName As String End Sub 

Шаг 3: Теперь давайте установим диапазон имен следующим образом, в этом примере все, что мы выбрали в качестве диапазона, будет нашим именованным диапазоном,

Код:

 Sub Sample1 () Dim myRangeName As String myRangeName = "namedRangeFromSelection" End Sub 

Это то, что я выбрал для именованного диапазона ячеек диапазона A1: C5 на листе 2,

Шаг 4: Теперь давайте назовем диапазон следующим кодом:

Код:

 Sub Sample1 () Dim myRangeName As String myRangeName = "namedRangeFromSelection" ThisWorkbook.Names.Add Name: = myRangeName, RefersTo: = Выбор End Sub 

Шаг 5: Запустите приведенный выше код, мы увидим, что мы создали диапазон имен на листе 2 с именем namedrangefromselection,

Шаг 6: Теперь давайте воспользуемся этим именем в диапазоне, как мы использовали в предыдущем примере следующим образом:

Код:

 Sub Sample1 () Dim myRangeName As String myRangeName = "namedRangeFromSelection" ThisWorkbook.Names.Add Name: = myRangeName, RefersTo: = Диапазон выбора ("namedRangeFromSelection"). Значение = 10 Диапазон ("namedRangeFromSelectionor5 = End.5". Интерьер). Sub 

Шаг 7: Запустите приведенный выше код с кнопки F5 и увидите результат следующим образом:

То, что нужно запомнить

  • Именованные диапазоны — это имя, данное группе или диапазону ячеек.
  • Именованный диапазон используется для обозначения определенного диапазона ячеек, к которому необходимо обращаться позже.
  • Мы можем назвать диапазон в Excel или VBA.
  • При создании именованного диапазона в VBA нам нужно использовать функцию добавления имени в VBA.

Рекомендуемые статьи

Это руководство по VBA Named Range. Здесь мы обсудим, как использовать Named Range в Excel VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Пошаговое руководство по значению VBA
  2. Как редактировать выпадающий список в Excel?
  3. Индекс VBA вне диапазона
  4. Импорт данных в Excel

Хитрости »

1 Май 2011              195530 просмотров


Именованные диапазоны

  • Общие сведения об именованных диапазонах
  • Как обратиться к именованному диапазону(как использовать в формулах и 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

Обращение к именованному диапазону в формулах/функциях

  1. =СУММ(ДиапазонСумм)
  2. =ВПР(«Критерий»;ДиапазонСумм;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
ссылки
статистика

Понравилась статья? Поделить с друзьями:
  • Vba excel приостановить выполнение макроса
  • Vba excel проверка данных список
  • Vba excel примечание ячейки
  • Vba excel проверка ввода
  • Vba excel примеры это