Хитрости »
19 Февраль 2021 6743 просмотров
Использование относительных ссылок в макросах
Если Вы уже записывали макросы обработки таблиц, то наверняка сталкивались с ситуацией, когда макросом в таблицу добавляется столбец с формулами, которые потом необходимо распространить на все строки. Но если количество строк в таблице изменяется, то макрос работает некорректно: если строк стало больше, то формулы проставляются не на все строки, а если строк стало меньше – то появляются строки с лишними формулами.
Если Вы еще не знаете что такое макрос и как его записывать и воспроизводить, то рекомендуется сначала ознакомиться со статьей: Что такое макрос и где его искать?
К примеру, возьмем таблицу такого вида:
В конце таблицы нам необходимо добавить столбец «Стоимость», прописав в нем нехитрую формулу перемножения количества на цену:
=F2*G2
Перед записью макроса выделяем ячейку H1. При обычной записи макроса наши шаги такие:
1. Выделили I1
2. Записали в неё заголовок «Стоимость»
3. Перешли в I2
4. Записали формулу: =F2*G2
5. Распространили формулу до конца таблицы (через автозаполнение или путем копирования ячейки с формулой и вставки в остальные ячейки)
Макрос работает отлично. Пока количество строк не изменится. Если при записи макроса в таблице было 319 строк, а потом добавилось еще 20, то записанный макрос создаст формулу только в первых 319 строках. Все дело в том, что при обычной записи макрос использует абсолютную адресацию ячеек. Т.е. в нем каждый наш шаг обозначает выделение ячеек с конкретно указанным адресом (I1, I2, I319 и т.д.):
Как выйти из такой ситуации? Все не слишком сложно. В группе кнопок код на вкладке Разработчик есть кнопка «Относительные ссылки». Если нажать её до записи макроса(или во время), то ссылки на ячейки будут уже запоминаться не как конкретный адрес, а как смещение относительно последней выделенной ячейки.
Например, запишем два простых макроса, которые будут делать одно и то же действие – перемещение вниз таблицы и выделение ячеек от нижней до верхней. Только первый макрос будет записан обычным способом, а перед записью второго мы нажмем кнопку «Относительные ссылки». Наши действия будут следующими (одинаковыми для обоих макросов):
1. До записи макроса выделяем ячейку I2
2. Начинаем запись макроса
3. Выделяем ячейку H2
4. Комбинацией клавиш Ctrl+↓(стрелка вниз) перемещаемся вниз таблицы
5. Стрелка вправо (т.е. выделяем последнюю ячейку в столбце I)
6. Комбинацией клавиш Ctrl+Shift+↑(стрелка вверх) выделяем столбец I от последней ячейки до первой
7. Завершаем запись макроса
Теперь можно посмотреть на код обоих макросов:
Отличия очевидны: в первом используется обращение к ячейкам по их конкретным адресам. Во втором же все действия происходят относительно последней выделенной ячейки(на Range(«A1») не обращаем внимания – это из другой оперы и если их удалить ничего не изменится). Из этого можно сделать вывод, что для создания гибких универсальных макросов с использованием относительных ссылок необходимо как можно меньше использовать мышку и максимально стараться применять горячие клавиши. Попробую пояснить почему: когда мы применяем то же автозаполнение (наведение курсора мыши на нижний правый угол ячейки и протягивание вниз или двойной щелчок левой кнопкой мыши) – оно применяется к конкретно определенному количеству ячеек. Т.е. даже относительные ссылки не помогут заполнить его формулами, как того требует наша изначальная задача. Но если использовать горячие клавиши перемещения и выделения (Ctrl+стрелка и Ctrl+Shift+стрелка), то мы можем создать макрос, которому уже будет не важно сколько строк в нашей таблице. Чтобы в этом убедиться, запишем макрос из начала статьи, но уже с использованием относительных ссылок и исключительно клавиш для перемещения. Наши действия:
1. Перед записью макроса выделяем ячейку H1
2. Начали запись макроса
3. Нажимаем кнопку Относительные ссылки(если она еще не нажата)
4. Выделяем I1
5. Записываем в неё заголовок «Стоимость»
6. Переходим в I2
7. Записываем в I2 формулу: =F2*G2
8. Комбинацией клавиш Ctrl+C(или при помощи контекстного меню мыши) копируем ячейку с формулой
9. Стрелкой вправо перемещаемся в ячейку H2
10. Комбинацией клавиш Ctrl+↓(стрелка вниз) перемещаемся вниз таблицы
11. Стрелка вправо (т.е. выделяем последнюю ячейку в столбце I)
12. Комбинацией клавиш Ctrl+Shift+↑(стрелка вверх) выделяем столбец I от последней ячейки до первой
13. Комбинацией клавиш Ctrl+V вставляем скопированную формулу
14. Нажимаем Esc для сброса буфера обмена
15. Запись макроса можно завершить
Если теперь попробовать применить такой макрос к таблице, у которой строк больше или меньше, чем было при записи макроса – все пройдет идеально. Макрос создаст столбец и запишет в нем формулу только на нужное количество строк.
Более того. Если наша таблица находится уже в другом листе и даже начинается не с первой ячейки, а где-то в середине:
Нам достаточно будет выделить ячейку заголовка последнего столбца(K5) и запустить наш макрос. Он без проблем добавит столбец с формулой в нужном месте и на все строки. Макрос же без использования относительных ссылок в такой ситуации спасует по полной: он создаст формулы начиная с ячейки I2 и до заголовка, только испортив таблицу и не сделав ничего полезного.
Так же хочу дополнить, что Относительные ссылки играют роль исключительно во время записи макроса. Во время воспроизведения совершенно не важно включены они или нет. Плюс можно(а иногда и нужно) комбинировать во время записи макросов режим относительных ссылок с обычным режимом. Например, когда столбцов в таблице у нас всегда одинаковое количество и таблица всегда в одном месте, и столбец мы добавляем всегда в столбец I. Но формулы при этом надо протягивать на разное количество строк. Тогда можно начать запись макроса обычным режимом, а после того, как записали название столбца — включить режим относительных ссылок, чтобы определение последней ячейки таблицы не зависело от количества строк в этой таблице.
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
We have two options to refer a cell in excel VBA Absolute references and Relative references. Default Excel records macro in Absolute mode.
In this article, we learn about Relative references in excel VBA. We select a cell “A1”, turn on “Use Relative Reference” and record a macro to type some text in cells B2:B4.
Since we turn on the “Relative reference” option. Macro considers the number of rows and number of columns from active cells. In our example, we select cell A1 and start type B2 which is to move one column and one row from A1 (Active cell).
Implementation:
Follow the below steps to implement relative reference in Excel Macros:
Step 1: Open Excel and Select Cell “A1”.
Step 2: Go to “Developer” Tab >> Press “Use Relative References” >> Click “Record Macro” .
Step 3: Enter the Macro name “relativeReference” and Press “OK”.
Step 4: Type “Australia” in cell B2
Step 5: Type “Brazil” in cell B3
Step 6: Type “Mexico” in cell B4
Step 7: Select cell B5 and Press “Stop Recording”
VBA Code (Recorded):
Sub relativeReference() ActiveCell.Offset(1, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "Australia" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "Brazil" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "Mexico" ActiveCell.Offset(1, 0).Range("A1").Select End Sub
Step 8: You just delete the contents in cells B2:B4, Select Cell B1.
Step 9: Go to View >> Macros >> View Macros – to popup Macro dialog box [keyboard shortcut – Alt+F8].
Step 10: Select Macro from list (eg. relativeReference) and Press “Run”.
Output:
The active cell is B1 and run the macro. So, the outputs (C2:C4) are placed one row and one column from the active cell B1.
1.2 Абсолютные и относительные ссылки
Запись абсолютных и относительных ссылок в формулах на рабочем листе
Например, если активна ячейка A4, то ссылку на ячейку D3 можно задать как D3 (стиль A1 ) или R[-1]C[3] (стиль R1C1 ).
При записи формулы в стиле A1 признаком абсолютной ссылки является знак доллара ($) перед адресом строки и/или столбца. В стиле R1C1 для задания абсолютной ссылки используются индексы ячейки. Например, на ячейку D3 указывает абсолютная ссылка $D$3 в стиле A1 и абсолютная ссылка R3C4 в стиле R1C1.
Запись абсолютных и относительных ссылок в процедурах VBA
В процедурах, создаваемых при помощи макрорекордера, абсолютные и относительные ссылки записываются в стиле R1C1.
По умолчанию после запуска макрорекодера кнопкаотжата, что означает, что при записи процедур используются абсолютные ссылки.
Команда вычисления размера вклада в ячейке B13 с использованием абсолютных ссылок (набор адреса ячейки со знаками $ во время записи макроса) будет выглядеть так:
ActiveCell.FormulaR1C1 = "=R10C2*(1+R12C2/12)^R11C2"
Можно установить использование относительных ссылок при записи процедур Для этого после запуска макрорекордера нажмите кнопку Относительная ссылкана панели инструментов Остановить запись (см.
рис.
1.2). Кнопка будет изображена на оранжевом фоне. Относительные ссылки будут использоваться до конца текущего сеанса работы в MS Excel или до повторного нажатия кнопки Относительная ссылка.
Важно:
- Абсолютные ссылки всегда указывают на конкретную ячейку и команды, записанные с абсолютными ссылками, всегда выполняются с теми же ячейками, которые обрабатывались при создании макроса, независимо от положения активной ячейки, другими словами, независимо от выбранного объекта Range.
- Относительные ссылки рассматриваются относительно выбранного объекта Range. Чтобы с помощью макроса обрабатывать произвольные ячейки, следует записать его команды с относительными ссылками.
- Чтобы макрос всегда выполнял макрокоманды для определенной ячейки, а затем для других ячеек, связанных с предыдущей, нужно использовать абсолютные ссылки при записи команд для первой ячейки и относительные ссылки при записи команд для ячеек, связанных с первой.
Другой способ задания относительных ссылок — использование свойства Offset объекта Range.
Примеры
- Процедура Макрос1 закрашивает ячейки интервала B1:C5 желтым цветом (
рис.
1.8).Рис.
1.8.
Процедура Макрос1 записана с абсолютными ссылкамиВыделение интервала B1:C5 записано с абсолютными ссылками. При повторном выполнении процедуры снова будет выделен тот же интервал B1:C5, независимо от того, какая ячейка будет активной перед запуском процедуры.
- Процедура Макрос2 желтым цветом закрашивает интервал ячеек, смещенный относительно активной ячейки.
Рис.
1.9.
Процедура Макрос2 записана с относительными ссылкамиВ команде выделения интервала объект Range смещен относительно активной ячейки — свойство Offset устанавливает смещение на один столбец. Процедура Макрос2 окрасит интервал из двух столбцов и пяти строк, начинающийся в соседнем по отношению к активной ячейке столбце.
Макросы относительной ссылки записывают смещение от активной ячейки. Такие макросы будут полезны, если вам придется повторять шаги в разных местах на листе.
Предположим, вам необходимо проанализировать данные избирателей, собранных в 280 избирательных округах. Для каждого избирательного округа собраны следующие данные:
- Название избирательного округа.
- Общая численность населения в избирательном округе.
- Количество избирателей в избирательном округе.
- Количество избирателей мужского пола, и
- Количество женщин-избирателей.
Данные предоставляются вам на листе, как указано ниже.
Невозможно проанализировать данные в вышеуказанном формате. Поэтому расположите данные в таблице, как показано ниже.
Если вы пытаетесь расположить данные в вышеуказанном формате –
-
Сбор данных из 280 избирательных округов занимает значительное время
-
Это может быть подвержено ошибкам
-
Это становится мирской задачей, не позволяющей вам сосредоточиться на технических вещах
Сбор данных из 280 избирательных округов занимает значительное время
Это может быть подвержено ошибкам
Это становится мирской задачей, не позволяющей вам сосредоточиться на технических вещах
Решение состоит в том, чтобы записать макрос, чтобы вы могли выполнить задачу не более, чем за несколько секунд. Макрос должен использовать относительные ссылки, так как вы будете перемещаться по строкам во время упорядочивания данных.
Использование относительных ссылок
Чтобы сообщить макрос-рекордеру, что он должен использовать относительные ссылки, сделайте следующее:
-
Нажмите вкладку VIEW на ленте.
-
Нажмите Макросы .
-
Нажмите « Использовать относительные ссылки» .
Нажмите вкладку VIEW на ленте.
Нажмите Макросы .
Нажмите « Использовать относительные ссылки» .
Подготовка формата данных
Первым шагом в организации приведенных выше данных является определение формата данных в таблице с заголовками.
Создайте строку заголовков, как показано ниже.
Запись макроса
Запишите макрос следующим образом –
-
Нажмите Запись макроса.
-
Дайте осмысленное имя, скажем, DataArrange макросу.
-
Тип = строка () – 3 в ячейке B4. Это потому, что номер S. является текущим номером строки – 3 строки над ним.
-
Разрежьте ячейки B5, B6, B7, B8 и B9 и вставьте их в ячейки C4-C8 соответственно.
-
Теперь нажмите на ячейку B5. Ваша таблица выглядит так, как показано ниже.
Нажмите Запись макроса.
Дайте осмысленное имя, скажем, DataArrange макросу.
Тип = строка () – 3 в ячейке B4. Это потому, что номер S. является текущим номером строки – 3 строки над ним.
Разрежьте ячейки B5, B6, B7, B8 и B9 и вставьте их в ячейки C4-C8 соответственно.
Теперь нажмите на ячейку B5. Ваша таблица выглядит так, как показано ниже.
Первый набор данных расположен в первой строке таблицы. Удалите строки B6 – B11 и щелкните в ячейке B5.
Вы можете видеть, что активная ячейка B5 и следующий набор данных будет размещен здесь.
Прекратите запись макроса. Ваш макрос для размещения данных готов.
Запуск макроса
Вам необходимо многократно запускать макрос, чтобы завершить размещение данных в таблице, как указано ниже.
Активная ячейка B5. Запустите макрос. Второй набор данных будет размещен во второй строке таблицы, а активной ячейкой будет B6.
Запустите макрос снова. Третий набор данных будет размещен в третьей строке таблицы, и активной ячейкой станет B7.
Каждый раз, когда вы запускаете макрос, активная ячейка продвигается к следующей строке, облегчая повторение записанных шагов в соответствующих позициях. Это возможно из-за относительных ссылок в макросе.
Запускайте макрос, пока все 280 наборов данных не будут объединены в 280 строк таблицы. Этот процесс занимает несколько секунд, и, поскольку шаги автоматизированы, все упражнение не содержит ошибок.
Содержание
- Свойство Range.Address (Excel)
- Синтаксис
- Параметры
- Примечания
- Пример
- Поддержка и обратная связь
- Макросы Excel – Относительные ссылки
- Использование относительных ссылок
- Подготовка формата данных
- Запись макроса
- Запуск макроса
- Использование макрорекордера. Абсолютные и относительные ссылки
- 1.2 Абсолютные и относительные ссылки
- Запись абсолютных и относительных ссылок в формулах на рабочем листе
- Запись абсолютных и относительных ссылок в процедурах VBA
- Как сделать относительную ссылку в excel для макроса?
- Параметр «Относительные ссылки»
- Просмотр кода VBA
- Запуск записанного макроса в Excel
- Ограничения
- Как поменять ссылки в формулах на абсолютные?
- Как поменять ссылки в формулах на относительные?
- Способ преобразования без использования макросов
- Замечания
Свойство Range.Address (Excel)
Возвращает строковое значение, представляющее ссылку на диапазон на языке макроса.
Синтаксис
выражение.Адрес (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
выражение: переменная, представляющая объект Range.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
RowAbsolute | Необязательный | Variant | Значение True, чтобы возвратить часть строки ссылки в качестве абсолютной ссылки. Значение по умолчанию — True. |
ColumnAbsolute | Необязательный | Variant | Значение True, чтобы возвратить часть столбца ссылки в качестве абсолютной ссылки. Значение по умолчанию — True. |
ReferenceStyle | Необязательный | XlReferenceStyle | Стиль ссылки. Значение по умолчанию — xlA1. |
External | Необязательный | Variant | Значение True, чтобы вернуть внешнюю ссылку. Значение False, чтобы вернуть локальную ссылку. Значение по умолчанию — False. |
RelativeTo | Необязательный | Variant | Если RowAbsolute и ColumnAbsolute имеют значение False, а ReferenceStyle — xlR1C1, необходимо включить начальную точку для относительной ссылки. Этот аргумент является объектом Range, определяющим начальную точку. |
ПРИМЕЧАНИЕ. Тестирование с помощью Excel VBA 7.1 показывает, что явная начальная точка необязательна. По умолчанию отображается ссылка на $A$1.
Примечания
Если ссылка содержит более одной ячейки, аргументы RowAbsolute и ColumnAbsolute применяются ко всем строкам и столбцам.
Пример
В следующем примере показаны четыре различных представления одного адреса ячейки на листе Sheet1. В качестве комментариев в примере используются адреса, которые будут отображаться в окнах сообщений.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Макросы Excel – Относительные ссылки
Макросы относительной ссылки записывают смещение от активной ячейки. Такие макросы будут полезны, если вам придется повторять шаги в разных местах на листе.
Предположим, вам необходимо проанализировать данные избирателей, собранных в 280 избирательных округах. Для каждого избирательного округа собраны следующие данные:
- Название избирательного округа.
- Общая численность населения в избирательном округе.
- Количество избирателей в избирательном округе.
- Количество избирателей мужского пола, и
- Количество женщин-избирателей.
Данные предоставляются вам на листе, как указано ниже.
Невозможно проанализировать данные в вышеуказанном формате. Поэтому расположите данные в таблице, как показано ниже.
Если вы пытаетесь расположить данные в вышеуказанном формате –
Сбор данных из 280 избирательных округов занимает значительное время
Это может быть подвержено ошибкам
Это становится мирской задачей, не позволяющей вам сосредоточиться на технических вещах
Сбор данных из 280 избирательных округов занимает значительное время
Это может быть подвержено ошибкам
Это становится мирской задачей, не позволяющей вам сосредоточиться на технических вещах
Решение состоит в том, чтобы записать макрос, чтобы вы могли выполнить задачу не более, чем за несколько секунд. Макрос должен использовать относительные ссылки, так как вы будете перемещаться по строкам во время упорядочивания данных.
Использование относительных ссылок
Чтобы сообщить макрос-рекордеру, что он должен использовать относительные ссылки, сделайте следующее:
Нажмите вкладку VIEW на ленте.
Нажмите « Использовать относительные ссылки» .
Нажмите вкладку VIEW на ленте.
Нажмите « Использовать относительные ссылки» .
Подготовка формата данных
Первым шагом в организации приведенных выше данных является определение формата данных в таблице с заголовками.
Создайте строку заголовков, как показано ниже.
Запись макроса
Запишите макрос следующим образом –
Нажмите Запись макроса.
Дайте осмысленное имя, скажем, DataArrange макросу.
Тип = строка () – 3 в ячейке B4. Это потому, что номер S. является текущим номером строки – 3 строки над ним.
Разрежьте ячейки B5, B6, B7, B8 и B9 и вставьте их в ячейки C4-C8 соответственно.
Теперь нажмите на ячейку B5. Ваша таблица выглядит так, как показано ниже.
Нажмите Запись макроса.
Дайте осмысленное имя, скажем, DataArrange макросу.
Тип = строка () – 3 в ячейке B4. Это потому, что номер S. является текущим номером строки – 3 строки над ним.
Разрежьте ячейки B5, B6, B7, B8 и B9 и вставьте их в ячейки C4-C8 соответственно.
Теперь нажмите на ячейку B5. Ваша таблица выглядит так, как показано ниже.
Первый набор данных расположен в первой строке таблицы. Удалите строки B6 – B11 и щелкните в ячейке B5.
Вы можете видеть, что активная ячейка B5 и следующий набор данных будет размещен здесь.
Прекратите запись макроса. Ваш макрос для размещения данных готов.
Запуск макроса
Вам необходимо многократно запускать макрос, чтобы завершить размещение данных в таблице, как указано ниже.
Активная ячейка B5. Запустите макрос. Второй набор данных будет размещен во второй строке таблицы, а активной ячейкой будет B6.
Запустите макрос снова. Третий набор данных будет размещен в третьей строке таблицы, и активной ячейкой станет B7.
Каждый раз, когда вы запускаете макрос, активная ячейка продвигается к следующей строке, облегчая повторение записанных шагов в соответствующих позициях. Это возможно из-за относительных ссылок в макросе.
Запускайте макрос, пока все 280 наборов данных не будут объединены в 280 строк таблицы. Этот процесс занимает несколько секунд, и, поскольку шаги автоматизированы, все упражнение не содержит ошибок.
Источник
Использование макрорекордера. Абсолютные и относительные ссылки
1.2 Абсолютные и относительные ссылки
Запись абсолютных и относительных ссылок в формулах на рабочем листе
Например, если активна ячейка A4, то ссылку на ячейку D3 можно задать как D3 (стиль A1 ) или R[-1]C[3] (стиль R1C1 ).
При записи формулы в стиле A1 признаком абсолютной ссылки является знак доллара ($) перед адресом строки и/или столбца. В стиле R1C1 для задания абсолютной ссылки используются индексы ячейки. Например, на ячейку D3 указывает абсолютная ссылка $D$3 в стиле A1 и абсолютная ссылка R3C4 в стиле R1C1.
Запись абсолютных и относительных ссылок в процедурах VBA
В процедурах, создаваемых при помощи макрорекордера , абсолютные и относительные ссылки записываются в стиле R1C1.
По умолчанию после запуска макрорекодера кнопкаотжата, что означает, что при записи процедур используются абсолютные ссылки.
Команда вычисления размера вклада в ячейке B13 с использованием абсолютных ссылок (набор адреса ячейки со знаками $ во время записи макроса ) будет выглядеть так:
Можно установить использование относительных ссылок при записи процедур Для этого после запуска макрорекордера нажмите кнопку Относительная ссылкана панели инструментов Остановить запись (см. рис. 1.2). Кнопка будет изображена на оранжевом фоне. Относительные ссылки будут использоваться до конца текущего сеанса работы в MS Excel или до повторного нажатия кнопки Относительная ссылка.
Другой способ задания относительных ссылок — использование свойства Offset объекта Range.
Источник
Как сделать относительную ссылку в excel для макроса?
По умолчанию, во время записи макроса, все действия по выбору ячеек и диапазонов записываются как абсолютные. Если Вы выбрали ячейку C5 и записали для нее какие-то манипуляции, то последующие воспроизведения макроса будут производить эти действия именно над этой ячейкой. Такое поведение не всегда может соответствовать имеющимся задачам.
Поэтому в приложение Excel предусмотрена специальная возможность записи макросов с относительными ссылками. Если перед запуском макрорекодера было включено данное свойство, то любые ссылки будут записываться как смещенные относительно той ячейки, которая была активна на может этого запуска. Если изначально была выделена ячейка A1, а затем выбрана ячейка C5, то в код макроса попадет такая запись:
Она указывает приложению на необходимость выделить ячейку, смещенную на 4 строки и 2 столбца от активной на данный момент ячейки. Это значит, если при последующем выполнении макроса предварительно выделить ячейку G10, то смещенной на 4 строки и 2 столбца окажется ячейка I14.
Для активации описанного параметра перейдите на вкладку «Вид», найдите область «Макросы» и в раскрывающемся меню кликните по пункту «Относительные ссылки».
Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы мы могли развивать его дальше.
У Вас недостаточно прав для комментирования.
Простую последовательность действий, которую нужно повторить несколько раз, можно записать в виде программного кода и сохранить как макрос. Если последовательность действий записана в макрос, то выполнять её можно снова и снова, просто запуская этот макрос. Это гораздо эффективнее, чем выполнять раз за разом одни и те же действия вручную.
Чтобы записать макрос, нужно включить режим записи. Это можно сделать на вкладке Вид (View) в разделе Макросы (Macros) или в меню Сервис (Tools), если у Вас Excel 2003. Ниже на картинках показано, как выглядят эти меню.
Далее откроется диалоговое окно Запись макроса (Record Macro), как показано на картинке ниже:
Здесь, по желанию, можно ввести имя и описание для макроса. Рекомендуется давать макросу такое имя, чтобы, вернувшись к нему спустя некоторое время, можно было без труда понять, для чего этот макрос нужен. Так или иначе, если не ввести для макроса имя, то Excel автоматически назовёт его Макрос1, Макрос2 и так далее.
Здесь же можно назначить сочетание клавиш для запуска записанного макроса. Запускать макрос таким способом будет значительно проще. Однако будьте осторожны! Если случайно назначить для макроса одно из предустановленных клавиатурных сочетаний Excel (например, Ctrl+C), то в дальнейшем макрос может быть запущен случайно.
Когда макросу дано подходящее имя и (при желании) задано сочетание клавиш, нажмите ОК, чтобы запустить запись макроса. С этого момента каждое действие (ввод данных, выделение ячеек, изменение формата ячеек, пролистывание листа и так далее) будет записано в макрос и сохранено в виде кода VBA.
При включении режима записи макроса в строке состояния (внизу слева) появляется кнопка Стоп. В Excel 2003 эта кнопка находится на плавающей панели инструментов.
Нажмите Стоп, когда выполните все действия, которые должны быть записаны в макрос. Теперь код записанного макроса сохранён в модуле редактора Visual Basic.
Параметр «Относительные ссылки»
Если перед началом записи макроса включить параметр Относительные ссылки (Use Relative References), то все ссылки в записываемом макросе будут создаваться как относительные. Если же параметр выключен, то при записи макроса будут создаваться абсолютные ссылки (подробнее об этих двух типах ссылок можно узнать в статьях, посвящённых теме ссылок на ячейки в Excel).
Параметр Относительные ссылки (Use Relative References) находится в разделе Макросы (Macros) на вкладке Вид (View). В Excel 2003 этот параметр расположен на плавающей панели инструментов.
Просмотр кода VBA
Код VBA, записанный в макрос, размещается в модуле, который можно просмотреть в редакторе Visual Basic. Редактор можно запустить нажатием Alt+F11 (одновременное нажатие клавиш Alt и F11).
Код находится в одном из модулей, которые расположены в окне Project слева от области редактирования. Если дважды кликнуть по Module1 в окне Project, то справа появится код записанного макроса.
Запуск записанного макроса в Excel
Записывая макрос, Excel всегда создаёт процедуру Sub (не Function). Если при создании макроса к нему было прикреплено сочетание клавиш, то именно с его помощью запустить макрос будет проще всего. Существует и другой способ запустить макрос:
- Нажмите Alt+F8 (одновременно нажмите клавиши Alt и F8);
- В появившемся списке макросов выберите тот, который нужно запустить;
- Нажмите кнопку Выполнить (Run).
Ограничения
Инструмент Excel для записи макросов – это очень простой способ создавать код VBA, но подходит он только для создания самых простых макросов. Дело в том, что этот инструмент не умеет использовать многие возможности VBA, такие как:
- Константы, переменные и массивы;
- Выражения IF;
- Циклы;
- Обращения к встроенным функциям или внешним процедурам.
Как уже было сказано, инструмент записи макросов может создавать только процедуры Sub, так как не может возвращать значение. Процедурам Sub нельзя передавать какие-либо аргументы, хотя они могут распознавать текущие активные ячейки, диапазоны или листы, а также значения, хранящиеся в ячейках книги. Кроме того, нужно сказать, что сгенерированный код не всегда является оптимальным для рассматриваемой последовательности действий.
Автоматическое создание кода VBA в Excel отлично работает для простых макросов, но если нужно построить более сложный макрос, то придётся научиться писать код VBA самостоятельно. Тем не менее, запись макроса в Excel – это отличны инструмент, при помощи которого можно создавать первоначальный код, а в дальнейшем исправлять или вставлять его в более сложные макросы.
Урок подготовлен для Вас командой сайта office-guru.ru
Источник:/> Перевел: Антон Андронов
Правила перепечаткиЕще больше уроков по Microsoft Excel
Оцените качество статьи. Нам важно ваше мнение:
Разберемся как сделать все ссылки абсолютными, относительными или смешанными в диапазоне ячеек в Excel, а не только для одной конкретной ссылки в формуле.
Приветствую всех, дорогие читатели блога TutorExcel.Ru.
Как мы уже хорошо знаем всего в Excel выделяют 3 типа ссылок: относительные (А1), абсолютные ($А$1) и смешанные ($А1 и А$1).
Применение каждого из типов имеет свой смысл и определенные преимущества, поэтому зачастую бывает полезно в формулах заменить все относительные ссылки на абсолютные (или наоборот), к примеру, часто может пригодиться при копировании диапазона ячеек.
Поменять тип для конкретной ссылки в ячейке можно с помощью клавиши F4.
Для этого выделяем ссылку в формуле (либо на ячейку, либо на диапазон ячеек) и поочередно нажимаем F4, в результате ссылки будут меняться в порядке A1 -> $A$1 -> $A1 -> A$1. Затем останавливаемся на нужном шаге и задача смены типа решена.
Однако как это нередко случается в Excel, что удобно сделать 1 раз, не совсем удобно делать десятки, а то и сотни раз.
Так с помощью клавиши F4 мы сможем быстро изменить тип для одной ссылки, но никак не для большого диапазона ячеек с данными.
Поэтому чтобы проделать эту операцию вручную для множества ссылок потребуется другой способ (представьте сколько у вас займет времени поменять ссылки в 100 ячейках), в связи с чем обратимся к помощи макроса, который автоматизирует процесс и существенно ускорит время выполнения работы.
Как поменять ссылки в формулах на абсолютные?
Алгоритм действия макроса построим по следующему принципу: мы заходим в каждую ячейку диапазона, где содержится формула, а далее преобразовываем ссылку в нужный нам вид.
На словах все выглядит просто, давайте перейдем к реализации алгоритма.
Переходим в редактор VBA (для быстрого перехода нажимаем Alt + F11), создаем новый модуль (щелкаем правой кнопкой мыши в панели проектов и выбираем Insert -> Module) и добавляем туда код макроса:
Dim MyCell As Range
On Error Resume Next ‘Обработка ошибки, если рассматриваемый диапазон ячеек не содержит формул
For Each MyCell In Selection.SpecialCells(xlCellTypeFormulas) ‘Цикл для каждой ячейки диапазона содержащая формулу
MyCell.Formula = Application.ConvertFormula(MyCell.Formula, xlA1, xlA1, xlAbsolute) ‘Меняем тип ссылки
Попробуем проверить работу макроса на простой таблице с формулами:
Выделяем диапазон ячеек с таблицей (в нашем случае это диапазон F6:J10) и запускаем макрос ChangeCellStyleInFormulas (в панели вкладок выбираем Разработчик -> Макросы (или нажимаем Alt + F8), далее находим нужный макрос и жмем Выполнить):
Все получилось, ссылки в таблице из относительных преобразовались в абсолютные.
Теперь рассмотрим другие случаи, когда в конечном результате нужны уже не абсолютные, а относительные или смешанные ссылки.
Как поменять ссылки в формулах на относительные?
За преобразование формулы в макросе отвечает функция ConvertFormula, в которой один из параметров задает тип ссылки:
- xlAbsolute. Абсолютная ($А$1);
- xlRelative. Относительная (А1);
- xlAbsRowRelColumn. Смешанная. Абсолютная строка и относительный столбец (А$1);
- xlRelRowAbsColumn. Смешанная. Относительная строка и абсолютный столбец ($А1).
Поэтому вместо xlAbsolute в коде макроса можно поставить любой из выше перечисленных параметров, в зависимости от того, что конкретно вам нужно.
Например, для той же таблицы применим макрос с параметром xlAbsRowRelColumn (абсолютная строка и относительный столбец, вид A$1):
И для параметра xlRelRowAbsColumn (относительная строка и абсолютный столбец, вид $A1):
Таким образом, меняя значения параметра в макросе можно получить абсолютно любой тип ссылки.
Способ преобразования без использования макросов
Если не хочется возиться с макросами, то преобразовать все ссылки в формулах в относительные также можно и без их применения.
Действительно, так как признаком абсолютной или смешанной ссылки является наличие в формуле знака $ (который используется для закрепления строки или столбца), то с помощью инструмента Найти и заменить можно избавиться от всех знаков $ в формулах.
Выделяем диапазон с данными, нажимаем Ctrl + H, в поле Найти указываем знак доллара, а поле Заменить на оставляем пустым, нажимаем Заменить все и получаем нужный результат:
Замечания
Будьте внимательны при работе с формулами массива, после работы макроса они превращаются в обычные и могут вернуть значение ошибки. Также из-за особенностей VBA макрос может некорректно обрабатывать большие по объему формулы.
Спасибо за внимание!
Если у вас есть мысли или вопросы по теме статьи — пишите в комментариях.
Источник