Skip to content
На чтение 2 мин. Просмотров 4.9k.
Что делает макрос: Бывают случаи, когда необходимо добавить текст в начало или конец ячеек в диапазоне. Например, вам может нужно добавить код города к набору телефонных номеров. Этот макрос демонстрирует, как можно автоматизировать задачи стандартизации данных, которые требуют добавления данных значений.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Этот макрос использует два объекта Range переменных пройти через целевой диапазон, усиливая для каждого оператора, чтобы активировать каждую ячейку в целевом диапазоне.
Каждый раз, когда клетка активируется, макрокоманда прибавляет код города к началу значения ячейки.
Код макроса
Sub DobavitTekst() 'Шаг 1: Объявляем переменные Dim MyRange As Range Dim MyCell As Range 'Шаг 2: Сохранить книгу прежде,чем изменить ячейки? Select Case MsgBox("Перед изменением ячеек. " & _ "Сохранить книгу?", vbYesNoCancel) Case Is = vbYes ThisWorkbook.Save Case Is = vbCancel Exit Sub End Select 'Шаг 3: Определение целевого диапазона Set MyRange = Selection 'Шаг 4: Запускаем цикл по диапазону For Each MyCell In MyRange 'Шаг 5: Убедитесь, что ячейка имеет формат текста If Not IsEmpty(MyCell) Then MyCell = "(972) " & MyCell End If 'Шаг 6: Получите следующую ячейку в диапазоне Next MyCell End Sub
Как этот код работает
- Шаг 1 объявляет две переменные объекта Range.
- Мы должны сохранить книгу перед запуском макроса.
- Шаг 3 заполняет переменную MyRange с целевым диапазоном. В этом примере мы используем выбранный диапазон — диапазон, который был выбран в электронной таблице.
- Шаг 4 начинает цикл через каждую ячейку в целевом диапазоне.
- После того, как ячейка активируется, мы используем амперсанд (&), чтобы объединить код зоны с ячейкой. Если вам нужно добавить текст в конец значения ячейки, нужно просто поместить амперсанд и текст в конце. Например, MyCell = MyCell & «добавлен текст».
- Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Группа: Пользователи Ранг: Новичок Сообщений: 13
Замечаний: |
Добрый день, неоднократно обращался к этоу замечательному форуму, но вот опять вынужден обратиться, нужен очень простой макрос который будет вставлять нужное слово или текст в активную ячейку, не могу сам найти , все перерыл , помогите пожалуста !!!
Всем бобра
Сообщение отредактировал Axeq — Пятница, 08.04.2016, 10:49
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 844
1
Макрос для вставки строк с текстом
22.07.2015, 18:58. Показов 7529. Ответов 3
В общем помогите написать код для вставки 2 строк от первой до последней на листе с учетом имеющейся в них фразах.Например,если в строке по всем столбцам есть слово Олень,то мы вставляем 2 строки над этой строкой,если нет,то пропускаем или (что лучше) ищем по другому условию. Заполняются они в самом коде либо как вариант копируются с другого листа. Количество строк — столько сколько поддерживает эксель(точнее более 180000)
Копируется одно и тоже, но разное количество строк.
Вот начал писать через копи паст с другого листа,но копирует только 1 значение и один раз,что опять не по циклу.
Кликните здесь для просмотра всего текста
Visual Basic | ||
|
но тут не работает поиск,он ищет только первое значение и вставляет пустые строки.
Кликните здесь для просмотра всего текста
Visual Basic | ||
|
Файл прилагаю.
0
Работа с буфером обмена в VBA Excel: копирование и вставка ячеек, копирование текста из переменной, очистка буфера обмена. Объект DataObject. Примеры.
Копирование и вставка ячеек
Копирование содержимого и форматов ячеек (диапазона) в буфер обмена осуществляется методом Range.Copy, а вставка – методом Worksheet.Paste:
‘Копирование одной ячейки в буфер обмена Range(«A10»).Copy Cells(10, 1).Copy ‘Копирование диапазона ячеек в буфер обмена Range(«B8:H12»).Copy Range(Cells(8, 2), Cells(12, 8)).Copy ‘Вставка ячейки (диапазона) из буфера обмена на рабочий лист ActiveSheet.Paste Range(«A20») ActiveSheet.Paste Cells(20, 1) |
При вставке диапазона ячеек из буфера обмена на рабочий лист достаточно указать верхнюю левую ячейку места (диапазона) вставки.
Для вставки из буфера обмена отдельных компонентов скопированных ячеек (значения, формулы, примечания и т.д.), а также применения к диапазону транспонирования или вычислений, используется метод Range.PasteSpecial (специальная вставка).
Буфер обмена и переменная
Передача текста между переменной и буфером обмена в VBA Excel осуществляется с помощью объекта DataObject. Стоит иметь в виду, что на некоторых компьютерах DataObject может некорректно работать при открытом окне проводника.
Объект DataObject
DataObject – это область временного хранения форматированных фрагментов текста, используемая в операциях переноса данных.
Подробнее об элементе DataObject вы можете прочитать на сайте разработчиков.
Методы объекта DataObject:
Метод | Описание |
---|---|
GetFromClipboard | Копирует данные из буфера обмена в DataObject |
GetText | Извлекает текстовую строку из объекта DataObject в указанном формате |
PutInClipboard | Перемещает данные из DataObject в буфер обмена |
SetText | Копирует текстовую строку в DataObject, используя указанный формат |
Копирование текста из переменной в буфер обмена
Sub Primer2() Dim s As String, myData As New DataObject s = «Копирование текста из переменной в буфер обмена» ‘Копируем текст из переменной в DataObject myData.SetText (s) ‘Перемещаем текст из DataObject в буфер обмена myData.PutInClipboard ‘Проверяем содержимое буфера обмена ActiveSheet.Paste Range(«A1») End Sub |
Копирование текста из буфера обмена в переменную
Sub Primer3() Dim s As String, myData As New DataObject Range(«A1») = «Копирование текста из буфера обмена в переменную» ‘Копируем данные из ячейки в буфер обмена Range(«A1»).Copy ‘Копируем данные из буфера обмена в DataObject myData.GetFromClipboard ‘Извлекаем текст из объекта DataObject и присваиваем переменной s s = myData.GetText ‘Проверяем содержимое переменной s MsgBox s End Sub |
Очистка буфера обмена
Специального метода для очистки буфера обмена в VBA Excel нет. Для решения этой задачи можно использовать выход из режима вырезания-копирования:
Application.CutCopyMode = False |
Следующий пример демонстрирует вставку скопированной ячейки "A1"
в ячейки "A2"
и "A3"
и отсутствие вставки в ячейки "A4"
и "A5"
после строки Application.CutCopyMode = False
:
Sub Primer4() Range(«A1») = «Очистка буфера обмена» Range(«A1»).Copy ActiveSheet.Paste Range(«A2») ActiveSheet.Paste Range(«A3») Application.CutCopyMode = False On Error Resume Next ActiveSheet.Paste Range(«A4») ActiveSheet.Paste Range(«A5») End Sub |
Оператор On Error Resume Next
необходим для обработки (пропуска) ошибки, возникающей при вставке из пустого буфера обмена.
Функции для работы с буфером обмена
В некоторых системах, начиная с Windows 8, метод DataObject.PutInClipboard не работает правильно: если открыт хотя бы один экземпляр Проводника (папка), в буфер обмена записываются два квадратика. Следующие функции должны решить эту проблему:
‘Функция записи текста в буфер обмена Function SetClipBoardText(ByVal Text As Variant) As Boolean SetClipBoardText = CreateObject(«htmlfile»).parentWindow.clipboardData.SetData(«Text», Text) End Function ‘Функция вставки текста из буфера обмена Function GetClipBoardText() As String On Error Resume Next GetClipBoardText = CreateObject(«htmlfile»).parentWindow.clipboardData.GetData(«Text») End Function ‘Функция очистки буфера обмена Function ClearClipBoardText() As Boolean ClearClipBoardText = CreateObject(«htmlfile»).parentWindow.clipboardData.clearData(«Text») End Function |
Пример использования функций для работы с буфером обмена:
Sub Primer() Dim s As String s = «Копирование текста из переменной в буфер обмена» ‘Копируем текст в буфер обмена SetClipBoardText (s) ‘Вставляем текс из буфера обмена в ячейку «A1» Range(«A1») = GetClipBoardText ‘Очищаем буфер обмена, если это необходимо ClearClipBoardText End Sub |
How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this, including across worksheets and workbooks.
Sections:
Simple Copy/Paste
Copy Entire Range
Copy between Worksheets
Copy between Workbooks
Notes
Simple Copy/Paste
Range("A1").Copy Range("B1")
This copies cell A1 to cell B1.
Range(«A1»).Copy is the part that copies the cell.
Range(«B1») is the cell where the data will be copied.
This is a simple one line piece of code and it’s very easy to use.
Notice that there is a space between these two parts of the code.
Copy Entire Range
Range("A1:A5").Copy Range("B1:B5")
Range(«A1:A5»).Copy is the part that copies the range.
Range(«B1:B5») is the range where the data will be copied.
You can also write it like this:
Range("A1:A5").Copy Range("B1")
Notice that the range to where you will copy the data has only a reference to cell B1.
You only have to reference the very first cell to which the range will be copied and the entire range will copy in the cells below there.
NOTE: if you do it like this, you may end up overwriting data and Excel will not give you a warning about this; the data will simply be filled down as far as it needs to go to copy the first range.
Copy between Worksheets
Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("B1")
This follows the same pattern as the above examples except that we need to tell the macro from which sheet we want to get the data and to which sheet we want to copy the data.
Sheets(«Sheet1»). is placed in front of the first range and that means to get the data from Sheet1, which is the name of a worksheet in the workbook.
Sheets(«Sheet2»). is placed in front of the range to which we want to copy the data and Sheet2 is the name of the worksheet where the data will be copied.
Copy between Workbooks
Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet1").Range("A1").Copy Workbooks("Copy and Paste Data using Macro VBA in Excel.xlsm").Sheets("Sheet3").Range("A1")
Here, we follow the above examples and, this time, add a reference to the workbooks from which we want to get the data and to which we want to place the data.
Workbooks(«Copy and Paste Data using Macro VBA in Excel.xlsm»). is the code that says in which workbook we want to place the data. Copy and Paste Data using Macro VBA in Excel.xlsm is the name of the workbook. In this example I used this for both parts, the workbook from which the data comes and where it goes. This allows you to run this macro within a single workbook and still show you how it works. In a real-world example, the first part contains the name of the workbook where you get the data from and the second contains the name of the workbook where you want to place the data.
Read this tutorial to copy values from another workbook, even if it’s closed.
Notes
All examples in the attached workbook have been commented out. Simply remove the single quote from the line of code you want to test and then run the macro.
Download the attached file to get these examples in Excel.
Similar Content on TeachExcel
Activate or Navigate to a Worksheet using Macros VBA in Excel
Tutorial: Make a particular worksheet visible using a macro in Excel.
This is called activating a wo…
Get the Name of a Worksheet in Macros VBA in Excel
Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…
Get the Last Row using VBA in Excel
Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…
Remove Dashed Lines from Copy Paste VBA in Excel
Tutorial: How to remove the flashing dashes from a copy/paste range using VBA in Excel; this removes…
Copy one range and paste in another range
Tutorial: Below is a macro, just copy and paste it into a module in your workbook and go from there…
Guide to Combine and Consolidate Data in Excel
Tutorial: Guide to combining and consolidating data in Excel. This includes consolidating data from …