art013 Пользователь Сообщений: 166 |
Всем доброго дня! В моей книге очень много именованных диапазонов, которые при копировании с нее листа остаются в нем и приходится их удалять вручную (выделяю все, delete и за секунду их нет). В случае если это делать макросом, который циклом перебирает все имена и удаляет их, приходится ждать в районе минуты =( Изменено: art013 — 07.12.2016 11:27:28 |
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Соберите диапазоны в Union и удаляйте одним махом. Я сам — дурнее всякого примера! … |
art013 Пользователь Сообщений: 166 |
Ага, отличная идея |
Karataev Пользователь Сообщений: 2306 |
#4 07.12.2016 11:35:26 Может быть отключение пересчета формул ускорит удаление имен:
|
||
art013 Пользователь Сообщений: 166 |
Karataev, не может быть а ускорит =), Спасибо! |
Alex_ST Пользователь Сообщений: 2746 На лицо ужасный, добрый внутри |
#6 07.12.2016 14:16:57 Ну, вообще-то тупое удаление всех имён с листа, включая и невидимые, может привести к неприятностям. Автофильтр работать перестанет. Области печати тоже удалятся.
Для чистки только активного листа
Хоть и помедленнее будет, зато меньше вероятность неприятностей Изменено: Alex_ST — 07.12.2016 14:17:47 С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!) |
||
vikttur Пользователь Сообщений: 47199 |
#7 07.12.2016 14:28:33
Уж-ж-жасное неудобство! Целую минуту ждать, пока удалятся имена из одной книги! Заметьте — всего одна книга, которую нужно почистить. И такая проблема! |
||
Managing and removing named ranges in Excel can be a challenging task as you would have to do this one by one for each field. We’re going to show you how to delete named range Excel using VBA with one click.
How to delete named range Excel
Each named range is an object in the Names collection of a workbook. We can access these names using a For Each…Next loop and checking their references with the RefersToRange method. The RefersToRange method returns the reference as a Range object that we can use to find its parent worksheet.
The worksheet name a named range belongs to can be found with Name property under the Parent method. Then, using an If statement you can find the parent worksheet name.
For Each nm In ActiveWorkbook.Names
If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete
Next nm
You can use codes in two ways:
- Module
- Immediate Window
In the Module method, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.
The Immediate Window method, on the other hand, is essentially a quick and dirty method where you can simply copy and paste the code into the Immediate Window and press the Enter key to run it. Unfortunately, any code you use in the Immediate Window will not be saved. Also note that icons and keyboard shortcuts will not be available.
Delete named ranges in a worksheet
Module method:
Sub DeleteNamedRangesInWorksheet()
Dim nm As Name
For Each nm In ActiveWorkbook.Names
If nm.RefersToRange.Parent.Name = «Sheet1» Then nm.Delete
Next nm
End Sub
Immediate Window method:
For Each nm In ActiveWorkbook.Names: If nm.RefersToRange.Parent.Name = "Sheet1" Then nm.Delete: Next nm
Удаление именованных диапазонов. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Предполагая, что вы создали много именованных диапазонов в своей книге, но теперь вам больше не нужны эти именованные диапазоны, как вы могли бы удалить все именованные диапазоны сразу в Excel?
- Удалите все именованные диапазоны, перейдя в Диспетчер имен
- Удалить все именованные диапазоны с кодом VBA
Удалите все именованные диапазоны, перейдя в Диспетчер имен
В диалоговом окне «Диспетчер имен» вы можете создавать, редактировать и удалять именованные диапазоны по своему усмотрению. Пожалуйста, сделайте так:
1, Перейти к Менеджер имен кликнув Формула > Менеджер имен, см. снимок экрана:
2. В Менеджер имен диалог, нажмите Shift клавишу, чтобы выбрать все названные диапазоны, или удерживайте Ctrl нажмите клавишу, чтобы выбрать те, которые вам не нужны, см. снимок экрана:
3, Затем нажмите Удалить в верхней части диалогового окна, и появится окно с напоминанием о том, что вы обязательно удалите имена.
4. Затем нажмите OK, все названные диапазоны были удалены сразу.
Найти и заменить все именованные диапазоны соответствующими ссылками на ячейки в формулах
Kutools for ExcelАвтора Заменить имена диапазонов Утилита может легко найти все формулы, применяющие именованные диапазоны в выбранном диапазоне, на указанном листе или на всех листах. И основная роль этой утилиты — заменить все именованные диапазоны соответствующими ссылками на ячейки в этих формулах.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
Удалить все именованные диапазоны с кодом VBA
Следующий короткий код VBA также может помочь вам удалить все именованные диапазоны в книге.
1. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Код VBA: удалить все именованные диапазоны в Excel
Sub DeleteNames()
'Update 20140314
Dim xName As Name
For Each xName In Application.ActiveWorkbook.Names
xName.Delete
Next
End Sub
3, Затем нажмите F5 ключ для запуска этого кода, все имена в книге будут немедленно удалены.
Статьи по теме:
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (6)
Оценок пока нет. Оцените первым!
I have searched for an answer for hours, and can’t search anymore. Have Seen lots of discussions about deleting all range names from a workbook or a worksheet. However, I need to delete multiple Range Names from a single Range while leaving other Range Names for other ranges on the same sheet and/or within the same workbook alone. Might the code look something like this?:
Sub Delete_My_Named_Ranges()
Dim nName As Name
Dim wbk As Workbook
Dim Sht As Worksheet
Dim rgNm As Range, aCell As Range
Set wbk = Workbooks("testRgNmDelete.xlsm")
Set Sht = wbk.Worksheets("Sheet1")
Set rgNm = Sht.Range("$A$1")
For Each nName In ThisWorkbook.Names
Set aCell = Range(nName)
If Not Intersect(aCell, rgNm) Is Nothing Then
nName.Delete
End If
Next
End Sub
OK, the above code works for a fixed range («$A:$1»). But I need to be able to set rgNm as a variable instead of as a fixed range. here is an example, the error now is on the statement «Set aCell = Range(nName).»
Private Sub cboProductType_Change()
Dim wbSKUM As Workbook
Dim ws As Worksheet, wsLUL As Worksheet, wsLU As Worksheet
Dim rgPTL As Range, rgTable1 As Range, rgA1 As Range, rgA1LU As Range
Dim rgNm As Range, rgFormula As Range, aCell As Range
Dim sFormula As String
Dim nName As Name
Set wbSKUM = Workbooks("XBS_SKU_Master.xlsm")
Set ws = wbSKUM.Worksheets("SKUMaster")
Set wsLUL = wbSKUM.Worksheets("LookupLists")
Set wsLU = wbSKUM.Worksheets("Lookup")
Set rgPTL = wsLUL.Range("ProdTypeLookUp")
Set rgTable1 = ws.Range("Table1")
sFormula = "=SUBSTITUTE(SUBSTITUTE(F2,"" "",""_""),""-"","""")"
'clear Product Type Lookup List (Column D) to be sure no data remains
wsLUL.Activate
Range(Range("F2"), Range("F2").End(xlDown)).Select
Selection.Cells.Value = vbNullString
Set rgNm = Selection
For Each nName In ThisWorkbook.Names
Set aCell = Range(nName)
If Not Intersect(aCell, rgNm) Is Nothing Then
nName.Delete
End If
Next
Thanks again!
Вступление
Тема должна включать информацию, конкретно связанную с именованными диапазонами в 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
Результат
Хитрости »
1 Май 2011 195505 просмотров
Именованные диапазоны
- Общие сведения об именованных диапазонах
- Как обратиться к именованному диапазону(как использовать в формулах и 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
ссылки
статистика
Как макросом удалить лишние имена диапазонов в книге
- Franck
- Начинающий
- Сообщения: 12
- Зарегистрирован: 09.04.2004 (Пт) 12:21
Как макросом удалить лишние имена диапазонов в книге
Такая ситуация. В рабочей книге присутстует много имен ячеек уровня Workbook (видны, если выбрать Вставка-Имя-Присвоить), которые ссылаются на внешние файлы типа
=’C:My Download FilesExcel[fin_analis_3_0.xls]Balance’!$C$172
или вообще выдают ошибку типа
=#REF!$7:$7
Как макросом можно их удалить?
Конечно, можно просто удалить все вот так:
- Код: Выделить всё
Sub DeleteExternalNames()
Dim n As Name
Dim count As Integer
For Each n In ActiveWorkbook.Names
n.Delete
count = count + 1
Next n
MsgBox "Все имена в количестве " & count & " удалены"
End Sub
Но имена, которые ссылаются на ячейки в моей рабочей книге хочется оставить. Помогите, плиз!
- GSerg
- Шаман
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 02.02.2006 (Чт) 14:22
Если n.referestorange существует, и если n.referstorange.worksheet.parent is thisworkbook, то не удалять.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
- Franck
- Начинающий
- Сообщения: 12
- Зарегистрирован: 09.04.2004 (Пт) 12:21
Franck » 02.02.2006 (Чт) 15:12
Не получается. Ошибку выдает.
- GSerg
- Шаман
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 02.02.2006 (Чт) 15:33
Я мог бы спросить «где и какую». Но не буду. Видимо, человек имеет чёткое намерение помочь себе сам. Не вопрос.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
- Franck
- Начинающий
- Сообщения: 12
- Зарегистрирован: 09.04.2004 (Пт) 12:21
Franck » 02.02.2006 (Чт) 15:42
Извините, плиз.
У меня с синтаксисом проблемы
на строку Set r = n.RefersToRange ругается, выдает ошибку с кодом 91. Я не профессиональный программист, поэтому даже такой макрос для меня труден, с утра уже бьюсь.
- Franck
- Начинающий
- Сообщения: 12
- Зарегистрирован: 09.04.2004 (Пт) 12:21
Franck » 02.02.2006 (Чт) 18:34
GSerg
Спасибо за совет! Разобрался, все просто оказалось. Проверку на ошибку забыл вставить.
- Код: Выделить всё
Set r = Nothing
On Error Resume Next
Set r = n.RefersToRange
If r Is Nothing Then
n.Delete
и т.д.
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: PetalBot и гости: 3