требуется очистить ячейки, нашел только макрос «удалить» rivate Sub CommandButton2_Click() замена Delete -> Clean не сработала :))) |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Попробуйте clear. Или clearcontents. Я сам — дурнее всякого примера! … |
Range(«B17:K500»).Select |
|
vikttur Пользователь Сообщений: 47199 |
Clear Чаще справку читайте. |
Hugo Пользователь Сообщений: 23249 |
Зачем искать? Range(«A1:A6»).Select выкидываем ненужное: Если аналогично сделать через меню «очистить всё», то получим |
Формат не удаляет: Формат удаляет: |
|
формат должен оставаться. всем пасибо! тема клозет |
|
vikttur Пользователь Сообщений: 47199 |
Говорил же автору — больше нужно читать closet — каморка |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#9 09.07.2012 09:52:32 {quote}{login=d-konstruktor}{date=09.07.2012 09:45}{thema=}{post}тема клозет{/post}{/quote}Клозет — помещение для отправления естественных надобностей. |
Программное удаление ячеек в VBA Excel со сдвигом влево или со сдвигом вверх методом Delete объекта Range. Константы XlDeleteShiftDirection.
Range.Delete – это метод, удаляющий объект Range (диапазон ячеек, одну ячейку) со сдвигом замещающих ячеек справа-налево или снизу-вверх для замены удаленных ячеек.
Синтаксис
Expression.Delete (Shift) |
Expression – выражение (переменная), возвращающее объект Range.
Параметры
Параметр | Описание |
---|---|
Shift | Константа из коллекции XlDeleteShiftDirection, определяющая способ сдвига замещающих ячеек для замены удаленных ячеек. |
Если параметр Shift опущен, Microsoft Excel самостоятельно выберет способ сдвига замещающих ячеек в зависимости от формы диапазона.
Константы XlDeleteShiftDirection:
Константа | Значение | Описание |
---|---|---|
xlShiftToLeft | -4159 | Замещающие ячейки сдвигаются справа-налево. |
xlShiftUp | -4162 | Замещающие ячейки сдвигаются снизу-вверх. |
Примеры
Удаление ячейки со сдвигом влево:
ActiveCell.Delete xlShiftToLeft Range(«D4»).Delete xlShiftToLeft Cells(6, 8).Delete xlShiftToLeft |
Удаление диапазона со сдвигом вверх:
Selection.Delete xlShiftUp Range(«E3:H9»).Delete xlShiftUp |
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 Excel. Range.Clear и другие методы очистки ячеек
- Методы очистки ячеек
- Примеры использования
- 6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”
- Именованные диапазоны
- Excel макрос удалить диапазон
Excel макрос удалить диапазон
Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.
У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).
Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]
Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]
Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде?
Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.
У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).
Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]
Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]
Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде? Vadissimus
Сообщение Раз по правилам нужно под каждый вопрос заводить тему, так и буду делать.
У меня многостраничный .xls-файл.
На первой странице («Данные») я ввожу данные заказа (пластиковые карты, по работе), включая тираж и то, по сколько карт будет в коробке.
Другая страница («Этикетки») формируется сама, собирая данные с первой.
Если тираж 1000 карт, а в коробке их будет по 250, то этикеток должно быть 4. Соответственно мне нужно удалить на странице с этикетками все строки, начиная с 6 (2,3,4,5 — этикетки, 1-заголовки для дальнейшего импорта в .txt и объединение с Индизайном).
Если бы мне всегда было нужно удалять с 6-й, я бы использовал такой код:
[vba]
Но мне надо, что бы вместо «6» бралась цифра, которая будет зависеть от тиража и высчитываться в, допустим, ячейке A2.
Взять эту цифру я могу:
[vba]
Но вот если я в верхнюю формулу вместо «6» вставлю «x», то это ошибка кода.
Подскажите, пожалуйста, что поменять в коде? Автор — Vadissimus
Дата добавления — 06.03.2014 в 16:57
Источник
VBA Excel. Range.Clear и другие методы очистки ячеек
Метод Range.Clear для полной очистки диапазона ячеек из кода VBA Excel. Методы очистки отдельных свойств и их групп в ячейках. Примеры использования.
Методы очистки ячеек
Метод | Очищаемые свойства | Примечание |
---|---|---|
Range.Clear | Почти все свойства | Ширина и высота ячеек не изменяются |
Range.ClearComments | Комментарии | Для Excel в составе Office 365 |
Range.ClearContents | Формулы и значения | Исходное форматирование сохраняется |
Range.ClearFormats | Свойства, задающие форматы | В том числе отмена объединения ячеек |
Range.ClearHyperlinks | Гиперссылки | Текст и форматирование сохраняются |
Range.ClearNotes | Примечания и заметки | Примечания – для локальных программ Excel, заметки – для Excel в составе Office 365 |
Range.ClearOutline | Структура данных | Смотрите, что такое структурирование данных |
Range – выражение, возвращающее диапазон ячеек.
Примеры использования
1. Удаление гиперссылки из ячейки A1
Cells(1, 1).ClearHyperlinks
2. Очистка диапазона A1:L50 от формул и значений
Range(«A1:L50»).ClearContents
3. Очистка всех свойств ячеек в столбцах A:K
Columns(«A:K»).Clear
4. Очистка форматирования ячеек в строках 1:20
Rows(«1:20»).ClearFormats
Методы очистки диапазонов ячеек в VBA Excel возвращают очищаемые свойства ячеек к значениям по умолчанию. К таким, как на вновь созданном стандартном рабочем листе. При любых методах очистки высота строк и ширина столбцов не изменяются.
Фразы для контекстного поиска: очистка ячеек, очистка ячейки, очистка формул, очистка от формул, удаление формул, очистка значений, удаление значений, очистка форматов, удаление форматирования, удаление форматов.
6 комментариев для “VBA Excel. Range.Clear и другие методы очистки ячеек”
Здравствуйте!
Есть такая проблема:
1. В отдельном модуле написана процедура, которая при запуске и вводе в inputbox данных генерирует таблицу с данными. Вот перед каждой генерацией сделал так, чтобы содержимое листа , кроме первой строки (шапки), очищалось: Thisbooks.Worksheets(«Лист3»).Range(«A2»,Cells(lastRow, lastColumn).clear
2. На первом листе у меня как бы меню управления. Там кнопка, к которой привязана эта процедура. При запуске выполнение процедуры доходит до строки с очисткой и уходит в ошибку 1004 run time error: Application-defined or object-defined error.
При этом, если эту же процедуру запускать с кнопки, или через F5, но с открытого Лист3 — все отлично выполняется!
Никак не могу додуматься в чем же проблема. Подскажите пожалуйста!
Источник
Именованные диапазоны
Для чего вообще нужны именованные диапазоны? Обращение к именованному диапазону гораздо удобнее, чем прописывание адреса в формулах и 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
Обращение к именованному диапазону в формулах/функциях
Если при указании диапазона в формуле выделить именованный диапазон, то его имя автоматически подставится в формулу вместо фактического адреса ячеек:
Ограничения, накладываемые на создание имен
- В качестве имени диапазона не могут быть использованы словосочетания, содержащие пробел. Вместо него лучше использовать нижнее подчеркивание _ или точку: 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. ) .
Так же можно создавать списки с автоматическим определением его размера. Например, если значения в списке периодически пополняются или удаляются и чтобы каждый раз не переопределять границы таких диапазонов. Такие диапазоны называют динамическими.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Excel макрос удалить диапазон
Модератор форума: китин, _Boroda_
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Очистить диапазон и сразу вставить данные (Макросы/Sub)
Очистить диапазон и сразу вставить данные
lopuxi | Дата: Среда, 10.02.2016, 12:20 | Сообщение № 1 | |||||||||||||||||||||||||||||||||||||||||
|
In this Article
- Delete Entire Row or Column
- Delete Multiple Rows or Columns
- Delete Blank / Empty Rows
- Delete Row if Cell is Blank
- Delete Row Based on Cell Value
- More Delete Row and Column Examples
- Delete Duplicate Rows
- Delete Table Rows
- Delete Filtered Rows
- Delete Rows in Range
- Delete Selected Rows
- Delete Last Row
- Delete Columns by Number
This tutorial will demonstrate different ways to delete rows and columns in Excel using VBA.
Delete Entire Row or Column
To delete an entire row in VBA use this line of code:
Rows(1).Delete
Notice we use the Delete method to delete a row.
Instead of referencing the Rows Object, you can reference rows based on their Range Object with EntireRow:
Range("a1").EntireRow.Delete
Similarly to delete an entire column, use these lines of code:
Columns(1).Delete
Range("a1").EntireColumn.Delete
Delete Multiple Rows or Columns
Using the same logic, you can also delete multiple rows at once:
Rows("1:3").Delete
or columns:
Columns("A:C").Delete
Notice here we reference the specific row and column numbers / letters surrounded by quotations.
Of course, you can also reference the EntireRow of a range:
Range("a1:a10").EntireRow.Delete
Note: The examples below only demonstrate deleting rows, however as you can see above, the syntax is virtually identically to delete columns.
Delete Blank / Empty Rows
This example will delete a row if the entire row is blank:
Sub DeleteRows_EntireRowBlank()
Dim cell As Range
For Each cell In Range("b2:b20")
If Application.WorksheetFunction.CountA(cell.EntireRow) = 0 Then
cell.EntireRow.Delete
End If
Next cell
End Sub
It makes use of the Excel worksheet function: COUNTA.
Delete Row if Cell is Blank
This will delete a row if specific column in that row is blank (in this case column B):
Range("b3:b20").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Delete Row Based on Cell Value
This will loop through a range, and delete rows if a certain cell value in that row says “delete”.
Sub DeleteRowswithSpecificValue()
Dim cell As Range
For Each cell In Range("b2:b20")
If cell.Value = "delete" Then
cell.EntireRow.Delete
End If
Next cell
End Sub
More Delete Row and Column Examples
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Delete Duplicate Rows
This code will delete all duplicate rows in a range:
Range("b2:c100").RemoveDuplicates Columns:=2
Notice we set Columns:=2. This tells VBA to check both the first two columns of data when considering if rows are duplicates. A duplicate is only found when both columns have duplicate values.
If we had set this to 1, only the first row would’ve been checked for duplicate values.
Delete Table Rows
This code will delete the second row in a Table by referencing ListObjects.
ThisWorkbook.Sheets("Sheet1").ListObjects("list1").ListRows(2).Delete
Delete Filtered Rows
To delete only rows that are visible after filtering:
Range("b3:b20").SpecialCells(xlCellTypeVisible).EntireRow.Delete
VBA Programming | Code Generator does work for you!
Delete Rows in Range
This code will delete all rows in range:
Range("a1:a10").EntireRow.Delete
Delete Selected Rows
This code will delete all selected rows:
Selection.EntireRow.Delete
Delete Last Row
This will delete the last used row in column B:
Cells(Rows.Count, 2).End(xlUp).EntireRow.Delete
By changing 2 to 1, you can delete the last used row in column A, etc.:
Cells(Rows.Count, 1).End(xlUp).EntireRow.Delete
Delete Columns by Number
To delete a column by it’s number, use a code like this:
Columns (2).Delete
Удаление именованных диапазонов. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Дениск |
||||
1 |
||||
06.02.2010, 02:04. Показов 13678. Ответов 12 Метки нет (Все метки)
Подскажите пожалуйста, как в Excel с помощью VBA можно удалить область ячеек,
Зарание благодарен. |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
06.02.2010, 02:04 |
12 |
0 / 0 / 0 Регистрация: 31.01.2008 Сообщений: 72 |
|
07.02.2010, 13:29 |
2 |
Удалять можно только строки или столбцы — метод delete Ячейки можно только очистить содержимое, унивесальная конструкция:
0 |
Дениск |
|
07.02.2010, 22:25 |
3 |
Спасибо, Range(Cells(1, 1), Cells(8, 100)).Clear то что было нужно, |
Savelev |
|
08.02.2010, 08:51 |
4 |
Удалять — метод для обьекта Range. Cells, Columns, Rows также являются обьектом Range. Поэтому их тоже можно удалять (Delete), как впрочем и чистить (Clear). Dim L As Long l=10 |
2 / 2 / 1 Регистрация: 01.01.2008 Сообщений: 410 |
|
08.02.2010, 11:46 |
5 |
2 Serg61
0 |
Дениск |
||||
15.02.2010, 22:34 |
6 |
|||
А как сделать, чтобы при открытии Книги очищалась одна и таже область ячеек на нескольких Листах Книги при этом координаты не известны а вычисляются программой К примеру:
Выдаёт ошибку в строках с указанием имён Листов |
0 / 0 / 0 Регистрация: 31.01.2008 Сообщений: 72 |
|
16.02.2010, 13:42 |
7 |
А есть ли эти листы в книге?
0 |
Дениск |
|
16.02.2010, 22:46 |
8 |
Имена листов само собой пишу те которые у меня |
0 / 0 / 0 Регистрация: 31.01.2008 Сообщений: 72 |
|
17.02.2010, 08:47 |
9 |
Посмотри чему равно b, msgbox(b%), случайно не больше 51.
0 |
Дениск |
|
17.02.2010, 23:20 |
10 |
Пробовал запускать с константами выдаёт ту же ошибку |
VMRange 0 / 0 / 0 Регистрация: 24.06.2008 Сообщений: 41 |
||||
18.02.2010, 10:05 |
11 |
|||
IgorT
0 |
2 / 2 / 1 Регистрация: 01.01.2008 Сообщений: 410 |
|
21.02.2010, 09:42 |
12 |
2VMRange
0 |
2 / 2 / 1 Регистрация: 01.01.2008 Сообщений: 410 |
|
21.02.2010, 09:52 |
13 |
2Дениск для неактивного листа должно быть
0 |