Как работают макросы: Как работают макросы. VBA для чайников
Как работают макросы. VBA для чайников
Как работают макросы
Некоторые VBA-приложения- среди них Microsoft Word, Excel и PowerPoint- имеют средство записи макросов, работа которого напоминает работу обычного магнитофона. После включения средства записи макросов оно будет записывать все команды, которые вы используете в приложении, до тех пор, пока не щелкнете на кнопке Остановить запись. После того как макрос записан, вы сможете воспроизводить его каждый раз, когда вам потребуется записанная в нем последовательность команд.
Кстати, слово макрос означает большой. Подразумевается, что вы объединяете множество небольших команд в одну большую, На самом же деле, ваш макрос может быть таким маленьким и скромным, каким вы пожелаете, — если у вас слишком много времени, можете создать себе целый ряд бесполезных макросов, включающих всего по одной команде.
В VBA-приложениях, не имеющих средства записи макросов, термин макрос может означать любую созданную вами VBA-программу. Например, в Visio версий 4.5 и 5 указание создать макрос открывает окно создания новой программы в редакторе Visual Basic. С другой стороны, как минимум в одном из основных VBA приложений — в Access — макрос вообще напрямую никак не связывается с VBA.
В Access, хотя и можно создавать макросы, содержащие последовательности команд, они не сохраняются в виде VBA-кода автоматически (подробности вы найдете ниже во врезке Макросы — не росы). Средство записи макросов отсутствует во всех версиях Access — там есть специальное окно для выбора команд, которые вы собираетесь поместить в макрос.
Макрос- это просто еще одно название для VBA-программы. Средство записи макросов во время своей работы конвертирует каждую из используемых вами команд в соответствующие строки программного кода VBA. Законченный макрос сохраняется как процедура VBA. Процедуры, как разъясняется Б главе 6, — это отдельные единицы программного кода VBA, которые можно вызвать по имени для выполнения. (Если уж говорить совсем строго, то макрос представляет собой процедуру типа Sub, не имеющую аргументов. Вам нужна именно такая строгость?)
Еще один теоретический момент: макросы есть и в Access, и в VBA, но в Access они не являются VBA программами. Макросы в Access создаются с помощью последовательности команд в специально предлагаемом для этого диалоговом окне, Боюсь еще больше запутать дело, но я должен тут добавить, что макрос в Access может вызывать VBA-процедуру Access. Вот так-то.
Когда следует записывать макрос
Макросы экономят время и снимают раздражение. Это действительно так. Компьютер воспроизведет последовательность команд куда быстрее, чем это сделаете вы, щелкая на соответствующих кнопках команд и выбирая пункты соответствующих меню. При этом компьютер не допустит ни единой ошибки. И ваше настроение, несомненно, улучшится, поскольку люди обычно не любят повторять одно и то же больше двух-трех раз подряд.
Поэтому проверьте, не приходится ли вам снова и снова повторять в приложении одни и те же последовательности команд. Как только вы обнаружите, что такие последовательности у вас есть, сразу же запишите их виде макроса. А еще лучше, если вы знаете наперед, что какую-то новую последовательность команд вам придется использоваться и в дальнейшем, запишите соответствующий ей макрос уже при первом случае ее применения. И уже со следующего раза используйте макрос.
Глава 13 – Работа с макросами в LibreOffice¶
Добавление макроса
Первый шаг в изучении программирования макросов, это найти и использовать существующие макросы. В этом разделе подразумевается, что у вас уже имеется макрос, который вы хотите использовать. Вы могли найти его в Интернете или в какой-нибудь книге. Рассмотрим пример 1. Чтобы записать этот макрос, вы должны предварительно создать библиотеку и модуль, и уже в модуле написать текст макроса, смотрите Организация макросов.
Пример 1: Простой макрос, который пишет “Hello, World”:
Sub HelloMacro Print "Hello, World" End Sub
Чтобы создать библиотеку, необходимо выполнить следующие шаги:
- Выберете пункты главного меню , чтобы открыть диалог работы с макросами Libreoffice Basic.
Диалог работы с макросами LibreOffice Basic
- Нажмите Управление, чтобы открыть диалог организатора макросов и выберите вкладку Библиотеки.
- Выберите в выпадающем списке Приложение/Документ пункт Мои макросы и диалоги.
Диалог организатора макросов LibreOffice Basic
- Нажмите Создать, чтобы открыть диалог создания новой библиотеки.
- Введите имя библиотеки, например, TestLibrary и нажмите OK.
- Выберите вкладку Модули.
- В списке модулей раскройте Мои макросы и выберите TestLibrary. Модуль с именем Module1 уже существует, он может содержать ваши макросы. Если необходимо, том можно нажать Создать, чтобы создать другой модуль в библиотеке.
- Выберите Module1 или новый модуль, который вы создали и нажмите Правка, чтобы открыть интегрированную среду разработки (IDE). Интегрированная среда разработки это текстовый редактор, включённый в LibreOffice, который позволяет создавать и редактировать макросы.
Интегрированная среда разработки макросов
- После создания нового модуля он содержит комментарий и пустой макрос, названный Main, который ничего не делает.
- Добавьте новый макрос или до
Sub Main
или послеEnd Sub
. В примере ниже приведен новый макрос, который был добавлен доSub Main
.
Пример 2: Module1
после добавления нового макроса:
REM ***** BASIC ***** Sub HelloMacro Print "Привет" End Sub Sub Main End Sub
- Нажмите на значок Компилировать на панели инструментов, чтобы откомпилировать макрос.
- Поставьте курсор в процедуру
HelloMacro
и нажмите на значок Выполнить BASIC на панели инструментов или нажмите клавишуF5
, чтобы выполнитьHelloMacro
в модуле. Откроется маленький диалог со словомПривет
. Если курсор не находится внутри процедурыSub
или функцииFunction
, откроется диалог выбора макроса для запуска.
- Нажмите OK, чтобы закрыть диалог.
- Чтобы выбрать и выполнить любой макрос в данном модуле, нажмите значок Выбрать макрос на стандартной панели инструментов или выберите .
- Выберите макрос и нажмите Выполнить.
Запись макросов
Если вы хотите многократно ввести одинаковую информацию, вы можете скопировать эту информацию после того, как она введена в первый раз, затем вставлять эту информацию в ваш документ каждый раз по мере необходимости. Однако, если вы скопировали в буфер обмена что-то ещё, содержимое буфера меняется. Это означает, что вы должны заново скопировать вашу повторяющуюся информацию. Чтобы обойти эту проблему, вы можете создать макрос, который в процессе выполнения вводит нужную вам информацию.
Примечание
Для некоторых типов многократно вводимой в документах информации более удобно создать файл автотекста. Описание работы с автотекстом смотрите в справочной системе и в главе Глава 3 – Использование Стилей и Шаблонов данного руководства.
- Убедитесь, что функция записи макросов активизирована, выбрав . Установите флажок Включить запись макросов. По умолчанию эта функция отключена, когда LibreOffice впервые установлен на ваш компьютер.
- Выберите из главного меню, чтобы запустить запись макроса. Появится маленький диалог, подтверждающий, что LibreOffice записывает ваши действия.
Диалог записи макроса
- Наберите желаемую информацию или выполните необходимые действия. Например, напечатайте ваше имя.
- Нажмите Завершить запись в маленьком диалоге, чтобы остановить запись, и появится диалог работы с макросами LibreOffice.
- Откройте библиотечный контейнер Мои макросы.
- Найдите библиотеку с именем
Standard
в Моих макросах. Обратите внимание, что каждый библиотечный контейнер содержит библиотекуStandard
. - Выберите библиотеку
Standard
и нажмите Создать модуль, чтобы создать новый модуль, содержащий макросы. Откроется диалог создания модуля.
Диалог создания модуля
- Задайте название для нового модуля, например, Recorded и нажмите OK, чтобы создать модуль. В диалоге работы с макросами теперь виден этот новый модуль в составе библиотеки
Standard
. - В поле Имя макроса напечатайте имя для макроса, который вы только что записали, например,
EnterMyName
. - Нажмите Записать, чтобы сохранить макрос и закрыть диалог работы с макросами.
- Если вы верно выполнили все шаги, описанные выше, библиотека
Standard
теперь содержит модульRecorded
, и этот модуль содержит макросEnterMyName
.
Примечание
Когда LibreOffice создаёт новый модуль, в этот модуль автоматически добавляется процедура с именем Main
.
Запуск макроса
- Выберите , чтобы открыть диалог выбора макроса.
- Например, выберите ваш только что созданный макрос
EnterMyName
и нажмите Выполнить. - Можно также вызвать из главного меню , чтобы открыть диалог работы с макросами, выбрать ваш макрос и нажать Выполнить.
Диалог выбора макроса
Просмотр и редактирование макросов
Чтобы просмотреть или отредактировать созданные вами макросы выполните:
- , чтобы открыть диалог работы с макросами.
- Выберите ваш новый макрос
EnterMyName
и нажмите Правка, чтобы открыть макрос в интегрированной среде разработки.
Макрос EnterMyName не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Макрос EnterMyName
не так уж сложен, как может показаться. Изучение нескольких вещей существенно поможет в понимании макросов. Начнём сначала и посмотрим на самую первую строку примера.
Пример 3: Сгенерированный макрос EnterMyname
:
REM ***** BASIC ***** Sub Main End Sub sub EnterMyName rem ------------------------------------------------------------- rem define variables (определение переменных) dim document as object dim dispatcher as object rem ------------------------------------------------------------- rem get access to the document (получение доступа к документу) document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ------------------------------------------------------------- dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "Text" args1(0).Value = "Иван Сидорович Петров" dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1()) end sub
Комментарии
Подробные комментарии являются необходимой частью программы. Без комментариев и сам программист зачастую забывает, что же он написал несколько недель (а может и месяцев или лет) тому назад.
Все комментарии в макросах начинаются с ключевого слова REM
. Весь текст строки после REM игнорируется компьютером при выполнении макроса. Можно также использовать символ одинарной кавычки ('
), чтобы начать комментарий.
Ключевые слова в LibreOffice Basic могут быть записаны в любом регистре, таким образом REM
, Rem
, и rem
могут начинать комментарий. Если вы используете символические константы, определяемые в программном интерфейсе приложения (Application Programming Interface, API), безопаснее считать, что имена чувствительны к регистру. Символические константы не описаны в данном руководстве, они не нужны, когда вы используете функцию записи макросов в LibreOffice.
Определение процедур
Отдельные макросы сохраняются в процедурах, которые начинаются с ключевого слова SUB
. Окончание процедуры обозначается END SUB
. Код модуля в примере 3 начинается с определения процедуры, названной Main, в которой нет ничего, и она ничего не делает. Следующая процедура, EnterMyName
, содержит сгенерированный код вашего макроса.
Примечание
Когда LibreOffice создаёт новый модуль, в этот модуль всегда автоматически добавляется процедура с именем Main
.
Существует много полезной информации, не вошедшей в данное руководство, однако знание о ней весьма интересно:
- Вы можете написать процедуры, которые используют некоторые “входные” величины, называемые аргументами. Однако, функция записи макросов не предоставляет возможности использовать аргументы в процедурах.
- Помимо процедур существуют также функции, которые могут “возвращать” значение. Функции определяются ключевым словом
FUNCTION
в начале. Однако, записанные макросы, – это всегда процедуры, а не функции.
Определение переменных
Вы можете записать информацию на листе бумаги и позднее воспользоваться этой информацией. Переменные, подобно листу бумаги, содержат информацию, которую можно изменять или читать. Ключевое слово Dim
используется для описания типа переменной и для задания размерности массивов. Оператор dim
в макросе EnterMyName
используется подобно подготовке листа бумаги для записи информации.
В макросе EnterMyName
переменные document и dispatcher определены с типом object (объект). Другие часто используемые типы переменных включают string (строка), integer (целое) и date (дата). Третья переменная с именем args1 – это массив значений свойств. Массивы это переменные, содержащие несколько величин, подобно тому, как в одной книге содержится несколько страниц. Величины в массивах обычно нумеруются начиная с нуля. Число в скобках задаёт максимальный номер, используемый для доступа к элементу массива. В данном примере в массиве содержится только одна величина, и она имеет номер ноль.
Как это работает
Разберёмся более подробно с кодом макроса EnterMyName
. Может быть вы и не поймёте всех тонкостей, но разбор каждой строки в коде позволит вам осознать то, как работают макросы.
Определение начала макроса:
Определение переменной:
Определение переменной:
Объект ThisComponent ссылается на текущий документ.
document = ThisComponent.CurrentController.Frame
CurrentController
– свойство, ссылающиеся на службу, которая управляет документом. Например, когда вы печатаете на клавиатуре, – это текущий процесс, который управляет вводом в документ того, что вы напечатали. CurrentController
затем отправляет изменения в блок данных документа.
Frame
– свойство службы, которое возвращает основной блок данных документа. Таким образом, переменная с именем document ссылается на блок данных документа, который получает команды диспетчера.
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Большинство задач в LibreOffice выполняется посредством диспетчеризации (отправки) команды (dispatching a command). LibreOffice включает службу DispatchHelper
, которая чаще всего применяется при использовании диспетчера в макросах. Метод CreateUnoService получает имя службы и пытается создать экземпляр этой службы. По завершении метода, переменная dispatcher содержит ссылку на службу DispatchHelper
.
dim args1(0) as new com.sun.star.beans.PropertyValue
Определяет массив свойств. Каждое свойство имеет имя и значение. Другими словами, это пара имя/значение. Созданный массив содержит одно свойства, доступное по номеру ноль.
args1(0).Name = "Text" args1(0).Value = "Иван Сидорович Петров"
Задаём для свойства имя “Text” и значение “Иван Сидорович Петров”, это значение и есть тот самый текст, который будет вставлен, когда макрос сработает.
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
Вот тут и случается чудо. Служба DispatchHelper
посылает блоку данных документа (ссылка на который сохранена в переменной document) команду .uno:InsertText
. Описание следующих двух аргументов выходят за рамки данного руководства. Последний аргумент – это массив свойств, используемый для выполнения команды InsertText
.
Последняя строка кода, конец процедуры.
Не удается найти страницу | Autodesk Knowledge Network
(* {{l10n_strings.REQUIRED_FIELD}})
{{l10n_strings.CREATE_NEW_COLLECTION}}*
{{l10n_strings.ADD_COLLECTION_DESCRIPTION}}
{{l10n_strings.COLLECTION_DESCRIPTION}}
{{addToCollection.description.length}}/500
{{l10n_strings.TAGS}}
{{$item}}
{{l10n_strings.PRODUCTS}}
{{l10n_strings.DRAG_TEXT}}
{{l10n_strings.DRAG_TEXT_HELP}}
{{l10n_strings.LANGUAGE}}
{{$select.selected.display}}
{{article.content_lang.display}}
{{l10n_strings.AUTHOR}}
{{l10n_strings.AUTHOR_TOOLTIP_TEXT}}
{{$select.selected.display}}
{{l10n_strings.CREATE_AND_ADD_TO_COLLECTION_MODAL_BUTTON}}
{{l10n_strings.CREATE_A_COLLECTION_ERROR}}
Используйте макросы в Excel на Mac, чтобы сэкономить время и сделать больше
Excel на Mac не всегда был таким же мощным, как в Windows. Макросы действительно не будут работать, если они не были созданы исключительно для Mac.
Начиная с 2013 года Microsoft вернула макросы. Существует два типа макросов: те, которые вы можете создать, быстро записывая свои действия, и те, которые используют VBA для разработки более совершенной автоматизации. В Office 2016 Excel использует одну и ту же кодовую базу на всех платформах. Это изменение облегчит работу макросов на разных платформах.
Итак, давайте посмотрим, как это работает в MacOS.
Включение макросов в Excel на Mac
Работа с макросами в Excel на вашем Mac может быть отключена по умолчанию. Этот параметр объясняется тем, что макросы могут быть потенциальным переносчиком
, Самый простой способ узнать, есть ли у вас разработчик Вкладка доступна на ленте в Excel. Если вы этого не видите, это просто включить.
Нажмите на превосходить в строке меню, а затем выберите предпочтения в раскрывающемся списке. В меню нажмите на лента Панель инструментов. В правом списке разработчик должен быть внизу, установите флажок. Наконец, нажмите Сохранить и вы должны увидеть вкладку «Разработчик» в конце ленты.
После создания каждой книги с макросами сохраните ее в новом формате. .XLSM использовать макросы после повторного открытия файла. Если вы забудете, Excel будет напоминать вам каждый раз, когда вы пытаетесь сохранить. Вам также нужно будет включать макросы каждый раз, когда вы открываете файл.
Запись макроса вручную в Excel на Mac
Хотя вы можете кодировать макросы
Это может быть не для всех. Если вы не готовы начать работу с VBA, Excel позволит вам записать шаги для вашего макроса на существующий лист. Нажмите на вкладку Разработчик, чтобы увидеть ваши варианты.
Вы ищете третий вариант на ленте, Запись макроса. Нажмите на это, и появится диалоговое окно, позволяющее вам назвать ваш макрос и установить сочетание клавиш. Вы можете настроить свой макрос на Текущая рабочая тетрадь, Новая рабочая книга, или в вашем Личная Макро Книга. Персональная книга макросов находится в вашем профиле пользователя и позволяет вам использовать ваши макросы между вашими файлами.
Как только вы запишите свои действия, они будут доступны на этой же вкладке. Нажатие макросов вызовет сохраненные макросы в вашей книге. Нажмите на название вашего макроса и нажмите Бежать запустить ваши записанные действия.
Пример 1: дневной объем продаж и среднечасовой
Для примера макроса, вы собираетесь просмотреть ежедневный лист продаж, с разбивкой продаж по часам. Ваш макрос будет добавлять ежедневные итоги продаж, а затем добавлять среднее значение в последнем столбце каждого почасового периода. Если вы работаете в сфере розничной торговли или занимаете другие позиции, это полезный лист для отслеживания доходов.
Нам нужно настроить первый лист. Использование этого первого бланка в качестве шаблона для ежедневного копирования на новую вкладку может сэкономить вам время. В первом столбце / строке поставить час / дату. Через верх добавить с понедельника по пятницу.
Затем в первом столбце приведите разбивку почасовых итогов от 8-5. Я использовал 24-часовое время, но вы можете использовать нотацию AM / PM, если хотите. Ваш лист должен соответствовать скриншоту выше.
Добавьте новую вкладку и скопируйте в нее свой шаблон. Затем заполните данные о продажах за день. (Если у вас нет данных для заполнения этого листа, вы можете ввести = RANDBETWEEN (10,1000) во всех ячейках, чтобы создать фиктивные данные.) Затем нажмите на разработчик в ленте.
Затем нажмите на Запись макроса. В диалоговом окне введите имя как AverageandSum и оставить его в Эта книга. Вы можете установить клавишу быстрого доступа, если хотите. Вы можете ввести описание, если вам нужно больше подробностей о том, что делает макрос. Нажмите кнопку ОК, чтобы начать настройку макроса.
В нижней части почасовых списков введите Ежедневные итоги. В ячейку рядом с ним введите = СУММ (В2: В10). Затем скопируйте и вставьте это в остальные столбцы. Потом в шапку добавь Средний после последнего столбца. Затем в следующую ячейку вниз введите = Среднее (В2: F2),. Затем вставьте это в ячейки в оставшейся части столбца.
Затем нажмите Остановить запись. Теперь ваш макрос можно использовать на каждом новом листе, который вы добавляете в свою книгу. Как только у вас будет другой лист данных, вернитесь к разработчик и нажмите макрос. Ваш макрос должен быть выделен, нажмите Run, чтобы добавить свои суммы и средние значения.
Этот пример может сэкономить вам пару шагов, но для более сложных действий, которые можно сложить. Если вы выполняете одинаковые операции с данными с одинаковым форматированием, используйте записанные макросы.
Макросы VBA в Excel на Mac
Записанные вручную макросы в Excel помогают с данными, которые всегда имеют одинаковый размер и форму. Это также полезно, если вы хотите выполнять действия на всем листе. Вы можете использовать свой макрос, чтобы доказать проблему.
Добавьте еще один час и день на лист и запустите макрос. Вы увидите, что макрос перезаписывает ваши новые данные. Чтобы обойти это, мы используем код, чтобы сделать макрос более динамичным с помощью VBA, которая является уменьшенной версией Visual Basic.
, Реализация ориентирована на автоматизацию для Office.
Это не так легко подобрать, как Applescript
, но автоматизация Office полностью построена на Visual Basic. Поэтому, как только вы поработаете с ним здесь, вы сможете быстро развернуться и использовать его в других приложениях Office. (Это также может быть очень полезно, если вы застряли на ПК с Windows на работе.)
При работе с VBA в Excel у вас есть отдельное окно. Снимок экрана выше — это наш записанный макрос, который отображается в редакторе кода. Оконный режим может быть полезен для игры с вашим кодом в процессе обучения. Когда ваш макрос зависает, есть инструменты отладки, чтобы посмотреть на состояние ваших переменных и данных листа.
Office 2016 теперь поставляется с полным редактором Visual Basic. Это позволяет вам использовать Object Browser и средства отладки, которые раньше были ограничены версией Windows. Вы можете получить доступ к Обозревателю объектов, перейдя в Вид> Обозреватель объектов или просто нажмите Shift + Command + B. Затем вы можете просмотреть все доступные классы, методы и свойства. Это было очень полезно при создании кода в следующем разделе.
Пример 2: дневной объем продаж и среднечасовое значение с кодом
Прежде чем вы начнете кодировать свой макрос, давайте начнем с добавления кнопки в шаблон. Этот шаг значительно упрощает доступ начинающего пользователя к вашему макросу. Они могут нажать кнопку, чтобы вызвать макрос, а не копаться во вкладках и меню.
Вернитесь к пустому шаблону, который вы создали на последнем шаге. Нажмите на разработчик чтобы вернуться на вкладку. Когда вы перейдете на вкладку, нажмите на кнопка. Затем щелкните где-нибудь на листе шаблона, чтобы разместить кнопку. Появится меню макросов, назовите ваш макрос и нажмите новый.
Окно Visual Basic откроется; вы увидите его в списке как Module2 в браузере проекта. Панель кода будет иметь Sub AverageandSumButton () вверху и несколькими строчками вниз End Sub. Ваш код должен находиться между этими двумя, поскольку это начало и конец вашего макроса.
Шаг 1: Объявление переменных
Для начала вам нужно будет объявить все ваши переменные
, Они находятся в блоке кода ниже, но обратите внимание на то, как они построены. Вы должны объявить все переменные, используя тусклый перед именем, а затем как с типом данных.
Sub AverageandSumButton()
Dim RowPlaceHolder As Integer
Dim ColumnPlaceHolder As Integer
Dim StringHolder As String
Dim AllCells As Range
Dim TargetCells As Range
Dim AverageTarget As Range
Dim SumTarget As Range
Теперь, когда у вас есть все ваши переменные, вам нужно сразу использовать некоторые переменные диапазона. Диапазоны — это объекты, которые содержат разделы рабочего листа в качестве адресов. Переменная Все клетки будет установлен на все активные ячейки на листе, который включает в себя метки столбца и строки. Вы получите это, позвонив ActiveSheet объект, а затем UsedRange имущество.
Проблема в том, что вам не нужны метки, включенные в средние и суммарные данные. Вместо этого вы будете использовать подмножество диапазона AllCells. Это будет диапазон TargetCells. Вы вручную объявляете его диапазон. Его начальный адрес будет ячейкой во втором ряду во втором столбце диапазона.
Вы называете это, называя AllCells диапазон, используя его ячейки класс, чтобы получить эту конкретную ячейку, используя (2,2). Чтобы получить последнюю ячейку в диапазоне, вы все равно позвоните AllCells. На этот раз с помощью SpecialCells способ получить собственность xlCellTypeLastCell. Вы можете увидеть оба из них в блоке кода ниже.
Set AllCells = ActiveSheet.UsedRange
Set TargetCells = Range(AllCells.Cells(2, 2), AllCells.SpecialCells(xlCellTypeLastCell))
Шаг 2: для каждого цикла
Следующие два раздела кода предназначены для каждого
петли. Эти циклы проходят через объект, чтобы воздействовать на каждое подмножество этого объекта. В этом случае вы делаете два из них, один для каждой строки и один для каждого столбца. Поскольку они почти одинаковы, здесь только один из них; но оба находятся в блоке кода. Детали практически идентичны.
Перед тем, как начать цикл для каждой строки, вам нужно установить целевой столбец, в котором цикл записывает среднее значение для каждой строки. Вы используете ColumnPlaceHolder переменная, чтобы установить эту цель. Вы устанавливаете это равным подсчитывать переменная ячейки класс AllCells. Добавьте один к нему, чтобы переместить его справа от ваших данных, добавив +1.
Далее вы собираетесь запустить цикл с помощью Для каждого. Затем вы хотите создать переменную для подмножества, в этом случае, subRow. После В, мы устанавливаем основной объект, который мы анализируем TargetCells. присоединять .Ряды в конце ограничить цикл только каждой строкой, а не каждой ячейкой в диапазоне.
Внутри цикла вы используете метод ActiveSheet.Cells, чтобы установить конкретную цель на листе. Координаты задаются с помощью subRow.Row чтобы получить строку, в которой в данный момент находится цикл. Затем вы используете ColumnPlaceHolder для другой координаты.
Вы используете это для всех трех шагов. Первое вы добавляете .значение после скобок и установить равным WorksheetFunction.Average (subRow). Это записывает формулу среднего значения строки в целевую ячейку. Следующая строка, которую вы добавляете .Стиль и установите это равным «Валюта». Этот шаг соответствует остальной части вашего листа. На последней строке вы добавляете .Font.Bold и установите его равным Правда. (Обратите внимание, что вокруг этой кавычки нет, так как это логическое значение.) Эта строка выделяет шрифт, чтобы итоговая информация выделялась среди остальной части листа.
Оба шага в примере кода ниже. Второй цикл меняет местами строки для столбцов и изменяет формулу на сумма. Этот метод связывает ваши расчеты с форматом текущего листа. В противном случае он связан с размером во время записи макроса. Поэтому, когда вы работаете больше дней или часов, функция растет вместе с вашими данными.
ColumnPlaceHolder = AllCells.Columns.Count + 1
For Each subRow In TargetCells.Rows
ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Value = WorksheetFunction.Average(subRow)
ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Style = "Currency"
ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Font.Bold = True
Next subRow
RowPlaceHolder = AllCells.Rows.Count + 1
For Each subColumn In TargetCells.Columns
ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Value = WorksheetFunction.Sum(subColumn)
ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Style = "Currency"
ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Font.Bold = "True"
Next subColumn
Шаг 3: пометьте свои резюме
Далее пометьте новую строку и столбец, установите RowPlaceHolder а также ColumnPlaceHolder снова. Во-первых, используйте AllCells.Row чтобы получить первый ряд в диапазоне, а затем AllCells.Column + 1 чтобы получить последний столбец. Затем вы будете использовать тот же метод, что и цикл, чтобы установить значение «Средние продажи». Вы также будете использовать то же самое .Font.Bold свойство жирным шрифтом вашего нового ярлыка.
Затем переверните его, установив в качестве заполнителей первый столбец и последнюю строку, чтобы добавить «Тотальная распродажа». Вы хотите смело это тоже.
Оба шага находятся в блоке кода ниже. Это конец макроса, отмеченного End Sub. Теперь у вас должен быть весь макрос
и сможете нажать кнопку, чтобы запустить его. Вы можете вставить все эти блоки кода по порядку в свой лист Excel, если хотите обмануть, но где в этом удовольствие?
ColumnPlaceHolder = AllCells.Columns.Count + 1
RowPlaceHolder = AllCells.Row
ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Average Sales"
ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = True
ColumnPlaceHolder = AllCells.Column
RowPlaceHolder = AllCells.Rows.Count + 1
ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Total Sales"
ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = True
End Sub
Что дальше для макросов в Excel на Mac?
Записанные макросы отлично подходят для предсказуемого повторения. Даже если это так просто, как изменение размера всех ячеек и выделение жирным шрифтом, это может сэкономить ваше время.
Visual Basic открывает пользователям Mac Excel возможность углубиться в автоматизацию Office. Visual Basic традиционно был доступен только в Windows. Это позволяет вашим макросам динамически адаптироваться к данным, делая их более универсальными. Если у вас есть терпение, это может стать дверью к более сложному программированию.
Как работать с макросами в Excel — Макросы в Excel, подготовка к созданию, запись, просмотр, изменение
Прежде чем начать работать с макросами, то есть, записывать, удалять, выполнять (запускать), изменять (редактировать), копировать макросы VBA, найдем пункты меню и панели, в которых сосредоточены все необходимые для выполнения этих действий инструменты. Расположение инструментов для работы с макросами зависит от версии пакета MS Office. Рассмотрим расположение интересующих нас пунктов меню и панелей на примере двух приложений Word и Excel.
Microsoft Office 2003
Инструменты для работы с макросами в этих приложениях имеют одинаковое расположение и находятся в меню Сервис/Макрос
Здесь расположены пять пунктов меню: «Макросы», «Начать запись», «Безопасность», «Редактор Visual Basic» и «Редактор сценариев».
Выбор пункта меню «Макросы» выдает окно со списком уже существующих макросов и позволяет совершать такие общие действия как выполнение (запуск), отладку, изменение, создание и удаление макросов. Здесь стоит заметить, что макросы могут храниться в разных местах. Основное хранилище макросов в Excel — это личная книга макросов, файл с названием Personal.xls, основное хранилище макросов в Word — это общий шаблон, файл с названием Normal.dot, кроме этого макросы могут храниться и в обычных файлах этих приложений — рабочих книгах и документах соответственно.
Выбор пункта меню «Начать запись», как уже понятно из названия, запускает макрорекордер (рекордер), который записывает действия пользователя и автоматически переводит их в программный код языка VBA (Visual Basic for Application).
Пункт меню «Безопасность» позволяет изменять уровень безопасности, позднее мы к этому пункту еще вернемся.
Ну и выбор пункта меню «Редактор Visual Basic» запускает собственно говоря этот упомянутый редактор, его также называют Visual Basic Editor или сокращенно VBE.
Microsoft Office 2007
В приложениях Word и Excel этой версии инструменты для работы с макросами расположены на вкладке «Вид» в разделе «Макросы», в правой части экрана. В то же время существует специальная вкладка на ленте с названием «Разработчик», с более полным набором инструментов которая по умолчанию отключена. Для того чтобы отобразить эту вкладку, необходимо нажать на кнопку «Office» и выбрать «Параметры Word» либо «Параметры Excel» в зависимости от приложения
После этого выбираем раздел «Основные параметры Word» либо «Основные параметры Excel» и подключаем опцию «Показывать вкладку разработчик на ленте».
Кроме инструментов для работы с макросами на вкладке содержатся инструменты для работы с формами и XML-файлами (эту вкладку видно на скриншоте выше). Основные функции, закрепленные за кнопками вкладки «Разработчик», аналогичны тем, которые описаны для версии MS Office 2003. К остальным будем возвращаться по мере необходимости.
Microsoft Office 2010
В приложениях этой версии расположение инструментов такое же как и в версии 2007. Вкладка «Вид», раздел «Макросы», либо вкладка «Разработчик». Для того чтобы отобразить ее на ленте, сделаем следующее:
1. На вкладке «Файл» выберем «Параметры» чтобы открыть диалоговое окно «Параметры Excel» либо «Параметры Word», в зависимости от приложения
2. Щелкнем «Настройка ленты» в левой части диалогового окна
3. Поставим флажок перед надписью «Разработчик»
Другие материалы по теме:
Макросы: Создание собственных макросов
8. Макросы: Создание собственных макросов
Теперь пора начать писать свои собственные макросы. Стандартные макросы, описанные мною в предыдущей главе, должны были дать вам некоторое представление о том, что вы можете сделать при помощи макросов, но это было только начало. Поддержка макросов в Common Lisp не является чем-то большим, чем поддержка функций в C, и поэтому каждый программист на Lisp может создать свои собственные варианты стандартных конструкций контроля точно так же, как каждый программист на C может написать простые варианты функций из стандартной библиотеки C. Макросы являются частью языка, которая позволяет вам создавать абстракции поверх основного языка и стандартной библиотеки, что приближает вас к возможности непосредственного выражения того, что вы хотите выразить.
Возможно, самым большим препятствием для правильного понимания макросов является, как это ни парадоксально, то, что они так хорошо интегрированы в язык. Во многих отношениях они кажутся просто странной разновидностью функций — они написаны на Лисп, они принимают аргументы и возвращают результаты, и они позволяют вам абстрагироваться от отвлекающих деталей. Тем не менее, несмотря на эти многочисленные сходства, макросы работают на другом, по сравнению с функциями, уровне и создают совершенно иной вид абстракции.
Как только вы поймете разницу между макросами и функциями, тесная интеграция макросов в язык станет огромным благом. И в то же время для новых лисперов это часто является источником путаницы. Следующая история, не являющаяся подлинной в историческом или техническом смысле, попытается уменьшить ваше замешательство, направляя ваши мысли касательно работы макросов в правильное русло.
История Мака: обычная такая история
Когда-то, давным-давно, жила-была компания Lisp программистов. Это было так давно, что в Lisp даже не существовало макросов. Каждый раз все то, что не могло быть определено с помощью функций или сделано с помощью специализированных операторов, должно было быть написано в полном объеме, что было довольно трудоемким делом. К сожалению, программисты в этой компании были хоть и блестящи, но очень ленивы. Нередко в своих программах, когда процесс написания больших объемов кода становился слишком утомителен, они вместо кода писали комментарии, описывающие требуемый в этом месте программы код. К еще большему сожалению, из-за своей лени программисты также ненавидели возвращаться назад и действительно писать код, описанный в комментариях. Вскоре компания получила большую кучу кода, которую никто не мог запустить, потому что он был полон комментариев с описанием того, что еще предстоит написать.
В отчаянии большой босс нанял младшего (junior) программиста, Мака, чьей работой стал поиск комментариев, написание требуемого кода и вставка его в программу на место комментариев. Мак никогда не запускал программы, ведь они не были завершены и поэтому он попросту не мог этого сделать. Но даже если бы они были завершены, Мак не знал, какие данные необходимо подать на их вход. Поэтому он просто писал свой код, основываясь на содержимом комментариев, и посылал его назад создавшему комментарий программисту.
С помощью Мака все программы вскоре были доделаны, и компания заработала уйму денег продавая их: так много денег, что смогла удвоить количество программистов. Но по какой-то причине никто не думал нанимать кого-то в помощь Маку; вскоре он один помогал нескольким дюжинам программистов. Чтобы не тратить все свое время на поиск комментариев в исходном коде, Мак внес небольшие изменения в используемый программистами компилятор. Теперь, если компилятор встречал комментарий, то отсылал его электронной почтой Маку, а затем ждал ответа с замещающим комментарий кодом. К сожалению, даже с этими изменениями Маку было тяжело удовлетворять запросам программистов. Он работал так тщательно, как только мог, но иногда, особенно когда записи не были ясны, он допускал ошибки.
Однако программисты обнаружили, что чем точнее они пишут свои комментарии, тем больше вероятность того, что Мак вернет правильный код. Как-то раз один из программистов, встретив затруднение с описанием в словах нужного кода, включил в один из комментариев программу на Lisp, которая генерировала нужный код. Такой комментарий был удобен Маку: он просто запустил программу и послал результат компилятору.
Следующее новшество появилось, когда программист вставил в самый верх одной из своих программ комментарий, содержащий определение функции и пояснение, гласившее: «Мак, не пиши здесь никакого кода, но сохрани эту функцию на будущее; я собираюсь использовать ее в некоторых своих комментариях.» Другие комментарии в этой программе гласили следующее: «Мак, замени этот комментарий на результат выполнения той функции с символами x
и y
как аргументами.»
Этот метод распространился так быстро, что в течение нескольких дней большинство программ стало содержать дюжины комментариев с описанием функций, которые использовались только кодом в других комментариях. Чтобы облегчить Маку различение комментариев, содержащих только определения и не требующих немедленного ответа, программисты отмечали их стандартным предисловием: «Definition for Mac, Read Only» (Определение для Мака, только для чтения). Это (как мы помним, программисты были очень ленивы) быстро сократилось до «DEF. MAC. R/O», а потом до «DEFMACRO».
Очень скоро в комментариях для Мака вообще не осталось английского. Целыми днями он читал и отвечал на электронные письма от компилятора, содержащие DEFMACRO комментарии и вызывал функции, описанные в DEFMACRO. Так как Lisp программы в комментариях осуществляли всю реальную работу, то работа с электронными письмами перестала быть проблемой. У Мака внезапно стало много свободного времени, и он сидел в своем кабинете и грезил о белых песчаных пляжах, чистой голубой океанской воде и напитках с маленькими бумажными зонтиками.
Несколько месяцев спустя программисты осознали что Мака уже довольно давно никто не видел. Придя в его кабинет, они обнаружили, что все покрыто тонким слоем пыли, стол усыпан брошюрами о различных тропических местах, а компьютер выключен. Но компилятор продолжал работать! Как ему это удавалось? Выяснилось, что Мак сделал заключительное изменение в компиляторе: вместо отправки электронного письма с комментарием Маку компилятор теперь сохранял функции, описанные с помощью DEFMACRO комментариев, и запускал при вызове их из других комментариев. Программисты решили, что нет оснований говорить большим боссам, что Мак больше не приходит на работу. Так происходит и по сей день: Мак получает зарплату и время от времени шлет программистам открытки то из одной тропической страны, то из другой.
Время раскрытия макросов против времени выполнения
Ключом к пониманию макросов является полное понимание разницы между кодом, генерирующим код (макросами), и кодом, который в конечном счете выполняет программу (все остальное). Когда вы пишете макросы, вы пишете программы, которые будут использоваться компилятором для генерации кода, который затем будет скомпилирован. Только после того, как все макросы будут полностью раскрыты, а полученный код скомпилирован, программа сможет быть запущена. Время, когда выполняются макросы, называется временем раскрытия макросов; оно отлично от времени выполнения, когда выполняется обычный код, включая код, сгенерированный макросами.
Очень важно полностью понимать это различие, так как код, работающий во время раскрытия макросов, запускается в окружении, сильно отличающемся от окружения кода, работающего во время выполнения. А именно, во время раскрытия макросов не существует способа получить доступ к данным, которые будут существовать во время выполнения. Подобно Маку, который не мог запускать программы, над которыми он работал, так как не знал, что является корректным входом для них, код, работающий во время раскрытия макросов, может работать только с данными, являющимися неотъемлемой частью исходного кода. Для примера предположим, что следующий исходный код появляется где-то в программе:
(defun foo (x)
(when (> x 10) (print 'big)))
Обычно вы бы думали о x
как о переменной, которая будет содержать аргумент, переданный при вызове foo. Но во время раскрытия макросов (например когда компилятор выполняет макрос WHEN) единственными доступными данными является исходный код. Так как программа пока не выполняется, нет вызова foo
и, следовательно, нет значения, ассоциированного с x
. Вместо этого, значения, которые компилятор передает в WHEN, являются списками Lisp, представляющими исходный код, а именно (> x 10)
и (print 'big)
. Предположим, что WHEN определен, как вы видели в предыдущей главе, подобным образом:
(defmacro when (condition &rest body)
`(if ,condition (progn ,@body)))
При компиляции кода foo, макрос WHEN будет запущен с этими двумя формами в качестве аргументов. Параметр condition
будет связан с формой (> x 10)
, а форма (print 'big)
будет собрана (will be collected) в список (и будет его единственным элементом), который станет значением параметра &rest body
. Выражение квазицитирования затем сгенерирует следующий код:
(if (> x 10) (progn (print 'big)))
подставляя значение condition
, а также вклеивая значение body в PROGN.
Когда Lisp интерпретируется, а не компилируется, разница между временем раскрытия макросов и временем выполнения менее очевидна, так как они «переплетены» во времени (temporally intertwined). Также стандарт языка не специфицирует в точности того, как интерпретатор должен обрабатывать макросы: он может раскрывать все макросы в интерпретируемой форме, а затем интерпретировать полученный код, или же он может начать с непосредственно интерпретирования формы и раскрывать макросы при их встрече. В обоих случаях макросам всегда передаются невычисленные объекты Lisp, представляющие подформы формы макроса, и задачей макроса все также является генерирование кода, который затем осуществит какие-то действия, а не непосредственное осуществление этих действий.
DEFMACRO
Как вы видели в главе 3, макросы на самом деле определяются с помощью форм DEFMACRO, что означает, разумеется, «DEFine MACRO», а не «Definition for Mac». Базовый шаблон DEFMACRO очень похож на шаблон DEFUN.
(defmacro name (parameter*)
"Optional documentation string."
body-form*)
Подобно функциям, макрос состоит из имени, списка параметров, необязательной строки документации и тела, состоящего из выражений Lisp 1). Однако, как я только что говорил, работой макроса не является осуществление какого-то действия напрямую, — его работой является генерирование кода, который затем сделает то, что вам нужно.
Макросы могут использовать всю мощь Lisp при генерировании своих раскрытий, поэтому в этой главе я смогу дать лишь обзор того, что вы можете делать с помощью макросов. Однако я могу описать общий процесс написания макросов, который подходит для всех типов макросов, от самых простых до наиболее сложных.
Задачей макроса является преобразование формы макроса (другими словами, формы Lisp, первым элементом которой является имя макроса) в код, который осуществляет определенные действия. Иногда вы пишете макрос начиная с того кода, который вы бы хотели иметь возможность писать, то есть с примера формы макроса. В другой раз вы решаете написать макрос после того, как вы использовали какой-то образец кода несколько раз и понимаете, что можете сделать ваш код чище путем абстрагирования этого образца.
Несмотря на то, с какого конца вы начинаете, вы должны представлять противоположный конец перед тем, как сможете начать создавать макрос: вы должны знать и то, откуда движетесь, и то, куда, до того как сможете рассчитывать написать код, осуществляющий это автоматически. Таким образом, первым шагом в написании макроса является написание по крайней мере одного примера вызова макроса, и кода, в который этот вызов должен раскрыться.
После того, как у вас есть пример вызова и его желаемое раскрытие, вы готовы ко второму шагу: фактическому написанию кода макроса. Для простых макросов это будет тривиальным делом написания шаблона-квазицитирования с параметрами макроса, вставленными на нужные места. Сложные макросы сами будут значительными программами, использующими вспомогательные функции и структуры данных.
После того, как вы написали код, преобразующий пример вызова в соответствующее раскрытие, вам нужно убедиться в том, что у абстракции, предоставляемой макросом, нет «протечек» деталей реализации. Предоставляемые макросами «дырявые» абстракции будут работать хорошо только для определенных аргументов или будут взаимодействовать с кодом вызывающего окружения нежелательными способами. Как оказывается, макросы могут «протекать» лишь небольшим количеством способов, все из которых легко избежать, если вы знаете, как выявлять их. Я обсужу как это делается в секции «Устранение протечек».
Подводя итог можно сказать, что шаги по написанию макросов следующие:
1. Написание примера вызова макроса, а затем кода, в который он должен быть раскрыт (или в обратном порядке).
2. Написание кода, генерирующего написанный вручную код раскрытия по аргументам в примере вызова.
3. Проверка того, что предоставляемая макросом абстракция не «протекает».
Пример макроса: do-primes
Для того, чтобы увидеть, как этот трёхшаговый процесс осуществляется, вы напишете макрос do-primes
, который предоставляет конструкцию итерирования, подобную DOTIMES и DOLIST, за исключением того, что вместо итерирования по целым числам или элементам списка итерирование будет производиться по последовательным простым числам. Этот пример не является примером чрезвычайно полезного макроса, он — всего лишь средство демонстрации вышеописанного процесса.
Прежде всего вам нужны две вспомогательные функции: одна для проверки того, является ли данное число простым, и вторая, возвращающая следующее простое число, большее или равное ее аргументу. В обоих случаях вы можете использовать простой, но неэффективный метод «грубой силы».
(defun primep (number)
(when (> number 1)
(loop for fac from 2 to (isqrt number) never (zerop (mod number fac)))))(defun next-prime (number)
(loop for n from number when (primep n) return n))
Теперь вы можете написать макрос. Следуя процедуре, очерченной выше, вам нужен по крайней мере один пример вызова макроса и кода, в который он должен быть раскрыт. Предположим, что вы начали с мысли о том, что хотите иметь возможность написать следующее:
(do-primes (p 0 19)
(format t "~d " p))
для выражения цикла, который выполняет тело для каждого простого числа, большего либо равного 0 и меньшего либо равного 19, используя переменную p
для хранения очередного простого числа. Имеет смысл смоделировать этот макрос с помощью стандартных макросов DOLIST и DOTIMES; макрос, следующий образцу существующих макросов, легче понять и использовать, нежели макросы, которые вводят неоправданно новый синтаксис.
Без использования макроса do-primes
вы можете написать такой цикл путем использования DO (и двух вспомогательных функций, определенных ранее) следующим образом:
(do ((p (next-prime 0) (next-prime (1+ p))))
((> p 19))
(format t "~d " p))
Теперь вы готовы к написанию кода макроса, который будет выполнять необходимое преобразование.
Макропараметры
Так как аргументы, передаваемые в макрос, являются объектами Lisp, представляющими исходный код вызова макроса, первым шагом любого макроса является извлечение тех частей этих объектов, которые нужны для вычисления раскрытия. Для макросов, которые просто подставляют свои аргументы напрямую в шаблон, этот шаг тривиален: подходит простое определение правильных параметров для захвата нужных аргументов.
Но, кажется, такого подхода недостаточно для do-primes
. Первый аргумент вызова do-primes
является списком, содержащим имя переменной цикла, p
; нижнюю границу, 0; верхнюю границу, 19. Но, если вы посмотрите на раскрытие, список, как целое, не встречается в нем: эти три элемента разделены и вставлены в различные места.
Вы можете определить do-primes
с двумя параметрами, первый для захвата этого списка и параметр &rest для захвата форм тела цикла, а затем разобрать первый список вручную подобным образом:
(defmacro do-primes (var-and-range &rest body)
(let ((var (first var-and-range))
(start (second var-and-range))
(end (third var-and-range)))
`(do ((,var (next-prime ,start) (next-prime (1+ ,var))))
((> ,var ,end))
,@body)))
Очень скоро я объясню как тело макроса генерирует правильное раскрытие; сейчас же вам следует отметить, что переменные var
, start
и end
, каждая содержит значение, извлеченное из var-and-range
, и эти значения затем подставляются в выражение квазицитирования, генерирующее раскрытие do-primes
.
Однако, вам не нужно разбирать var-and-range
вручную, так как список параметров макроса является так называемым списком деструктурируемых параметров. Деструктурирование, как и говорит название, осуществляет разбор некоторой структуры, в нашем случае списочной структуры форм, переданных макросу.
Внутри списка деструктурируемых параметров простое имя параметра может быть заменено вложенным списком параметров. Параметры в таком списке будут получать свои значения из элементов выражения, которое было бы связано с параметром, замененным этим списком. Например, вы можете заменить var-and-range
списком (var start end)
и три элемента списка будут автоматически деструктурированы в эти три параметра.
Другой особенностью списка параметров макросов является то, что вы можете использовать &body как синоним &rest. Семантически &body и &rest эквиваленты, но множество сред разработки будут использовать факт наличия параметра &body для изменения того, как они будут выравнивать код использования макроса, поэтому обычно параметры &body используются для захвата списка форм, которые составляют тело макроса.
Таким образом, вы можете улучшить определение макроса do-primes
и дать подсказку (как людям, читающим ваш код, так и вашим инструментам разработки) об его предназначении:
(defmacro do-primes ((var start end) &body body)
`(do ((,var (next-prime ,start) (next-prime (1+ ,var))))
((> ,var ,end))
,@body))
В стремлении к краткости список деструктурируемых параметров также предоставляет вам автоматическую проверку ошибок: при определении таким образом do-primes
, Lisp будет способен определять вызовы, в которых первый аргумент не является трехэлементным списком, и выдавать вам разумные сообщения об ошибках (как когда вы вызываете функцию со слишком малым или, наоборот, слишком большим числом аргументов). Также, среды разработки, такие как SLIME, указывающие вам какие аргументы ожидаются, как только вы напечатаете имя функции или макроса, при использовании вами списка деструктурируемых параметров будут способны более конкретно указать синтаксис вызова макроса. С исходным определением SLIME будет подсказывать вам, что do-primes
вызывается подобным образом:
(do-primes var-and-range &rest body)
С новым же описанием она сможет указать вам, что вызов должен выглядеть следующим образом:
(do-primes (var start end) &body body)
Списки деструктурируемых параметров могут содержать параметры &optional, &key и &rest, а также вложенные деструктурируемые списки. Однако все эти возможности не нужны вам для написания do-primes
.
Генерация раскрытия
Так как do-primes
является довольно простым макросом, после деструктурирования аргументов, всё что вам остаётся сделать — это подставить их в шаблон для получения раскрытия.
Для простых макросов, наподобие do-primes
, лучшим вариантом является использование специального синтаксиса квазицитирования. Коротко говоря, выражения квазицитирования подобны выражениям цитирования, за исключением того, что вы можете «раскавычить» определенные подвыражения, предваряя их запятой, за которой возможно следует знак «at» (@). Без этого знака «at» запятая вызывает включение как есть значения следующего за ней подвыражения. Со знаком «at» значение, которое должно быть списком, «вклеивается» в окружающий список.
Другой пригодный способ думать о синтаксисе квазицитирования как об очень кратком способе написания кода, генерирующего списки. Такое представление о нем имеет преимущество, так как является очень близким к тому, что на самом деле происходит «под капотом»: когда процедура чтения считывает выражение квазицитирования, она преобразует его в код, который генерирует соответствующую списковую структуру. Например, `(,a b) вероятно будет прочитано как (list a ‘b). Стандарт языка не указывает, какой в точности код процедура чтения должна выдавать, пока она генерирует правильные списковые структуры.
Таблица 8-1 показывает некоторые примеры выражений квазицитирования вместе с эквивалентным создающим списки кодом, а также результаты, которые вы получите при вычислении как выражений квазицитирования, так и эквивалентного кода2):
Таблица 8-1. Примеры квазицитирования | ||
---|---|---|
Синтаксис квазицитирования | Эквивалентный создающий списки код | Результат |
`(a (+ 1 2) c) | (list ‘a ‘(+ 1 2) ‘c) | (a (+ 1 2) c) |
`(a ,(+ 1 2) c) | (list ‘a (+ 1 2) ‘c) | (a 3 c) |
`(a (list 1 2) c) | (list ‘a ‘(list 1 2) ‘c) | (a (list 1 2) c) |
`(a ,(list 1 2) c) | (list ‘a (list 1 2) ‘c) | (a (1 2) c) |
`(a ,@(list 1 2) c) | (append (list ‘a) (list 1 2) (list ‘c)) | (a 1 2 c) |
Важно заметить, что нотация квазицитирования является просто удобством. Но это большое удобство. Для оценки того, насколько оно велико, сравните версию do-primes
с квазицитированием со следующей версией, которая явно использует создающий списки код:
(defmacro do-primes-a ((var start end) &body body)
(append '(do)
(list (list (list var
(list 'next-prime start)
(list 'next-prime (list '1+ var)))))
(list (list (list '> var end)))
body))
Как вы очень скоро увидите, текущая реализация do-primes
не обрабатывает корректно некоторые граничные случаи. Но первое, что вы должны проверить, — это то, что она по крайней мере работает для исходного примера. Вы можете сделать это двумя способами. Во-первых, вы можете косвенно протестировать свою реализацию просто воспользовавшись ею (подразумевая, что если итоговое поведение корректно, то и раскрытие также корректно). Например, вы можете напечатать исходный пример использования do-primes
в REPL и увидеть, что он и в самом деле напечатает правильную последовательность простых чисел.
CL-USER> (do-primes (p 0 19) (format t "~d " p))
2 3 5 7 11 13 17 19
NIL
Или же вы можете проверить макрос напрямую, посмотрев на раскрытие определенного вызова. Функция MACROEXPAND-1 получает любое выражение Lisp в качестве аргумента и возвращает результат осуществления одного шага раскрытия макроса3). Так как MACROEXPAND-1 является функцией, для дословной передачи ей формы макроса вы должны зацитировать эту форму. Теперь вы можете воспользоваться MACROEXPAND-1 для просмотра раскрытия предыдущего вызова4).
CL-USER> (macroexpand-1 '(do-primes (p 0 19) (format t "~d " p)))
(DO ((P (NEXT-PRIME 0) (NEXT-PRIME (1+ P))))
((> P 19))
(FORMAT T "~d " P))
T
Также, для большего удобства, в SLIME вы можете проверить раскрытие макроса поместив курсор на открывающую скобку формы макроса в вашем исходном коде и набрав C-c RET для вызова функции Emacs slime-macroexpand-1
, которая передаст форму макроса в MACROEXPAND-1 и напечатает результат во временном буфере.
Теперь вы можете видеть, что результат раскрытия макроса совпадает с исходным (написанным вручную) раскрытием, и поэтому кажется, что do-primes
работает.
Устранение протечек
В своем эссе «Закон дырявых абстракций» Джоэл Спольски придумал термин «дырявой абстракции» для описания такой абстракции, через которую «протекают» детали, абстрагирование от которых предполагается. Так как написание макроса — это способ создания абстракции, вам следует убедиться, что ваш макрос излишне не «протекает»5)
Как оказывается, внутренние детали реализации могут «протекать» через макросы тремя способами. К счастью, довольно легко сказать, имеет ли место одна из трех этих возможностей, и устранить их.
Текущее определение страдает от одной из трех возможных «протечек» макросов, а именно, оно вычисляет подформу end
слишком много раз. Предположим, что вы вызвали do-primes
с таким выражением, как (random 100)
, на месте параметра end
вместо использования числового литерала, такого, как 19.
(do-primes (p 0 (random 100))
(format t "~d " p))
Предполагаемым поведением здесь является итерирование по простым числам от нуля до какого-то случайного простого числа, возвращенного (random 100)
. Однако, это не то, что делает текущая реализация, как это показывает MACROEXPAND-1.
CL-USER> (macroexpand-1 '(do-primes (p 0 (random 100)) (format t "~d " p)))
(DO ((P (NEXT-PRIME 0) (NEXT-PRIME (1+ P))))
((> P (RANDOM 100)))
(FORMAT T "~d " P))
T
При запуске кода раскрытия RANDOM будет вызываться при каждой проверке условия окончания цикла. Таким образом, вместо итерирования, пока p
не станет больше, чем изначально выбранное случайное число, этот цикл будет осуществляться пока не случится, что выбранное в очередной раз случайное число окажется меньше текущего значения p
. Хотя общее число итераций по прежнему случайно, оно будет подчиняться вероятностному распределению, отличному от равномерного распределения результатов RANDOM.
Это является «протечкой» абстракции, так как для корректного использования макроса, его пользователь должен быть осведомлен о том, что форма end
будет вычислять более одного раза. Одним из способов устранения этой «протечки» является простое специфицирование ее как поведения do-primes
. Но это не достаточно удовлетворительно: при реализации макросов вам следует пытаться соблюдать Правило Наименьшего Удивления. К тому же программисты обычно ожидают, что формы, которые они передают макросам, будут вычисляться не большее число раз, чем это действительно необходимо6). Более того, так как do-primes
построена на основе модели стандартных макросов DOTIMES и DOLIST, которые вычисляют однократно все свои формы, кроме форм тела, то большинство программистов будут ожидать от do-primes
подобного поведения.
Вы можете исправить множественное вычисление достаточно легко: вам просто следует сгенерировать код, который вычисляет end
однократно и сохраняет результат в переменную для дальнейшего использования. Вспомним, что в цикле DO переменные с формой инициализации и без формы вычисления последующих значений не изменяются от итерации к итерации. Поэтому вы можете исправить проблему множественных вычислений следующим определением:
(defmacro do-primes ((var start end) &body body)
`(do ((ending-value ,end)
(,var (next-prime ,start) (next-prime (1+ ,var))))
((> ,var ending-value))
,@body))
К сожалению данное исправление вводит две новые «протечки» в предоставляемую нашим макросом абстракцию.
Одна из этих «протечек» подобна проблеме множественных вычислений, которую мы только что исправили. Так как формы инициализации переменных цикла DO вычисляются в том порядке, в каком переменные определены, то когда раскрытие макроса вычисляется, выражение, переданное как end
, будет вычислено перед выражением, переданным как start
, то есть в обратном порядке от того, как они идут в вызове макроса. Эта «протечка» не вызывает никаких проблем пока start
и end
являются литералами вроде 0 и 19. Но, если они являются формами, которые могут иметь побочные эффекты, вычисление их в неправильном порядке снова нарушает Правило Наименьшего Удивления.
Эта «протечка» устраняется тривиально путем изменения порядка определения двух переменных.
(defmacro do-primes ((var start end) &body body)
`(do ((,var (next-prime ,start) (next-prime (1+ ,var)))
(ending-value ,end))
((> ,var ending-value))
,@body))
Последняя «протечка», которую нам нужно устранить, была создана использованием имени переменной ending-value
. Проблема заключается в том, что имя, которое должно быть полностью внутренней деталью реализации макроса, может вступить во взаимодействие с кодом, переданным макросу, или с контекстом, в котором макрос вызывается. Следующий, кажущийся вполне допустимым, вызов do-primes
не работает корректно из-за данной «протечки»:
(do-primes (ending-value 0 10)
(print ending-value))
То же касается и следующего вызова:
(let ((ending-value 0))
(do-primes (p 0 10)
(incf ending-value p))
ending-value)
И снова MACROEXPAND-1 может вам показать, в чем проблема. Первый вызов расширяется в следующее:
(do ((ending-value (next-prime 0) (next-prime (1+ ending-value)))
(ending-value 10))
((> ending-value ending-value))
(print ending-value))
Некоторые реализации Lisp могут отвергуть такой код из-за того, что ending-value
используется дважды в качестве имен переменных одного и того-же цикла DO. Если же этого не произойдет, то код зациклится, так как ending-value
никогда не станет больше себя самого.
Второй проблемный вызов расширяется следующим образом:
(let ((ending-value 0))
(do ((p (next-prime 0) (next-prime (1+ p)))
(ending-value 10))
((> p ending-value))
(incf ending-value p))
ending-value)
В этом случае сгенерированный код полностью допустим, но его поведение совсем не то, что нужно вам. Так как привязка ending-value, установленная с помощью LET снаружи цикла перекрывается переменной с таким же именем внутри DO,
то форма (incf ending-value p)
увеличивает переменную цикла ending-value
вместо внешней переменной с таким же именем, создавая другой вечный цикл7).
Очевидно, что то, что нам нужно для устранения этой «протечки» — это символ, который никогда не будет использоваться снаружи кода, сгенерированного макросом. Вы можете попытаться использовать действительно маловероятный символ, но это все равно не даст вам никаких гарантий. Вы можете также защитить себя в некоторой степени путем использования пакетов, описанных в главе 21. Но существует лучшее решение.
Функция GENSYM возвращает уникальный символ при каждом своем вызове. Такой символ никогда до этого не был прочитан процедурой чтения Lisp и, так как он не интернирован (isn’t interned) ни в один пакет, никогда не будет прочитан ею. Поэтому, вместо использования литеральных имен наподобие ending-value
, вы можете генерировать новый символ при каждом раскрытии do-primes
.
(defmacro do-primes ((var start end) &body body)
(let ((ending-value-name (gensym)))
`(do ((,var (next-prime ,start) (next-prime (1+ ,var)))
(,ending-value-name ,end))
((> ,var ,ending-value-name))
,@body)))
Обратите внимание, что код, вызывающий GENSYM не является частью раскрытия; он запускается как часть процедуры раскрытия макроса и поэтому создает новый символ при каждом раскрытии макроса. Это может казаться несколько странным сначала: ending-value-name
является переменной, чье значение является именем другой переменной. Но на самом деле тут нет никаких отличий от параметра var
, чье значение также является именем переменной. Единственная разница состоит в том, что значение var
было создано процедурой чтения, когда форма макроса была прочитана, а значение ending-value-name
было сгенерированно программно при запуске кода макроса.
С таким определением две ранее проблемные формы расширяются в код, который работает так, как вам нужно. Первая форма:
(do-primes (ending-value 0 10)
(print ending-value))
расширяется в следующее:
(do ((ending-value (next-prime 0) (next-prime (1+ ending-value)))
(#:g2141 10))
((> ending-value #:g2141))
(print ending-value))
Теперь переменная, используемая для хранения конечного значения является сгенерированным функцией gensym
символом, #:g2141. Имя идентификатора, G2141, было сгенерировано с помощью GENSYM, но важно не это; важно то, что идентификатор хранит значение объекта. Сгенерированные таким образом символы печатаются в обычном синтаксисе для неинтернированных символов: с начальным #:
.
Вторая ранее проблемная форма:
(let ((ending-value 0))
(do-primes (p 0 10)
(incf ending-value p))
ending-value)
после замены do-primes
его раскрытием будет выглядеть подобным образом:
(let ((ending-value 0))
(do ((p (next-prime 0) (next-prime (1+ p)))
(#:g2140 10))
((> p #:g2140))
(incf ending-value p))
ending-value)
И снова, тут нет никакой «протечки», так как переменная ending-value
, связанная окружающей цикл do-primes
формой LET, больше не перекрывается никакими переменными, вводимыми в коде раскрытия.
Не все литеральные имена, используемые в раскрытии макросов, обязательно вызовут проблему; когда вы приобретете больше опыта работы с различными связывающими формами, вы сможете определять, приведет ли использование данного имени в определенном месте к «протечке» в предоставляемой макросом абстракции. Но нет никаких реальных проблем в использовании сгенерированных имен везде для уверенности.
Этим исправлением мы устранили все «протечки» в реализации do-primes
. После получения некоторого опыта в написании макросов, вы научитесь писать макросы с заранее устраненными «протечками» такого рода. На самом деле это довольно просто, если вы будете следовать следующим правилам:
- Если только нет определенной причины сделать иначе, включайте все подформы в раскрытие на такие позиции, чтобы они выполнялись в том же порядке, в каком они идут в вызове макроса.
- Если только нет определенной причины сделать иначе, убедитесь, что все подформы вычисляются лишь единожды, путём создания переменных в раскрытии, для хранения значений вычисления форм аргументов, и последующего использования этих переменных везде в раскрытии, где нужны значения этих форм.
- Используйте GENSYM во время раскрытия макросов для создания имен переменных, используемых в раскрытии.
Макросы, создающие макросы
Конечно же, нет никаких причин, по которым вы должны получать преимущества от использования макросов только при написании функций. Задачей макросов является абстрагирование общих синтаксических образцов, а некоторые образцы появляются снова и снова и при написании макросов, поэтому и тут можно получить преимущества от абстрагирования.
На самом деле, вы уже видели один такой образец: многие макросы, как и последняя версия do-primes
, начинаются с LET, который вводит несколько переменных, содержащих сгенерированные символы для использовании в раскрытии макроса. Так как это общий образец, почему бы нам не абстрагировать его с помощью его собственного макроса?
В этой секции вы напишете макрос with-gensyms
, который делает именно это. Другими словами, вы напишете макрос, создающий макрос: макрос, который генерирует код, который генерирует код. В то время как сложные макросы, создающие макросы, могут слегка сбивать с толку, пока вы не привыкнете к легкому умозрительному обращению с различными уровнями кода, with-gensyms
довольно прямолинеен и послужит полезным и, в то же время, не требующим непомерных умственных усилий упражнением.
Предположим, вы хотите иметь возможность написать подобное:
(defmacro do-primes ((var start end) &body body)
(with-gensyms (ending-value-name)
`(do ((,var (next-prime ,start) (next-prime (1+ ,var)))
(,ending-value-name ,end))
((> ,var ,ending-value-name))
,@body)))
и получить do-primes
, эквивалентный его предыдущей версии. Другими словами, with-gensyms
должен раскрываться в LET, которая связывает каждую перечисленную переменную, ending-value-name
в данном случае, со сгенерированным символом. Достаточно просто написать это с помощью простого шаблона-квазитирования.
(defmacro with-gensyms ((&rest names) &body body)
`(let ,(loop for n in names collect `(,n (gensym)))
,@body))
Обратите внимание, как мы можем использовать запятую для подстановки значения выражения LOOP. Этот цикл генерирует список связывающих форм, каждая из которых состоит из списка, содержащего одно из переданных with-gensyms
имен, а также литеральный код (gensym)
. Вы можете проверить, какой код сгенерирует выражение LOOP в REPL, заменив names
списком символов.
CL-USER> (loop for n in '(a b c) collect `(,n (gensym)))
((A (GENSYM)) (B (GENSYM)) (C (GENSYM)))
После списка связывающих форм в качестве тела LET вклеивается аргумент body
with-gensyms
. Таким образом, из кода, который вы оборачиваете в with-gensyms
, вы можете ссылаться на любое из имен переменных из списка переменных, переданного with-gensyms
.
Если вы воспользуетесь macro-expand для формы with-gensyms
в новом определении do-primes
, то вы получите подобное:
(let ((ending-value-name (gensym)))
`(do ((,var (next-prime ,start) (next-prime (1+ ,var)))
(,ending-value-name ,end))
((> ,var ,ending-value-name))
,@body))
Выглядит неплохо. Хотя этот макрос довольно прост, очень важно ясно понимать то, когда различные макросы раскрываются: когда вы компилируете DEFMACRO do-primes
, форма with-gensyms
раскрывается в код, который вы только что видели. Таким образом, скомпилированная версия do-primes
в точности такая же, как если бы вы написали внешний LET вручную. Когда вы компилируете функцию, которая использует do-primes
, то для генерации расширения do-primes
запускается код, сгенерированный with-gensyms
, но сам with-gensyms
при компиляции формы do-primes
не нужен, так как он уже был раскрыт при компиляции do-primes
.
Другой классический макрос, создающий макросы: ONCE-ONLY
Другим классическим макросом, создающим макросы, является once-only
, который используется для генерации кода, вычисляющего определенные аргументы макроса только единожды и в определенном порядке. Используя once-only
вы можете написать do-primes
почти таким же простым способом, как исходную «протекающую» версию, следующим образом:
(defmacro do-primes ((var start end) &body body)
(once-only (start end)
`(do ((,var (next-prime ,start) (next-prime (1+ ,var))))
((> ,var ,end))
,@body)))
Однако, реализация once-only
несколько запутанна для обычного пошагового объяснения, так как зависит от множества уровней квазицитирования и «раскавычивания». Если вы действительно хотите попрактиковаться в понимании макросов, вы можете попытаться разобраться, как он работает. Макрос выглядит следующим образом:
(defmacro once-only ((&rest names) &body body)
(let ((gensyms (loop for n in names collect (gensym))))
`(let (,@(loop for g in gensyms collect `(,g (gensym))))
`(let (,,@(loop for g in gensyms for n in names collect ``(,,g ,,n)))
,(let (,@(loop for n in names for g in gensyms collect `(,n ,g)))
,@body)))))
Не только простые макросы
Конечно я могу расказать о макросах намного больше. Все макросы, которые вы до сих пор видели, были довольно простыми примерами, избавляющими вас от небольшого количества работы по набору текста, но не предоставляющими радикально новых способов выражения мыслей. В последующих главах вы увидите примеры макросов, позволяющих вам выражать мысли способами, практически не возможными без макросов. И вы начнете прямо со следующей главы, в которой вы создадите простой, но эффективный фреймворк для модульного тестирования.
Почему при включенной надстройке think-cell медленно работает мой макрос Excel? :: think-cell
Распространенная проблема, из-за которой производительность макросов VBA снижается при использовании функции .Select
. При выборе ячейки каждая отдельная надстройка Excel (в том числе и think-cell) получает уведомление о новой выбранной ячейке, что значительно снижает скорость работы макроса. Особенно это заметно сказывается на макросах, созданных с помощью средства записи макросов.
Microsoft также рекомендует избегать применения функции .Select в коде VBA для повышения производительности.
Пример: Как уйти от использования инструкции
.Select
Рассмотрим следующий простой макрос AutoFillTable
:
Sub AutoFillTable()
Dim iRange As Excel.Range
Set iRange = Application.InputBox(prompt:="Enter range", Type:=8)
Dim nCount As Integer
nCount = iRange.Cells.Count
For i = 1 To nCount
Selection.Copy
If iRange.Cells.Item(i).Value = "" Then
iRange.Cells.Item(i).Range("A1").Select
ActiveSheet.Paste
Else
iRange.Cells.Item(i).Range("A1").Select
End If
Next
End Sub
Эта функция открывает поле ввода, в котором пользователь вводит диапазон ячеек. Функция проходит по всем ячейкам в диапазоне. При обнаружении заполненной ячейки, функция копирует содержимое ячейки в буфер обмена. Функция вставляет содержимое буфера обмена в каждую последующую пустую ячейку.
В AutoFillTable
для копирования содержимого ячейки применяется буфер обмена. Поэтому в функции необходимо выбирать каждую обрабатываемую ячейку, чтобы Excel знал откуда и куда копировать данные. Рекомендуемое решение приведено в следующей функции AutoFillTable2
:
Sub AutoFillTable2()
Dim iRange As Excel.Range
Set iRange = Application.InputBox(prompt:="Enter range", Type:=8)
Dim iCellMaster As Excel.Range
For Each iCell In iRange.Cells
If iCell.Value = "" Then
If Not iCellMaster Is Nothing Then
iCellMaster.Copy (iCell)
End If
Else
Set iCellMaster = iCell
End If
Next iCell
End Sub
В AutoFillTable2
есть два важных отличия от предыдущей реализации:
- Особенно обратите внимание на то, что в функции больше не проводится выбор ячейки. Вместо этого при обнаружении заполненной ячейки последняя сохраняется в переменной
iCellMaster
. После чего при обнаружении пустой ячейки все содержимоеiCellMaster
копируется вiCell
. - Для обхода каждой ячейки в диапазоне применяется цикл языка Visual Basic
For Each … Next
. Это также заметно повышает удобочитаемость кода.
Что такое макросы и почему я должен их считать?
Хотите больше вдохновляющих советов по здоровью, доставленных прямо в ваш почтовый ящик? Подписывайтесь на нашу новостную рассылку.
В мире похудания существует ТОННА диет. Некоторые работы. Некоторые нет. Вы можете считать калории. Или очки. Или углеводы. Или вы можете отслеживать один из самых счетных элементов: макросы. Макросы или «гибкая диета» сейчас в моде, но является ли это проверенным методом здорового образа жизни? Вот что такое подсчет макросов:
Что такое макрос?
Прежде всего, очень важно знать, что вы считаете, верно? Ну, «макро» — это сокращение от «макроэлементы».Что такое макроэлемент? Это три категории питательных веществ, которые вы едите больше всего и обеспечивают вас большей частью энергии: белки, углеводы и жиры. Итак, когда вы считаете свои макросы, вы считаете граммы белков, углеводов или жиров, которые вы потребляете.
Почему люди считают макросы?
Отслеживание макросов может помочь вам сделать (или спланировать) разумный выбор здоровой пищи. Это похоже на подсчет калорий или очков, но это еще один шаг вперед в идеологии.
Так калории не имеют значения?
Извините, но нет. Калории ДЕЙСТВИТЕЛЬНО имеют значение. Проще говоря, потеря веса происходит, когда вы сжигаете больше калорий, чем потребляете. Макросчет помогает понять, откуда берутся эти калории и как они влияют на ваше тело. Это также поможет вам понять, что не все калории одинаковы.
Например, допустим, у вас есть цель — 2000 калорий в день. Один грамм белка — это 4 калории. Итак, если вы съедите 125 г белка, вы потребляете 500 калорий из белка, а 1500 калорий нужно разделить между жирами и углеводами.
«Мне нравится, что люди могут больше сосредотачиваться на составе своей еды, поэтому они будут уделять больше внимания тому, как они подпитывают свое тело и как его реагирует, что действительно полезно», — говорит Клэр Брейлер, Зарегистрированный диетолог в Монтане. «Это также может помочь людям достичь своих целей в фитнесе, потому что они будут чувствовать большее чувство сытости, когда сосредоточатся на получении достаточного количества белка и будут уделять больше внимания потребляемым углеводам, а не только только к калориям.”
Похоже, много работы, но стоит ли это того?
Что ж, решать вам. Подсчет макросов — это здорово, потому что это , а не — универсальный план. Это обычно называют «гибкой диетой», поскольку вы едите настоящую пищу, не причиняя вреда своему организму. Люди, считающие свои макросы, могут использовать аббревиатуру «IIFYM» или «Если он подходит для ваших макросов», что означает, что вы можете есть его, пока он вписывается в ваши макросы. А теперь стоит ли обмануть систему, чтобы можно было съесть кучу печенья и ничего больше? Нет.Но можно ли время от времени есть печенье и при этом добиваться успеха? Да! Технически, когда вы считаете макросы, не бывает «читерских» продуктов, это просто означает, что вам нужно перемещать некоторые макросы, чтобы они подходили.
Счетные макросы могут вам помочь:
- Поддержание сухой мышечной массы
Но тот факт, что вы считаете макросы, не означает, что вы едите правильно, и это один из недостатков метода гибкой диеты, который эксперты видят. Технически вы можете достичь своих макро-целей, даже не употребляя ни одного овоща.Из-за этого вам нужно сосредоточиться на том, ЧТО вы едите, а не только на цифрах. Как говорит Брейлер, вам все равно нужно «есть радугу».
«Хорошее питание — это гораздо больше, чем просто макроэлементы», — говорит Коул Адам, диетолог из Денвера. «В этой диете ничего не говорится о витаминах, минералах, фитохимических веществах, антиоксидантах и других питательных веществах, которые часто не указаны на этикетке продуктов питания, но играют важную роль в поддержании здоровья».
Некоторые эксперты по питанию также жалуются, что макроплан упрощает ситуацию и не учитывает поведенческие или эмоциональные аспекты переедания.Другие утверждают, что такое упрощение — это хорошо. Вы когда-нибудь читали этикетку с питанием? Там так много всего, что бывает трудно понять, на что обратить внимание. Калорий? Витамины? Насыщенный жир? Сосредоточение внимания на макроэлементах — хорошее начало, потому что каждая пища, которую мы едим, состоит из определенного соотношения белков, углеводов и жиров. И эти строительные блоки буквально подпитывают нашу жизнь!
Хорошо, сколько макросов мне съесть?
Не существует стандартного количества макросов, которое должен съесть человек.Он отличается от человека к человеку и зависит от вашего роста, веса, уровня активности, возраста и ваших личных целей.
Первый шаг — определить суточное количество калорий. В Национальном институте здоровья есть очень крутой калькулятор, который поможет вам в этом разобраться.
А теперь пора заняться макро-математикой. Национальные академии наук, инженерии и медицины рекомендуют взрослым стараться получать 10-35 процентов калорий из белков, 45-65 процентов из углеводов и 20-35 процентов из жиров.Вы можете найти в Интернете калькуляторы для подсчета макросов (например, этот), которые помогут вам определить свои магические числа, но лучше всего работать с зарегистрированным диетологом, который может использовать свой опыт, чтобы помочь вам в этом процессе. Брейлер советует использовать рекомендации из авторитетного медицинского источника, потому что некоторые веб-сайты, особенно те, которые обещают превратить вас в следующего мистера или мисс Олимпию, рекомендуют нездоровые пропорции, такие как 60 процентов белка или 40 процентов жира.
Даже после того, как вы получите свои начальные цифры, вам, вероятно, придется немного повозиться, чтобы найти соотношения, которые лучше всего подходят для вашего тела.А если вы добьетесь успеха и похудеете, вам придется и дальше корректировать макросы в зависимости от веса вашего тела.
Как мне все отслеживать?
Процесс отслеживания может показаться немного сложным, но такие приложения, как MyFitnessPal, позволяют легко устанавливать ежедневные цели и отслеживать потребление макросов в течение дня. Большинство людей, которые успешно считают макросы частью своего распорядка дня, скажут вам: «Неудача в плане — это план провала», и порекомендуют планирование еды и приготовление пищи, чтобы помочь вам не сбиться с курса.
Если отслеживание кажется слишком громоздким (мы его понимаем, как будто вам нужно ДРУГОЕ дело каждый день), попробуйте просто отслеживать свои макросы в течение недели. Это может помочь вам определить места, где вы могли бы оптимизировать свой рацион. Многие люди обнаруживают, что мало потребляют протеин и могут попытаться съесть мясо (или бобы для вегетарианцев). Овощи также часто не хватает на тарелке, но простой смузи может помочь вам получить зелень.
Готовы начать?
Хотя мы много внимания уделяли подсчету макросов и его преимуществам для похудения, это также хороший способ прибавить несколько фунтов, если вы хотите набрать массу (да…. мы тоже ненавидим этих людей). Перед тем, как начать новую диету, вы всегда должны проконсультироваться с врачом, чтобы убедиться, что это безопасно и полезно для здоровья. Также помните, что, хотя питание является ключом к потере веса и здоровому образу жизни, упражнения также являются важным компонентом уравнения. Устанавливая цели по снижению веса, помните, что потеря 1-2 фунта в неделю — это в среднем здоровый показатель, а главное — постоянство!
Как считать макросы: пошаговое руководство
Если вы работаете в спортзале или настроены на медицинское сообщество, скорее всего, вы слышали термин «подсчет макросов».”
Часто используется людьми, которые хотят сбросить вес или набрать мышечную массу, подсчет макроэлементов (макросов) может помочь вам достичь различных целей в отношении здоровья.
Это влечет за собой отслеживание калорий и типов продуктов, которые вы едите, для достижения определенных целей в отношении макроэлементов и калорий.
Хотя подсчет макросов относительно прост, это может сбить с толку, если вы только начинаете.
В этой статье объясняются преимущества подсчета макросов и дается пошаговое руководство по началу работы.
Чтобы успешно подсчитывать макроэлементы, важно знать, что они из себя представляют и почему некоторым людям нужны другие соотношения макроэлементов, чем другим.
Углеводы
Углеводы включают сахара, крахмалы и волокна (1).
Большинство видов углеводов расщепляются на глюкозу или сахар в крови, который ваше тело либо использует для получения энергии, либо хранит в виде гликогена — формы хранения глюкозы — в печени и мышцах.
Углеводы обеспечивают 4 калории на грамм и обычно составляют большую часть потребляемой человеком калорийности.
Потребление углеводов — одна из наиболее обсуждаемых рекомендаций по макроэлементам, но основные организации здравоохранения предлагают потреблять 45–65% дневных калорий из углеводов (2).
Углеводы содержатся в таких продуктах, как зерна, крахмалистые овощи, бобы, молочные продукты и фрукты.
Жиры
Жиры содержат больше всего калорий из всех макроэлементов, обеспечивая 9 калорий на грамм.
Вашему телу нужен жир для получения энергии и важных функций, таких как выработка гормонов, усвоение питательных веществ и поддержание температуры тела (3).
Хотя типичные рекомендации по макронутриентам для жиров колеблются в пределах 20–35% от общего количества калорий, многие люди добиваются успеха после диеты с высоким содержанием жиров.
Жиры содержатся в таких продуктах, как масла, сливочное масло, авокадо, орехи, мясо и жирная рыба.
Белки
Как и углеводы, белки содержат 4 калории на грамм.
Белки жизненно важны для таких процессов, как передача сигналов клеток, иммунная функция и построение тканей, гормонов и ферментов.
Рекомендуется, чтобы белки составляли 10–35% от общего количества потребляемых калорий (4).
Однако рекомендации по белку различаются в зависимости от желаемого состава тела, возраста, состояния здоровья и других факторов.
Примеры продуктов, богатых белком, включают яйца, птицу, рыбу, тофу и чечевицу.
Резюме
Три макроэлемента, за которыми необходимо следить, — это углеводы, жиры и белки. Рекомендации по макроэлементам различаются в зависимости от многих факторов.
Чтобы научиться считать макроэлементы, нужно приложить определенные усилия, но это метод, которым может воспользоваться каждый.
Следующие шаги помогут вам начать работу.
1. Вычислите ваши потребности в калориях
Чтобы рассчитать ваши общие потребности в калориях, вам необходимо определить расход энергии в состоянии покоя (REE) и расход энергии без отдыха (NREE).
REE означает количество калорий, сжигаемых человеком в состоянии покоя, в то время как NREE указывает количество калорий, сжигаемых во время активности и пищеварения (5).
Добавление REE и NREE дает вам общее количество калорий, сожженных за день, также известное как общий дневной расход энергии (TDEE) (6).
Чтобы определить вашу общую потребность в калориях, вы можете использовать простой онлайн-калькулятор или Mifflin-St. Уравнение Джеора:
- Мужчины: калорий / день = 10 x вес (кг) + 6,25 x рост (см) — 5 x возраст (y) + 5
- Женщины: калорий / день = 10 x вес ( кг) + 6,25 x рост (см) — 5 x возраст (y) — 161
Затем умножьте результат на коэффициент активности — число, которое представляет различные уровни активности (7):
- Сидячий образ жизни: х 1.2 (ограниченные упражнения)
- Легкоактивный: x 1,375 (легкие упражнения менее трех дней в неделю)
- Умеренно активный: x 1,55 (умеренные упражнения большую часть дней недели)
- Очень активный: x 1,725 (тяжелые упражнения каждый день)
- сверхактивные: x 1,9 (интенсивные упражнения два или более раз в день)
Конечный результат дает вам ваш TDEE.
Калории можно добавлять или вычитать из общих расходов для достижения различных целей.
Другими словами, те, кто пытается похудеть, должны потреблять меньше калорий, чем расходуют, в то время как те, кто хочет набрать мышечную массу, должны увеличивать количество калорий.
2. Определите свой идеальный состав макроэлементов
После определения количества калорий, которое нужно потреблять каждый день, следующим шагом будет решить, какое соотношение макронутриентов лучше всего подходит для вас.
Типичные рекомендации по макроэлементам следующие (8):
- Углеводы: 45–65% от общего количества калорий
- Жиры: 20–35% от общего количества калорий
- Белки: 10–35% калорий общее количество калорий
Имейте в виду, что эти рекомендации могут не соответствовать вашим конкретным потребностям.
Ваше соотношение можно настроить для достижения конкретных целей.
Например, человек, который хочет добиться лучшего контроля уровня сахара в крови и избавиться от лишнего жира, может преуспеть в плане питания, состоящем из 35% углеводов, 30% жира и 35% белка.
Кто-то, соблюдающий кетогенную диету, может нуждаться в гораздо большем количестве жиров и меньшем количестве углеводов, в то время как атлету на выносливость может потребоваться более высокое потребление углеводов.
Как видите, соотношение макроэлементов может варьироваться в зависимости от диетических предпочтений, целей по снижению веса и других факторов.
3. Отслеживайте свои макросы и потребление калорий
Теперь пора начать отслеживать свои макросы.
Термин «макрос отслеживания» означает просто запись продуктов, которые вы едите, на веб-сайте, в приложении или журнале питания.
Самый удобный способ отслеживать макросы — через такое приложение, как MyFitnessPal, Lose It! или Мои макросы +.
Эти приложения удобны для пользователя и специально разработаны для упрощения отслеживания макросов.
Кроме того, цифровые весы могут помочь вам отслеживать макросы, хотя в этом нет необходимости.Если вы инвестируете в один, взвесьте каждый съеденный продукт, прежде чем регистрировать его в своем приложении.
В некоторых приложениях есть сканер штрих-кода, который автоматически вводит порцию отсканированной еды в ваш журнал макросов.
Вы также можете вручную записывать макросы в физический журнал. Метод зависит от ваших индивидуальных предпочтений.
Имейте в виду, что нет необходимости точно поражать цели макроса. Вы по-прежнему можете достичь своих целей, даже если будете на несколько граммов больше или меньше каждый день.
4. Пример подсчета
Вот пример того, как рассчитать макронутриенты для диеты на 2000 калорий, состоящей из 40% углеводов, 30% белка и 30% жира.
Углеводы:
- 4 калории на грамм
- 40% от 2000 калорий = 800 калорий углеводов в день
- Всего разрешенных углеводов в день = 800/4 = 200 граммов
Белки:
- 4 калории на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов белка в день = 600/4 = 150 граммов
Жиры:
- 9 калорий на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов жира в день = 600/9 = 67 грамм
В этом сценарии ваше идеальное ежедневное потребление было бы 200 граммов углеводов, 150 граммы белка и 67 граммов жиров.
Сводка
Чтобы подсчитать макросы, определите свои потребности в калориях и макроэлементах, а затем запишите макросы в приложение или журнал питания.
Подсчет макронутриентов может дать несколько преимуществ.
Может улучшить качество диеты
Макросы подсчета могут сосредоточить ваше внимание на качестве пищи, а не на ее содержании калорий.
Например, миска сладких хлопьев может иметь такое же количество калорий, как миска овса с ягодами и тыквенными семечками, но эти блюда сильно различаются по содержанию макроэлементов.
Подсчет макросов может побудить вас выбрать более здоровую и богатую питательными веществами пищу, чтобы соответствовать установленным диапазонам макроэлементов.
Однако нездоровая пища может по-прежнему соответствовать вашим макросам и калориям, поэтому важно сделать здоровое питание приоритетом.
Может способствовать снижению веса
Макросы подсчета могут быть особенно эффективными для похудания, поскольку они содержат конкретные диетические рекомендации.
Например, отслеживающие макросы могут помочь тем, кто придерживается диеты с высоким содержанием белка и низким содержанием углеводов, что связано с потерей веса (9).
Кроме того, исследования показывают, что отслеживание приема пищи может помочь в долгосрочном поддержании веса (10).
Может помочь в достижении конкретных целей
Подсчет макронутриентов популярен среди спортсменов и тех, кто преследует определенные цели в отношении здоровья, помимо снижения веса.
Любой, кто хочет нарастить мышечную массу, может иметь большую потребность в белке, чем люди, просто желающие избавиться от лишнего жира.
Подсчет макросов необходим для людей, которым необходимо потреблять определенное количество макроэлементов, чтобы повысить производительность и набрать мышечную массу.
Например, исследования показывают, что спортсменам, тренирующимся с отягощениями, может потребоваться до 1,4 грамма белка на фунт (3,1 грамма на кг) веса тела в день для поддержания мышечной массы (11).
Макросы подсчета могут гарантировать, что ваши потребности в макроэлементах будут удовлетворены.
Резюме
Подсчет макронутриентов — отличный инструмент для тех, кто хочет похудеть или нарастить мышечную массу. Это может способствовать более здоровому питанию и улучшению качества диеты.
В зависимости от диапазона макроэлементов, тем, кто считает макросы, может потребоваться добавить или уменьшить количество продуктов, богатых углеводами, жирами или белками.
Например, человеку, переходящему на диапазон макроэлементов, состоящий из 40% углеводов, 35% жира и 25% белка, может потребоваться заменить некоторые из своих углеводов источниками полезных жиров и белков.
Ниже приведены примеры здоровой пищи для каждого макроэлемента.
Некоторые продукты содержат более одного макроэлемента и могут удовлетворить различные потребности в макроэлементах.
Углеводы
- Зерновые, включая овес, коричневый рис и киноа
- Цельнозерновые макароны
- Цельнозерновой хлеб
- Крахмалистые овощи, такие как картофель, сладкий картофель и озимая тыква
- Фрукты, такие как ягоды, бананы, ананасы и яблоки
- Фасоль, чечевица и горох
- Молоко и йогурт
Белки
Жиры
- Яичные желтки
- Оливковое масло и масло авокадо
- Масло
- Орехи и ореховое масло
- Кокосовое масло и кокосовая стружка
- Авокадо
- Полножирное молоко и йогурт
- Полножирный сыр
- Семена льна и семена чиа
- Жирная рыба, такая как лосось и сардины
Резюме
Пытаясь достичь определенных целей в отношении макроэлементов, сосредоточьтесь на продуктах с высоким содержанием макроэлементы, которые вам нужно потреблять больше всего.
Люди, которым важна структура, могут обнаружить, что подсчет макросов идеально подходит для достижения целей в области здоровья.
Макросы подсчета могут повысить вашу осведомленность о качестве и количестве потребляемой пищи.
Плюс, это может быть хорошим подспорьем для тех, кто соблюдает кетогенную диету или диету с высоким содержанием белка.
Тем не менее, подсчет макросов подходит не всем.
Поскольку при подсчете макросов большое внимание уделяется отслеживанию калорий и регистрации потребления, всем, у кого в анамнезе есть расстройства пищевого поведения, следует избегать подсчета макросов (12).
Сосредоточение внимания на приеме пищи может даже привести к нарушению режима питания у людей, не имевших в анамнезе такого поведения (13).
Имейте в виду, что при подсчете макроэлементов также можно недоедать, потому что это позволяет принимать все продукты, если они соответствуют установленным диапазонам макроэлементов.
Те, кто использует подсчет макросов, должны стремиться — в зависимости от своих целей — придерживаться диеты из цельных продуктов, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Резюме
Макросы подсчета могут помочь людям похудеть и достичь целей в отношении здоровья. Однако это не подходит для людей, страдающих расстройствами пищевого поведения.
При первом подсчете макросов легко почувствовать себя ошеломленным.
Однако выполнение описанных выше шагов может упростить процесс и настроить вас на успех.
Наиболее важные шаги при подсчете макросов — это установка целевого количества калорий и диапазона макроэлементов для углеводов, белков и жиров, который лучше всего подходит для вас.
Затем зарегистрируйте потребление пищи и постарайтесь не выходить за рамки своих макросов, придерживаясь диеты, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Прежде чем вы это узнаете, подсчет макросов покажется вам естественным.
Как считать макросы: пошаговое руководство
Если вы работаете в спортзале или настроены на медицинское сообщество, скорее всего, вы слышали термин «подсчет макросов».
Часто используется людьми, которые хотят сбросить вес или набрать мышечную массу, подсчет макроэлементов (макросов) может помочь вам достичь различных целей в отношении здоровья.
Это влечет за собой отслеживание калорий и типов продуктов, которые вы едите, для достижения определенных целей в отношении макроэлементов и калорий.
Хотя подсчет макросов относительно прост, это может сбить с толку, если вы только начинаете.
В этой статье объясняются преимущества подсчета макросов и дается пошаговое руководство по началу работы.
Чтобы успешно подсчитывать макроэлементы, важно знать, что они из себя представляют и почему некоторым людям нужны другие соотношения макроэлементов, чем другим.
Углеводы
Углеводы включают сахара, крахмалы и волокна (1).
Большинство видов углеводов расщепляются на глюкозу или сахар в крови, который ваше тело либо использует для получения энергии, либо хранит в виде гликогена — формы хранения глюкозы — в печени и мышцах.
Углеводы обеспечивают 4 калории на грамм и обычно составляют большую часть потребляемой человеком калорийности.
Потребление углеводов — одна из наиболее обсуждаемых рекомендаций по макроэлементам, но основные организации здравоохранения предлагают потреблять 45–65% дневных калорий из углеводов (2).
Углеводы содержатся в таких продуктах, как зерна, крахмалистые овощи, бобы, молочные продукты и фрукты.
Жиры
Жиры содержат больше всего калорий из всех макроэлементов, обеспечивая 9 калорий на грамм.
Вашему телу нужен жир для получения энергии и важных функций, таких как выработка гормонов, усвоение питательных веществ и поддержание температуры тела (3).
Хотя типичные рекомендации по макронутриентам для жиров колеблются в пределах 20–35% от общего количества калорий, многие люди добиваются успеха после диеты с высоким содержанием жиров.
Жиры содержатся в таких продуктах, как масла, сливочное масло, авокадо, орехи, мясо и жирная рыба.
Белки
Как и углеводы, белки содержат 4 калории на грамм.
Белки жизненно важны для таких процессов, как передача сигналов клеток, иммунная функция и построение тканей, гормонов и ферментов.
Рекомендуется, чтобы белки составляли 10–35% от общего количества потребляемых калорий (4).
Однако рекомендации по белку различаются в зависимости от желаемого состава тела, возраста, состояния здоровья и других факторов.
Примеры продуктов, богатых белком, включают яйца, птицу, рыбу, тофу и чечевицу.
Резюме
Три макроэлемента, за которыми необходимо следить, — это углеводы, жиры и белки. Рекомендации по макроэлементам различаются в зависимости от многих факторов.
Чтобы научиться считать макроэлементы, нужно приложить определенные усилия, но это метод, которым может воспользоваться каждый.
Следующие шаги помогут вам начать работу.
1. Вычислите ваши потребности в калориях
Чтобы рассчитать ваши общие потребности в калориях, вам необходимо определить расход энергии в состоянии покоя (REE) и расход энергии без отдыха (NREE).
REE означает количество калорий, сжигаемых человеком в состоянии покоя, в то время как NREE указывает количество калорий, сжигаемых во время активности и пищеварения (5).
Добавление REE и NREE дает вам общее количество калорий, сожженных за день, также известное как общий дневной расход энергии (TDEE) (6).
Чтобы определить вашу общую потребность в калориях, вы можете использовать простой онлайн-калькулятор или Mifflin-St. Уравнение Джеора:
- Мужчины: калорий в день = 10 x вес (кг) + 6.25 x рост (см) — 5 x возраст (y) + 5
- Женщины: калорий в день = 10 x вес (кг) + 6,25 x рост (см) — 5 x возраст (y) — 161
Затем умножьте свой результат на коэффициент активности — число, которое представляет разные уровни активности (7):
- Сидячий образ жизни: x 1,2 (ограниченные упражнения)
- Легко активный: x 1,375 (легкие упражнения менее трех дней в неделю)
- Умеренно активный: x 1,55 (умеренные упражнения в большинство дней недели)
- Очень активный: x 1.725 (тяжелые упражнения каждый день)
- Сверхактивный: x 1,9 (интенсивные упражнения два или более раз в день)
Конечный результат дает вам ваш TDEE.
Калории можно добавлять или вычитать из общих расходов для достижения различных целей.
Другими словами, те, кто пытается похудеть, должны потреблять меньше калорий, чем расходуют, в то время как те, кто хочет набрать мышечную массу, должны увеличивать количество калорий.
2. Определите свой идеальный состав макроэлементов
После определения количества калорий, которое нужно потреблять каждый день, следующим шагом будет решить, какое соотношение макронутриентов лучше всего подходит для вас.
Типичные рекомендации по макроэлементам следующие (8):
- Углеводы: 45–65% от общего количества калорий
- Жиры: 20–35% от общего количества калорий
- Белки: 10–35% калорий общее количество калорий
Имейте в виду, что эти рекомендации могут не соответствовать вашим конкретным потребностям.
Ваше соотношение можно настроить для достижения конкретных целей.
Например, человек, который хочет добиться лучшего контроля уровня сахара в крови и избавиться от лишнего жира, может преуспеть в плане питания, состоящем из 35% углеводов, 30% жира и 35% белка.
Кто-то, соблюдающий кетогенную диету, может нуждаться в гораздо большем количестве жиров и меньшем количестве углеводов, в то время как атлету на выносливость может потребоваться более высокое потребление углеводов.
Как видите, соотношение макроэлементов может варьироваться в зависимости от диетических предпочтений, целей по снижению веса и других факторов.
3. Отслеживайте свои макросы и потребление калорий
Теперь пора начать отслеживать свои макросы.
Термин «макрос отслеживания» означает просто запись продуктов, которые вы едите, на веб-сайте, в приложении или журнале питания.
Самый удобный способ отслеживать макросы — через такое приложение, как MyFitnessPal, Lose It! или Мои макросы +.
Эти приложения удобны для пользователя и специально разработаны для упрощения отслеживания макросов.
Кроме того, цифровые весы могут помочь вам отслеживать макросы, хотя в этом нет необходимости. Если вы инвестируете в один, взвесьте каждый съеденный продукт, прежде чем регистрировать его в своем приложении.
В некоторых приложениях есть сканер штрих-кода, который автоматически вводит порцию отсканированной еды в ваш журнал макросов.
Вы также можете вручную записывать макросы в физический журнал. Метод зависит от ваших индивидуальных предпочтений.
Имейте в виду, что нет необходимости точно поражать цели макроса. Вы по-прежнему можете достичь своих целей, даже если будете на несколько граммов больше или меньше каждый день.
4. Пример подсчета
Вот пример того, как рассчитать макронутриенты для диеты на 2000 калорий, состоящей из 40% углеводов, 30% белка и 30% жира.
Углеводы:
- 4 калории на грамм
- 40% от 2000 калорий = 800 калорий углеводов в день
- Всего разрешенных углеводов в день = 800/4 = 200 граммов
Белки:
- 4 калории на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов белка в день = 600/4 = 150 граммов
Жиры:
- 9 калорий на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов жира в день = 600/9 = 67 грамм
В этом сценарии ваше идеальное ежедневное потребление было бы 200 граммов углеводов, 150 граммы белка и 67 граммов жиров.
Сводка
Чтобы подсчитать макросы, определите свои потребности в калориях и макроэлементах, а затем запишите макросы в приложение или журнал питания.
Подсчет макронутриентов может дать несколько преимуществ.
Может улучшить качество диеты
Макросы подсчета могут сосредоточить ваше внимание на качестве пищи, а не на ее содержании калорий.
Например, миска сладких хлопьев может иметь такое же количество калорий, как миска овса с ягодами и тыквенными семечками, но эти блюда сильно различаются по содержанию макроэлементов.
Подсчет макросов может побудить вас выбрать более здоровую и богатую питательными веществами пищу, чтобы соответствовать установленным диапазонам макроэлементов.
Однако нездоровая пища может по-прежнему соответствовать вашим макросам и калориям, поэтому важно сделать здоровое питание приоритетом.
Может способствовать снижению веса
Макросы подсчета могут быть особенно эффективными для похудания, поскольку они содержат конкретные диетические рекомендации.
Например, отслеживающие макросы могут помочь тем, кто придерживается диеты с высоким содержанием белка и низким содержанием углеводов, что связано с потерей веса (9).
Кроме того, исследования показывают, что отслеживание приема пищи может помочь в долгосрочном поддержании веса (10).
Может помочь в достижении конкретных целей
Подсчет макронутриентов популярен среди спортсменов и тех, кто преследует определенные цели в отношении здоровья, помимо снижения веса.
Любой, кто хочет нарастить мышечную массу, может иметь большую потребность в белке, чем люди, просто желающие избавиться от лишнего жира.
Подсчет макросов необходим для людей, которым необходимо потреблять определенное количество макроэлементов, чтобы повысить производительность и набрать мышечную массу.
Например, исследования показывают, что спортсменам, тренирующимся с отягощениями, может потребоваться до 1,4 грамма белка на фунт (3,1 грамма на кг) веса тела в день для поддержания мышечной массы (11).
Макросы подсчета могут гарантировать, что ваши потребности в макроэлементах будут удовлетворены.
Резюме
Подсчет макронутриентов — отличный инструмент для тех, кто хочет похудеть или нарастить мышечную массу. Это может способствовать более здоровому питанию и улучшению качества диеты.
В зависимости от диапазона макроэлементов, тем, кто считает макросы, может потребоваться добавить или уменьшить количество продуктов, богатых углеводами, жирами или белками.
Например, человеку, переходящему на диапазон макроэлементов, состоящий из 40% углеводов, 35% жира и 25% белка, может потребоваться заменить некоторые из своих углеводов источниками полезных жиров и белков.
Ниже приведены примеры здоровой пищи для каждого макроэлемента.
Некоторые продукты содержат более одного макроэлемента и могут удовлетворить различные потребности в макроэлементах.
Углеводы
- Зерновые, включая овес, коричневый рис и киноа
- Цельнозерновые макароны
- Цельнозерновой хлеб
- Крахмалистые овощи, такие как картофель, сладкий картофель и озимая тыква
- Фрукты, такие как ягоды, бананы, ананасы и яблоки
- Фасоль, чечевица и горох
- Молоко и йогурт
Белки
Жиры
- Яичные желтки
- Оливковое масло и масло авокадо
- Масло
- Орехи и ореховое масло
- Кокосовое масло и кокосовая стружка
- Авокадо
- Полножирное молоко и йогурт
- Полножирный сыр
- Семена льна и семена чиа
- Жирная рыба, такая как лосось и сардины
Резюме
Пытаясь достичь определенных целей в отношении макроэлементов, сосредоточьтесь на продуктах с высоким содержанием макроэлементы, которые вам нужно потреблять больше всего.
Люди, которым важна структура, могут обнаружить, что подсчет макросов идеально подходит для достижения целей в области здоровья.
Макросы подсчета могут повысить вашу осведомленность о качестве и количестве потребляемой пищи.
Плюс, это может быть хорошим подспорьем для тех, кто соблюдает кетогенную диету или диету с высоким содержанием белка.
Тем не менее, подсчет макросов подходит не всем.
Поскольку при подсчете макросов большое внимание уделяется отслеживанию калорий и регистрации потребления, всем, у кого в анамнезе есть расстройства пищевого поведения, следует избегать подсчета макросов (12).
Сосредоточение внимания на приеме пищи может даже привести к нарушению режима питания у людей, не имевших в анамнезе такого поведения (13).
Имейте в виду, что при подсчете макроэлементов также можно недоедать, потому что это позволяет принимать все продукты, если они соответствуют установленным диапазонам макроэлементов.
Те, кто использует подсчет макросов, должны стремиться — в зависимости от своих целей — придерживаться диеты из цельных продуктов, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Резюме
Макросы подсчета могут помочь людям похудеть и достичь целей в отношении здоровья. Однако это не подходит для людей, страдающих расстройствами пищевого поведения.
При первом подсчете макросов легко почувствовать себя ошеломленным.
Однако выполнение описанных выше шагов может упростить процесс и настроить вас на успех.
Наиболее важные шаги при подсчете макросов — это установка целевого количества калорий и диапазона макроэлементов для углеводов, белков и жиров, который лучше всего подходит для вас.
Затем зарегистрируйте потребление пищи и постарайтесь не выходить за рамки своих макросов, придерживаясь диеты, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Прежде чем вы это узнаете, подсчет макросов покажется вам естественным.
Как считать макросы: пошаговое руководство
Если вы работаете в спортзале или настроены на медицинское сообщество, скорее всего, вы слышали термин «подсчет макросов».
Часто используется людьми, которые хотят сбросить вес или набрать мышечную массу, подсчет макроэлементов (макросов) может помочь вам достичь различных целей в отношении здоровья.
Это влечет за собой отслеживание калорий и типов продуктов, которые вы едите, для достижения определенных целей в отношении макроэлементов и калорий.
Хотя подсчет макросов относительно прост, это может сбить с толку, если вы только начинаете.
В этой статье объясняются преимущества подсчета макросов и дается пошаговое руководство по началу работы.
Чтобы успешно подсчитывать макроэлементы, важно знать, что они из себя представляют и почему некоторым людям нужны другие соотношения макроэлементов, чем другим.
Углеводы
Углеводы включают сахара, крахмалы и волокна (1).
Большинство видов углеводов расщепляются на глюкозу или сахар в крови, который ваше тело либо использует для получения энергии, либо хранит в виде гликогена — формы хранения глюкозы — в печени и мышцах.
Углеводы обеспечивают 4 калории на грамм и обычно составляют большую часть потребляемой человеком калорийности.
Потребление углеводов — одна из наиболее обсуждаемых рекомендаций по макроэлементам, но основные организации здравоохранения предлагают потреблять 45–65% дневных калорий из углеводов (2).
Углеводы содержатся в таких продуктах, как зерна, крахмалистые овощи, бобы, молочные продукты и фрукты.
Жиры
Жиры содержат больше всего калорий из всех макроэлементов, обеспечивая 9 калорий на грамм.
Вашему телу нужен жир для получения энергии и важных функций, таких как выработка гормонов, усвоение питательных веществ и поддержание температуры тела (3).
Хотя типичные рекомендации по макронутриентам для жиров колеблются в пределах 20–35% от общего количества калорий, многие люди добиваются успеха после диеты с высоким содержанием жиров.
Жиры содержатся в таких продуктах, как масла, сливочное масло, авокадо, орехи, мясо и жирная рыба.
Белки
Как и углеводы, белки содержат 4 калории на грамм.
Белки жизненно важны для таких процессов, как передача сигналов клеток, иммунная функция и построение тканей, гормонов и ферментов.
Рекомендуется, чтобы белки составляли 10–35% от общего количества потребляемых калорий (4).
Однако рекомендации по белку различаются в зависимости от желаемого состава тела, возраста, состояния здоровья и других факторов.
Примеры продуктов, богатых белком, включают яйца, птицу, рыбу, тофу и чечевицу.
Резюме
Три макроэлемента, за которыми необходимо следить, — это углеводы, жиры и белки. Рекомендации по макроэлементам различаются в зависимости от многих факторов.
Чтобы научиться считать макроэлементы, нужно приложить определенные усилия, но это метод, которым может воспользоваться каждый.
Следующие шаги помогут вам начать работу.
1. Вычислите ваши потребности в калориях
Чтобы рассчитать ваши общие потребности в калориях, вам необходимо определить расход энергии в состоянии покоя (REE) и расход энергии без отдыха (NREE).
REE означает количество калорий, сжигаемых человеком в состоянии покоя, в то время как NREE указывает количество калорий, сжигаемых во время активности и пищеварения (5).
Добавление REE и NREE дает вам общее количество калорий, сожженных за день, также известное как общий дневной расход энергии (TDEE) (6).
Чтобы определить вашу общую потребность в калориях, вы можете использовать простой онлайн-калькулятор или Mifflin-St. Уравнение Джеора:
- Мужчины: калорий в день = 10 x вес (кг) + 6.25 x рост (см) — 5 x возраст (y) + 5
- Женщины: калорий в день = 10 x вес (кг) + 6,25 x рост (см) — 5 x возраст (y) — 161
Затем умножьте свой результат на коэффициент активности — число, которое представляет разные уровни активности (7):
- Сидячий образ жизни: x 1,2 (ограниченные упражнения)
- Легко активный: x 1,375 (легкие упражнения менее трех дней в неделю)
- Умеренно активный: x 1,55 (умеренные упражнения в большинство дней недели)
- Очень активный: x 1.725 (тяжелые упражнения каждый день)
- Сверхактивный: x 1,9 (интенсивные упражнения два или более раз в день)
Конечный результат дает вам ваш TDEE.
Калории можно добавлять или вычитать из общих расходов для достижения различных целей.
Другими словами, те, кто пытается похудеть, должны потреблять меньше калорий, чем расходуют, в то время как те, кто хочет набрать мышечную массу, должны увеличивать количество калорий.
2. Определите свой идеальный состав макроэлементов
После определения количества калорий, которое нужно потреблять каждый день, следующим шагом будет решить, какое соотношение макронутриентов лучше всего подходит для вас.
Типичные рекомендации по макроэлементам следующие (8):
- Углеводы: 45–65% от общего количества калорий
- Жиры: 20–35% от общего количества калорий
- Белки: 10–35% калорий общее количество калорий
Имейте в виду, что эти рекомендации могут не соответствовать вашим конкретным потребностям.
Ваше соотношение можно настроить для достижения конкретных целей.
Например, человек, который хочет добиться лучшего контроля уровня сахара в крови и избавиться от лишнего жира, может преуспеть в плане питания, состоящем из 35% углеводов, 30% жира и 35% белка.
Кто-то, соблюдающий кетогенную диету, может нуждаться в гораздо большем количестве жиров и меньшем количестве углеводов, в то время как атлету на выносливость может потребоваться более высокое потребление углеводов.
Как видите, соотношение макроэлементов может варьироваться в зависимости от диетических предпочтений, целей по снижению веса и других факторов.
3. Отслеживайте свои макросы и потребление калорий
Теперь пора начать отслеживать свои макросы.
Термин «макрос отслеживания» означает просто запись продуктов, которые вы едите, на веб-сайте, в приложении или журнале питания.
Самый удобный способ отслеживать макросы — через такое приложение, как MyFitnessPal, Lose It! или Мои макросы +.
Эти приложения удобны для пользователя и специально разработаны для упрощения отслеживания макросов.
Кроме того, цифровые весы могут помочь вам отслеживать макросы, хотя в этом нет необходимости. Если вы инвестируете в один, взвесьте каждый съеденный продукт, прежде чем регистрировать его в своем приложении.
В некоторых приложениях есть сканер штрих-кода, который автоматически вводит порцию отсканированной еды в ваш журнал макросов.
Вы также можете вручную записывать макросы в физический журнал. Метод зависит от ваших индивидуальных предпочтений.
Имейте в виду, что нет необходимости точно поражать цели макроса. Вы по-прежнему можете достичь своих целей, даже если будете на несколько граммов больше или меньше каждый день.
4. Пример подсчета
Вот пример того, как рассчитать макронутриенты для диеты на 2000 калорий, состоящей из 40% углеводов, 30% белка и 30% жира.
Углеводы:
- 4 калории на грамм
- 40% от 2000 калорий = 800 калорий углеводов в день
- Всего разрешенных углеводов в день = 800/4 = 200 граммов
Белки:
- 4 калории на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов белка в день = 600/4 = 150 граммов
Жиры:
- 9 калорий на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов жира в день = 600/9 = 67 грамм
В этом сценарии ваше идеальное ежедневное потребление было бы 200 граммов углеводов, 150 граммы белка и 67 граммов жиров.
Сводка
Чтобы подсчитать макросы, определите свои потребности в калориях и макроэлементах, а затем запишите макросы в приложение или журнал питания.
Подсчет макронутриентов может дать несколько преимуществ.
Может улучшить качество диеты
Макросы подсчета могут сосредоточить ваше внимание на качестве пищи, а не на ее содержании калорий.
Например, миска сладких хлопьев может иметь такое же количество калорий, как миска овса с ягодами и тыквенными семечками, но эти блюда сильно различаются по содержанию макроэлементов.
Подсчет макросов может побудить вас выбрать более здоровую и богатую питательными веществами пищу, чтобы соответствовать установленным диапазонам макроэлементов.
Однако нездоровая пища может по-прежнему соответствовать вашим макросам и калориям, поэтому важно сделать здоровое питание приоритетом.
Может способствовать снижению веса
Макросы подсчета могут быть особенно эффективными для похудания, поскольку они содержат конкретные диетические рекомендации.
Например, отслеживающие макросы могут помочь тем, кто придерживается диеты с высоким содержанием белка и низким содержанием углеводов, что связано с потерей веса (9).
Кроме того, исследования показывают, что отслеживание приема пищи может помочь в долгосрочном поддержании веса (10).
Может помочь в достижении конкретных целей
Подсчет макронутриентов популярен среди спортсменов и тех, кто преследует определенные цели в отношении здоровья, помимо снижения веса.
Любой, кто хочет нарастить мышечную массу, может иметь большую потребность в белке, чем люди, просто желающие избавиться от лишнего жира.
Подсчет макросов необходим для людей, которым необходимо потреблять определенное количество макроэлементов, чтобы повысить производительность и набрать мышечную массу.
Например, исследования показывают, что спортсменам, тренирующимся с отягощениями, может потребоваться до 1,4 грамма белка на фунт (3,1 грамма на кг) веса тела в день для поддержания мышечной массы (11).
Макросы подсчета могут гарантировать, что ваши потребности в макроэлементах будут удовлетворены.
Резюме
Подсчет макронутриентов — отличный инструмент для тех, кто хочет похудеть или нарастить мышечную массу. Это может способствовать более здоровому питанию и улучшению качества диеты.
В зависимости от диапазона макроэлементов, тем, кто считает макросы, может потребоваться добавить или уменьшить количество продуктов, богатых углеводами, жирами или белками.
Например, человеку, переходящему на диапазон макроэлементов, состоящий из 40% углеводов, 35% жира и 25% белка, может потребоваться заменить некоторые из своих углеводов источниками полезных жиров и белков.
Ниже приведены примеры здоровой пищи для каждого макроэлемента.
Некоторые продукты содержат более одного макроэлемента и могут удовлетворить различные потребности в макроэлементах.
Углеводы
- Зерновые, включая овес, коричневый рис и киноа
- Цельнозерновые макароны
- Цельнозерновой хлеб
- Крахмалистые овощи, такие как картофель, сладкий картофель и озимая тыква
- Фрукты, такие как ягоды, бананы, ананасы и яблоки
- Фасоль, чечевица и горох
- Молоко и йогурт
Белки
Жиры
- Яичные желтки
- Оливковое масло и масло авокадо
- Масло
- Орехи и ореховое масло
- Кокосовое масло и кокосовая стружка
- Авокадо
- Полножирное молоко и йогурт
- Полножирный сыр
- Семена льна и семена чиа
- Жирная рыба, такая как лосось и сардины
Резюме
Пытаясь достичь определенных целей в отношении макроэлементов, сосредоточьтесь на продуктах с высоким содержанием макроэлементы, которые вам нужно потреблять больше всего.
Люди, которым важна структура, могут обнаружить, что подсчет макросов идеально подходит для достижения целей в области здоровья.
Макросы подсчета могут повысить вашу осведомленность о качестве и количестве потребляемой пищи.
Плюс, это может быть хорошим подспорьем для тех, кто соблюдает кетогенную диету или диету с высоким содержанием белка.
Тем не менее, подсчет макросов подходит не всем.
Поскольку при подсчете макросов большое внимание уделяется отслеживанию калорий и регистрации потребления, всем, у кого в анамнезе есть расстройства пищевого поведения, следует избегать подсчета макросов (12).
Сосредоточение внимания на приеме пищи может даже привести к нарушению режима питания у людей, не имевших в анамнезе такого поведения (13).
Имейте в виду, что при подсчете макроэлементов также можно недоедать, потому что это позволяет принимать все продукты, если они соответствуют установленным диапазонам макроэлементов.
Те, кто использует подсчет макросов, должны стремиться — в зависимости от своих целей — придерживаться диеты из цельных продуктов, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Резюме
Макросы подсчета могут помочь людям похудеть и достичь целей в отношении здоровья. Однако это не подходит для людей, страдающих расстройствами пищевого поведения.
При первом подсчете макросов легко почувствовать себя ошеломленным.
Однако выполнение описанных выше шагов может упростить процесс и настроить вас на успех.
Наиболее важные шаги при подсчете макросов — это установка целевого количества калорий и диапазона макроэлементов для углеводов, белков и жиров, который лучше всего подходит для вас.
Затем зарегистрируйте потребление пищи и постарайтесь не выходить за рамки своих макросов, придерживаясь диеты, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Прежде чем вы это узнаете, подсчет макросов покажется вам естественным.
Как считать макросы: пошаговое руководство
Если вы работаете в спортзале или настроены на медицинское сообщество, скорее всего, вы слышали термин «подсчет макросов».
Часто используется людьми, которые хотят сбросить вес или набрать мышечную массу, подсчет макроэлементов (макросов) может помочь вам достичь различных целей в отношении здоровья.
Это влечет за собой отслеживание калорий и типов продуктов, которые вы едите, для достижения определенных целей в отношении макроэлементов и калорий.
Хотя подсчет макросов относительно прост, это может сбить с толку, если вы только начинаете.
В этой статье объясняются преимущества подсчета макросов и дается пошаговое руководство по началу работы.
Чтобы успешно подсчитывать макроэлементы, важно знать, что они из себя представляют и почему некоторым людям нужны другие соотношения макроэлементов, чем другим.
Углеводы
Углеводы включают сахара, крахмалы и волокна (1).
Большинство видов углеводов расщепляются на глюкозу или сахар в крови, который ваше тело либо использует для получения энергии, либо хранит в виде гликогена — формы хранения глюкозы — в печени и мышцах.
Углеводы обеспечивают 4 калории на грамм и обычно составляют большую часть потребляемой человеком калорийности.
Потребление углеводов — одна из наиболее обсуждаемых рекомендаций по макроэлементам, но основные организации здравоохранения предлагают потреблять 45–65% дневных калорий из углеводов (2).
Углеводы содержатся в таких продуктах, как зерна, крахмалистые овощи, бобы, молочные продукты и фрукты.
Жиры
Жиры содержат больше всего калорий из всех макроэлементов, обеспечивая 9 калорий на грамм.
Вашему телу нужен жир для получения энергии и важных функций, таких как выработка гормонов, усвоение питательных веществ и поддержание температуры тела (3).
Хотя типичные рекомендации по макронутриентам для жиров колеблются в пределах 20–35% от общего количества калорий, многие люди добиваются успеха после диеты с высоким содержанием жиров.
Жиры содержатся в таких продуктах, как масла, сливочное масло, авокадо, орехи, мясо и жирная рыба.
Белки
Как и углеводы, белки содержат 4 калории на грамм.
Белки жизненно важны для таких процессов, как передача сигналов клеток, иммунная функция и построение тканей, гормонов и ферментов.
Рекомендуется, чтобы белки составляли 10–35% от общего количества потребляемых калорий (4).
Однако рекомендации по белку различаются в зависимости от желаемого состава тела, возраста, состояния здоровья и других факторов.
Примеры продуктов, богатых белком, включают яйца, птицу, рыбу, тофу и чечевицу.
Резюме
Три макроэлемента, за которыми необходимо следить, — это углеводы, жиры и белки. Рекомендации по макроэлементам различаются в зависимости от многих факторов.
Чтобы научиться считать макроэлементы, нужно приложить определенные усилия, но это метод, которым может воспользоваться каждый.
Следующие шаги помогут вам начать работу.
1. Вычислите ваши потребности в калориях
Чтобы рассчитать ваши общие потребности в калориях, вам необходимо определить расход энергии в состоянии покоя (REE) и расход энергии без отдыха (NREE).
REE означает количество калорий, сжигаемых человеком в состоянии покоя, в то время как NREE указывает количество калорий, сжигаемых во время активности и пищеварения (5).
Добавление REE и NREE дает вам общее количество калорий, сожженных за день, также известное как общий дневной расход энергии (TDEE) (6).
Чтобы определить вашу общую потребность в калориях, вы можете использовать простой онлайн-калькулятор или Mifflin-St. Уравнение Джеора:
- Мужчины: калорий в день = 10 x вес (кг) + 6.25 x рост (см) — 5 x возраст (y) + 5
- Женщины: калорий в день = 10 x вес (кг) + 6,25 x рост (см) — 5 x возраст (y) — 161
Затем умножьте свой результат на коэффициент активности — число, которое представляет разные уровни активности (7):
- Сидячий образ жизни: x 1,2 (ограниченные упражнения)
- Легко активный: x 1,375 (легкие упражнения менее трех дней в неделю)
- Умеренно активный: x 1,55 (умеренные упражнения в большинство дней недели)
- Очень активный: x 1.725 (тяжелые упражнения каждый день)
- Сверхактивный: x 1,9 (интенсивные упражнения два или более раз в день)
Конечный результат дает вам ваш TDEE.
Калории можно добавлять или вычитать из общих расходов для достижения различных целей.
Другими словами, те, кто пытается похудеть, должны потреблять меньше калорий, чем расходуют, в то время как те, кто хочет набрать мышечную массу, должны увеличивать количество калорий.
2. Определите свой идеальный состав макроэлементов
После определения количества калорий, которое нужно потреблять каждый день, следующим шагом будет решить, какое соотношение макронутриентов лучше всего подходит для вас.
Типичные рекомендации по макроэлементам следующие (8):
- Углеводы: 45–65% от общего количества калорий
- Жиры: 20–35% от общего количества калорий
- Белки: 10–35% калорий общее количество калорий
Имейте в виду, что эти рекомендации могут не соответствовать вашим конкретным потребностям.
Ваше соотношение можно настроить для достижения конкретных целей.
Например, человек, который хочет добиться лучшего контроля уровня сахара в крови и избавиться от лишнего жира, может преуспеть в плане питания, состоящем из 35% углеводов, 30% жира и 35% белка.
Кто-то, соблюдающий кетогенную диету, может нуждаться в гораздо большем количестве жиров и меньшем количестве углеводов, в то время как атлету на выносливость может потребоваться более высокое потребление углеводов.
Как видите, соотношение макроэлементов может варьироваться в зависимости от диетических предпочтений, целей по снижению веса и других факторов.
3. Отслеживайте свои макросы и потребление калорий
Теперь пора начать отслеживать свои макросы.
Термин «макрос отслеживания» означает просто запись продуктов, которые вы едите, на веб-сайте, в приложении или журнале питания.
Самый удобный способ отслеживать макросы — через такое приложение, как MyFitnessPal, Lose It! или Мои макросы +.
Эти приложения удобны для пользователя и специально разработаны для упрощения отслеживания макросов.
Кроме того, цифровые весы могут помочь вам отслеживать макросы, хотя в этом нет необходимости. Если вы инвестируете в один, взвесьте каждый съеденный продукт, прежде чем регистрировать его в своем приложении.
В некоторых приложениях есть сканер штрих-кода, который автоматически вводит порцию отсканированной еды в ваш журнал макросов.
Вы также можете вручную записывать макросы в физический журнал. Метод зависит от ваших индивидуальных предпочтений.
Имейте в виду, что нет необходимости точно поражать цели макроса. Вы по-прежнему можете достичь своих целей, даже если будете на несколько граммов больше или меньше каждый день.
4. Пример подсчета
Вот пример того, как рассчитать макронутриенты для диеты на 2000 калорий, состоящей из 40% углеводов, 30% белка и 30% жира.
Углеводы:
- 4 калории на грамм
- 40% от 2000 калорий = 800 калорий углеводов в день
- Всего разрешенных углеводов в день = 800/4 = 200 граммов
Белки:
- 4 калории на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов белка в день = 600/4 = 150 граммов
Жиры:
- 9 калорий на грамм
- 30% от 2000 калорий = 600 калорий белка в день
- Всего разрешенных граммов жира в день = 600/9 = 67 грамм
В этом сценарии ваше идеальное ежедневное потребление было бы 200 граммов углеводов, 150 граммы белка и 67 граммов жиров.
Сводка
Чтобы подсчитать макросы, определите свои потребности в калориях и макроэлементах, а затем запишите макросы в приложение или журнал питания.
Подсчет макронутриентов может дать несколько преимуществ.
Может улучшить качество диеты
Макросы подсчета могут сосредоточить ваше внимание на качестве пищи, а не на ее содержании калорий.
Например, миска сладких хлопьев может иметь такое же количество калорий, как миска овса с ягодами и тыквенными семечками, но эти блюда сильно различаются по содержанию макроэлементов.
Подсчет макросов может побудить вас выбрать более здоровую и богатую питательными веществами пищу, чтобы соответствовать установленным диапазонам макроэлементов.
Однако нездоровая пища может по-прежнему соответствовать вашим макросам и калориям, поэтому важно сделать здоровое питание приоритетом.
Может способствовать снижению веса
Макросы подсчета могут быть особенно эффективными для похудания, поскольку они содержат конкретные диетические рекомендации.
Например, отслеживающие макросы могут помочь тем, кто придерживается диеты с высоким содержанием белка и низким содержанием углеводов, что связано с потерей веса (9).
Кроме того, исследования показывают, что отслеживание приема пищи может помочь в долгосрочном поддержании веса (10).
Может помочь в достижении конкретных целей
Подсчет макронутриентов популярен среди спортсменов и тех, кто преследует определенные цели в отношении здоровья, помимо снижения веса.
Любой, кто хочет нарастить мышечную массу, может иметь большую потребность в белке, чем люди, просто желающие избавиться от лишнего жира.
Подсчет макросов необходим для людей, которым необходимо потреблять определенное количество макроэлементов, чтобы повысить производительность и набрать мышечную массу.
Например, исследования показывают, что спортсменам, тренирующимся с отягощениями, может потребоваться до 1,4 грамма белка на фунт (3,1 грамма на кг) веса тела в день для поддержания мышечной массы (11).
Макросы подсчета могут гарантировать, что ваши потребности в макроэлементах будут удовлетворены.
Резюме
Подсчет макронутриентов — отличный инструмент для тех, кто хочет похудеть или нарастить мышечную массу. Это может способствовать более здоровому питанию и улучшению качества диеты.
В зависимости от диапазона макроэлементов, тем, кто считает макросы, может потребоваться добавить или уменьшить количество продуктов, богатых углеводами, жирами или белками.
Например, человеку, переходящему на диапазон макроэлементов, состоящий из 40% углеводов, 35% жира и 25% белка, может потребоваться заменить некоторые из своих углеводов источниками полезных жиров и белков.
Ниже приведены примеры здоровой пищи для каждого макроэлемента.
Некоторые продукты содержат более одного макроэлемента и могут удовлетворить различные потребности в макроэлементах.
Углеводы
- Зерновые, включая овес, коричневый рис и киноа
- Цельнозерновые макароны
- Цельнозерновой хлеб
- Крахмалистые овощи, такие как картофель, сладкий картофель и озимая тыква
- Фрукты, такие как ягоды, бананы, ананасы и яблоки
- Фасоль, чечевица и горох
- Молоко и йогурт
Белки
Жиры
- Яичные желтки
- Оливковое масло и масло авокадо
- Масло
- Орехи и ореховое масло
- Кокосовое масло и кокосовая стружка
- Авокадо
- Полножирное молоко и йогурт
- Полножирный сыр
- Семена льна и семена чиа
- Жирная рыба, такая как лосось и сардины
Резюме
Пытаясь достичь определенных целей в отношении макроэлементов, сосредоточьтесь на продуктах с высоким содержанием макроэлементы, которые вам нужно потреблять больше всего.
Люди, которым важна структура, могут обнаружить, что подсчет макросов идеально подходит для достижения целей в области здоровья.
Макросы подсчета могут повысить вашу осведомленность о качестве и количестве потребляемой пищи.
Плюс, это может быть хорошим подспорьем для тех, кто соблюдает кетогенную диету или диету с высоким содержанием белка.
Тем не менее, подсчет макросов подходит не всем.
Поскольку при подсчете макросов большое внимание уделяется отслеживанию калорий и регистрации потребления, всем, у кого в анамнезе есть расстройства пищевого поведения, следует избегать подсчета макросов (12).
Сосредоточение внимания на приеме пищи может даже привести к нарушению режима питания у людей, не имевших в анамнезе такого поведения (13).
Имейте в виду, что при подсчете макроэлементов также можно недоедать, потому что это позволяет принимать все продукты, если они соответствуют установленным диапазонам макроэлементов.
Те, кто использует подсчет макросов, должны стремиться — в зависимости от своих целей — придерживаться диеты из цельных продуктов, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Резюме
Макросы подсчета могут помочь людям похудеть и достичь целей в отношении здоровья. Однако это не подходит для людей, страдающих расстройствами пищевого поведения.
При первом подсчете макросов легко почувствовать себя ошеломленным.
Однако выполнение описанных выше шагов может упростить процесс и настроить вас на успех.
Наиболее важные шаги при подсчете макросов — это установка целевого количества калорий и диапазона макроэлементов для углеводов, белков и жиров, который лучше всего подходит для вас.
Затем зарегистрируйте потребление пищи и постарайтесь не выходить за рамки своих макросов, придерживаясь диеты, богатой свежими продуктами, полезными жирами, сложными углеводами и источниками белка.
Прежде чем вы это узнаете, подсчет макросов покажется вам естественным.
Пошаговое руководство
Что такое макро диета и следует ли вам ее придерживаться? Хотя подсчет макросов набирает популярность в социальных сетях, эта концепция не нова. Макросы существуют почти столько же, сколько калории, и их отслеживание давно практикуется в мире фитнеса и диет.Если вы новичок в концепции макросов или просто хотите вывести свое фитнес-путешествие на новый уровень, вот все, что вам нужно знать.
Расчет ежедневных макросов
Воспользуйтесь калькулятором ниже, чтобы узнать точную потребность в белках, жирах и углеводах за считанные минуты!
Что такое макросы и почему это должно вас волновать?
Термин «макроэлементы» (макросы) происходит от греческого слова «макрос», что означает «большой». Макроэлементы — это питательные вещества, которые вам необходимы в больших количествах.Они необходимы в таких больших количествах, потому что обеспечивают всю вашу ежедневную энергию.
Макронутриенты — это, по сути, калории из пищи, разбитые на три основные группы питательных веществ:
- Углеводы
- Белки
- жир
Каждый макроэлемент обеспечивает важные питательные вещества для повседневного функционирования и выживания, и правильный баланс всех трех имеет решающее значение для поддержания мышечной массы, сжигания жира и сохранения здоровья. Это означает, что они могут играть ключевую роль в определении состава вашего тела.Они также играют роль в улучшении контроля энергии, баланса настроения, аппетита и общей физической формы.
Углеводы и жиры являются источником ценной энергии в виде сахаров и жирных кислот. Углеводы — любимый источник топлива для вашего мозга, а также обеспечивают быструю энергию, необходимую для тренировок и повседневных движений. Жир действует как долговременный источник топлива, а также играет роль в хранении питательных веществ и строительных гормонов.
Ваши ежедневные потребности в белке напрямую зависят от вашего веса и уровня физической подготовки.Белок является строительным питательным веществом, которое активно поддерживает, восстанавливает и создает практически каждую клетку вашего тела. Именно поэтому для наращивания мышечной массы рекомендуется высокое потребление белка. Более высокое потребление белка также может способствовать потере жира.
Макросы и
калорий
Снижение веса достигается за счет уменьшения количества того, что вы едите (то есть снижения суточного потребления калорий), тогда как потеря веса требует от вас изменения качества вашего рациона. Другими словами, когда вы начинаете отслеживать свои макросы, может начаться потеря жира или увеличение мышечной массы из-за того, как ваше тело их использует.
Контроль калорий — это первый шаг к изменению вашего тела. Точная настройка потребления макроэлементов — это следующий уровень.
Макронутриенты против микронутриентов
Существует много разговоров о подходе к диете «если это соответствует вашим макросам» (iifym), но макроэлементы — это только одна часть головоломки. Когда речь заходит о потребностях в питании, также следует учитывать микроэлементы.
Микроэлементы (микроэлементы), с другой стороны, представляют собой питательные вещества, которые необходимы в меньших количествах, и они не являются источником калорий для диеты.К ним относятся все необходимые нам ежедневно витамины и минералы.
Скорее всего, вы можете съесть много нездоровой пищи и по-прежнему использовать свои макросы, но вы получите лучшие результаты, если также сосредоточитесь на качестве диеты. Я говорю о выборе продуктов, богатых питательными веществами, вместо того, чтобы сосредоточиться на ежедневных макросах.
Алкоголь — это макрос?
Алкоголь также технически является макроэлементом, поскольку он обеспечивает калории, но не считается важным питательным веществом для здоровья, поэтому его часто не учитывают в планах макро-диеты.
Вам все равно следует отслеживать потребление калорий за счет алкоголя, поскольку это определенно повлияет на ваш прогресс и способность похудеть или набрать мышечную массу. Алкоголь обеспечивает значительное количество калорий — фактически, каждый грамм алкоголя содержит семь калорий на грамм.
Если вы хотите избавиться от жира, возможно, стоит подумать о том, чтобы употреблять меньше алкоголя. Ваше тело будет уделять приоритетное внимание метаболизму токсинов от питья, а не другим макросам, замедляя метаболизм и увеличивая количество жира, которое вы накапливаете из пищи.Это может помешать вам сжигать столько жира.
Как считать макросы
Подсчет макросов — это процесс отслеживания того, сколько граммов каждого макроэлемента вы потребляете в день. И поскольку каждый из белков, жиров и углеводов обеспечивает определенное количество калорий на грамм, вы также отслеживаете, сколько калорий вы потребляете в день.
Подсчет макросов — это простой способ одновременно подсчитывать калории и количество потребляемой пищи.
Облегчите соблюдение макродиеты.Получите наше Бесплатное руководство по приготовлению еды, чтобы получить пошаговый план по оптимизации процесса похудания и набора мышц.
Если вы знаете свою цель по калориям, вы можете легко подсчитать свои макросы, выполнив следующие три шага:
Шаг 1. Узнайте, сколько калорий в одном макросе
Распределение калорий в ваших макросах выглядит следующим образом:
Углеводы и белок обеспечивают примерно четыре калории на грамм — это означает, что продукт питания или напиток с 10 г белка обеспечит 40 калорий из белка.
Жир является самым калорийным питательным веществом с девятью калориями на каждый грамм — более чем в два раза больше энергии, чем белок и углеводы. Таким образом, пища или напиток, содержащие 10 г жира, будут обеспечивать 90 калорий из жира.
Шаг 2. Подсчитайте общее количество макрокалорий
Вы можете рассчитать количество съедаемого, используя этикетку с указанием пищевой ценности. Это действительно так просто: все, что имеет этикетку с информацией о пищевой ценности, также содержит список макроэлементов. Фактически, это именно то, что FDA использует для расчета количества калорий в вашей пище.
Например, на этикетке пищевой ценности полстакана цельнозерновой каши указано, что она содержит 3 грамма жира, 13 граммов углеводов и 3 грамма белка. Вы можете подсчитать количество калорий для каждого макроса, умножив его на назначенное количество калорий в макронутриентах.
- 3 г жира x 9 калорий на грамм = 27 калорий
- 13 г углеводов x 4 калории на грамм = 52 калории
- 3 г белка x 4 калории на грамм = 12 калорий
Сумма этих калорий должна равняться общему количеству калорий для еды — 90 калорий на порцию!
Шаг 3.Оценить коэффициент макросов (%)
Чтобы найти процентное соотношение макрокалорий для каждого из них, вы просто разделите количество калорий на общее количество калорий (90), а затем умножите на 100.
Примечание : этот процент отличается от процентного дневного значения на этикетке, которое отражает ваши общие ежедневные потребности.
- 27 калорий жира / 90 калорий x 100% = 30% калорий из жира
- 52 калории углеводов / 90 калорий x 100% = 57% калорий из углеводов
- 12 белковых и жировых калорий / 90 калорий x 100% = 13% калорий из белков
Процент всех трех — белков, жиров и углеводов — должен составлять 100%.
СОВЕТ: Чтобы быть максимально точным, убедитесь, что вы измеряете правильный размер порции!
Использование приложения для отслеживания макросов
Короче говоря, самый простой и полезный способ подсчета макроэлементов — использовать приложение для отслеживания макросов. Это также хороший способ убедиться, что вы придерживаетесь своей диеты, чтобы получить результаты!
Приложения для отслеживания
могут быть особенно полезны для продуктов, на которых нет этикетки с указанием пищевой ценности, например для свежего мяса и продуктов.Использование базы данных с возможностью поиска из приложения для отслеживания пищевых продуктов может помочь вам найти структуру питания этих продуктов.
Информацию о питании любого продукта питания можно также найти в Интернете в Базах данных о составе пищевых продуктов Министерства сельского хозяйства США.
Кроме того, некоторые приложения для отслеживания будут использовать функцию сканера штрих-кода, которая позволяет быстро вводить информацию о пищевой ценности упакованных продуктов.
Pssst … Приложение Trifecta содержит более 6 миллионов продуктов питания, которые можно искать, и сканер штрих-кода для лучшего отслеживания! Он также имеет функцию быстрого добавления макросов, которая позволяет вам вводить углеводы, жиры и белки для любой пищи, чтобы подсчитать ваши макросы за секунды.
СОВЕТ. Взвешивание и измерение продуктов помогут вам быть более точными при отслеживании продуктов без этикетки с указанием пищевой ценности.
Сколько макросов вам нужно?
Посредством серии простых вопросов для оценки вашего уровня активности и целей в отношении здоровья вы можете быстро определить свои потребности в макросах с помощью калькулятора макросов.
Или вы можете приблизительно оценить свои макросы, используя приведенную ниже простую формулу.
Шаг № 1 — Выберите цель.Вы пытаетесь сбросить жир, набрать мышечную массу или хотите сохранить свой вес и / или повысить производительность?
Шаг № 2 — Оцените, сколько калорий вам нужно в день, чтобы сбросить, набрать или поддерживать свой вес. Вы можете найти это с помощью калькулятора общих суточных затрат энергии или калькулятора TDEE.
Шаг № 3 — Определив целевое дневное потребление, вы можете оценить свои потребности в макросах, используя следующую диаграмму:
Макро диеты
Макросы не всегда универсальны.Существует ряд гибких вариантов диеты, которые можно использовать для контроля калорий и сбалансированности питания путем подсчета количества потребляемых углеводов, жиров и / или белков.
Неважно, занимаетесь ли вы бодибилдингом или просто хотите более здоровую пищу, вот несколько общих подходов к макро-диете, о которых вы, возможно, слышали:
Макросы для похудания
Хотите знать, что лучше: с низким содержанием углеводов, высоким содержанием белка или низким содержанием жиров? Вот лучшие макросы для похудения, которые помогут вам начать работу.
Макросы для раскроя
Хотите сохранить мышечную массу и измельчить? Ознакомьтесь с этим простым руководством по макросам для резки и настройте свое питание как профессионал.
Макросы увеличения мышечной массы
Набор здорового веса требует стратегической макроэкономической стратегии и тренировок. Ознакомьтесь с идеальными макросами для набора массы, которые помогут вам в эти дни в спортзале работать.
Макросы кето-диеты
Не можете придерживаться меньшего количества жиров? Подумайте о замене диеты с высоким содержанием жиров и низким содержанием углеводов для похудения, такой как кето. Ознакомьтесь с этим руководством по кето-макросам, чтобы начать работу.
Веганские макросы
Поскольку растения обычно являются источником углеводов и / или жиров, переход на высокобелковую растительную диету может показаться сложной задачей.Узнайте больше о том, как считать макросы в веганской диете.
Макрообслуживание
После того, как вы установили соотношение макроэлементов, вы можете планировать свой ежедневный план питания с учетом этих соотношений.
Вот как составить надежное меню для достижения ваших целей:
- Начните с изучения того, какая здоровая пища соответствует каждому макроэлементу.
- Затем ознакомьтесь с этим руководством по дозированию, чтобы научиться взвешивать и порционировать пищу.
- Научитесь готовить еду, как босс, измельчать макросы и есть то, что вы любите больше всего.
- Отслеживайте свое ежедневное потребление с помощью приложения для отслеживания еды.
С легкостью достигайте своих ежедневных целей в области питания, используя бесплатный набор инструментов для приготовления еды для похудания. В комплекте с шаблонами планирования меню, списками блюд и стратегиями приготовления блюд, которые помогут вам не сбиться с пути.
Макросы подсчета | Что такое макросы в продуктах питания
Как считать макросы?
Когда дело доходит до подсчета макросов, вам необходимо определить, сколько каждого макроэлемента вам нужно ежедневно, исходя из вашего индивидуального состава тела и фитнес-целей.После определения вы выходите за рамки простого подсчета калорий и отслеживаете, сколько граммов углеводов, жиров и белков будут обеспечивать эти продукты. Затем вы можете спланировать свою макро-диету вокруг продуктов, которые помогут вам достичь ваших ежедневных макро-целей.
Отслеживая макросы, вы действительно отслеживаете свои калории, но вместо того, чтобы просто скользить по поверхности, вы углубляетесь. Если вы пропустили график выше, вот перевод граммов в калории для углеводов, жиров и белков.
- УГЛЕВОДЫ: 1 грамм углеводов = 4 калории
- ЖИРОВ: 1 грамм жира = 9 калорий
- БЕЛК: 1 грамм белка = 4 калории
Итак, если у вас есть продукт, содержащий 15 г углеводов, 1 г жира и 20 г белка, он будет содержать примерно 149 калорий.
Если вы считаете макросы, не беспокойтесь о достижении точной цели по калориям. Когда вы используете макросы, ваши калории будут там, где они должны быть.
Сложно ли считать макросы?
Подсчет макросов не должен быть таким сложным! Когда вы смотрите на этикетку с питанием, вам просто нужно смотреть на размер порции, общее количество жиров, углеводов и белков.
Это очень простой пример, потому что IdealFit Chocolate Brownie Protein содержит мало углеводов и не содержит жиров! Спасибо, IdealFit! В этом примере мы видим, что в нем 0 г жира, 3 г углеводов и 20 г белка.
- Жир = 0 г
- Углеводы = 3 г
- Белка = 20 г
Как рассчитать макросы
Расчет макросов означает определение количества каждого макроса, который вы должны есть каждый день. Выяснить эти цифры непросто, и они в значительной степени зависят от вашего возраста, пола, уровня активности и даже вашего генетического состава. Некоторые люди просто естественным образом сжигают больше калорий!
Первым шагом будет определение того, сколько калорий вам нужно каждый день.Это тоже не точная наука, но простой калькулятор калорий, который вы можете найти в Интернете, может дать вам общее представление. Вы можете просто вставить свою информацию в поля, чтобы получить приблизительную оценку того, сколько калорий вы должны стремиться к ежедневному потреблению.
Когда вы узнаете, сколько калорий вы должны получать каждый день, следующим шагом в вычислении ваших макросов будет установка процента для каждого макроса. Если вы пробуете специальную низкоуглеводную, сверхбелковую или кетогенную диету, ваши проценты будут отличаться от тех, которые я собираюсь изложить.Вам также может потребоваться корректировка на основе других определенных факторов, например, того, как ваше тело обрабатывает углеводы. Но общая отправная точка для макропроцентного распределения может выглядеть примерно так: 40% углеводов, 35% белка, 25% жира.
Это означает, что если бы ваша ежедневная потребность в калориях составляла 1800 калорий, то 40% из них приходилось бы на углеводы, 35% — на белок и 25% — на жиры. Тогда вам просто нужно будет немного математики! Вот пример:
Углеводы: 40% x 1800 калорий = 720 калорий из углеводов
Жир: 25% x 1800 калорий = 450 калорий из жира
Белок: 35% x 1800 калорий = 630 калорий из белка
Как только вы узнаете, сколько калорий вам нужно из каждого макроса, вы почти готовы! Еще один шаг, чтобы выяснить, сколько граммов каждого макроса вы хотите получить.Используя числа из предыдущего раздела, вы можете рассчитать следующее:
Углеводы: 720 калорий ÷ 4 калории / грамм = 180 г углеводов
Жир: 450 калорий ÷ 9 калорий / грамм = 50 г жира
Белок: 630 калорий ÷ 4 калории / грамм = 157 г белка
Теперь, когда вы знаете, сколько граммов каждого макроса вы будете получать каждый день, вы можете приступить к планированию приема пищи, чтобы попытаться достичь этих цифр!
Подсчет макросов в пище: рекомендации диетолога
У всех нас разные фитнес-цели.Но в качестве общего правила мы разделим его на две разные категории:
- Подсчет макросов для наращивания мышечной массы
- Счетные макросы для худеющих
Примечание. Это только примеры того, чем я занимаюсь. Это не означает, что кто-то другой может следовать и иметь те же результаты.
1. Подсчет макросов для наращивания мышц
2.Подсчет макросов для похудания
(я не беспокоюсь о подсчете овощей в своих макросах, считаю их халявой :))
Пошаговое руководство по подсчету макросов
1. Планируйте питание накануне вечером. Когда вы пытаетесь «взлететь», получение достаточного количества правильных макросов редко срабатывает.
2. Методом проб и ошибок определите типичный размер порции протеина и употребляйте его регулярно. Женщины часто испытывают дефицит белка, но когда вы знаете, что вам нужно, например, на обед и ужин 4 унции мяса, вы просто всегда подключаете его.Это значительно упрощает отслеживание макросов.
3. Возьмите книгу макросов. Он будет содержать более подробные сведения и поможет вам узнать, как работать с макросами.
4. Используйте такое приложение, как MyFitnessPal. Попытка сделать это вручную отнимает гораздо больше времени.