Как в excel открыть макрос 2010

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel Starter 2010 Еще…Меньше

Существует несколько способов запуска макроса в Microsoft Excel. Макрос — это действие или набор действий, с помощью которых можно автоматизировать различные задачи. Макрос записывется на Visual Basic для приложений программирования. Макрос всегда можно запустить, нажав кнопку Макрос на вкладке Разработчик на ленте. В зависимости от того, как макрос назначен для запуска, его также можно запустить, нажав сочетание клавиш сочетание клавиш, нажав кнопку на панели быстрого доступа или в настраиваемой группе на ленте либо щелкнув объект, рисунок или элемент управления. Кроме того, макрос можно запускать автоматически при запуске книги.

Перед запуском макроса

Перед началом работы с макросами следует включить вкладку Разработчик.

  • Чтобы Windows, перейдите в меню Параметры > >Настроить ленту.

  • Для Macперейдите на Excel > параметры… >ленты & панели инструментов.

  • Затем в разделе Настройка ленты в разделе Основныевкладки, в разделе Разработчик, нажмите кнопку ОК.

  1. Откройте книгу, содержащую нужный макрос.

  2. На вкладке Разработчик в группе Код нажмите кнопку Макросы.

  3. В поле Имя макроса выберите макрос, который вы хотите запустить, и нажмите кнопку Выполнить.

  4. У вас также есть другие варианты:

    • Параметры: добавление сочетания клавиш или описания макроса.

    • Шаг. Откроется Visual Basic редактора в первой строке макроса. Нажатие F8 позволит вам по одной строке пролиться между кодами макроса.

    • Изменить. Откроется редактор Visual Basic и вы сможете при необходимости изменить код макроса. После внесения изменений можно нажать F5, чтобы запустить макрос из редактора.

Вы можете добавить сочетание клавиш в макрос при его записи, а также добавить его к существующему макросу:

  1. На вкладке Разработчик в группе Код нажмите кнопку Макросы.

  2. В поле Имя макроса выберите макрос, который нужно назначить сочетанием клавиш.

  3. Нажмите кнопку Параметры.

    Откроется диалоговое окно Параметры макроса.

  4. В поле Сочетания клавиш введите любую букву в нижнем или верхнем регистре, которую вы хотите использовать с сочетаниями клавиш.

    Примечания: 

    • Для Windowsклавиша для букв в нижнем регистре — CTRL+letter. Для букв верхнего регистра это CTRL+SHIFT+Letter.

    • Для Macдля букв в нижнем регистре есть клавиши OPTION+COMMAND+LETTER,но клавиши CTRL+letter также будут работать. Для букв верхнего регистра это CTRL+SHIFT+Letter.

    • Будьте внимательны при назначении ярлыков, так как они будут переопределять все эквивалентные стандартные Excel, пока открыта книга с макросом. Например, если назначить макрос CTRL+Z,вы потеряете возможность отменить. В связи с этим обычно лучше использовать клавиши CTRL+SHIFT+БУКВА С верхнего регистра, например CTRL+SHIFT+Z, для которых в Excel нет эквивалентных Excel.

    Список сочетаний клавиш CTRL, которые уже назначены в Excel, см. в статье Excel сочетания клавиш и клавиши для работы с функцией.

  5. Введите описание макроса в поле Описание.

  6. Нажмите кнопку ОК, чтобы сохранить изменения, а затем — кнопку Отмена, чтобы закрыть диалоговое окно Макрос.

Чтобы запустить макрос нажатием кнопки на панели быстрого доступа, сначала необходимо добавить соответствующую кнопку на панель. Для этого см. назначение макроса кнопке.

Вы можете создать пользовательскую группу, которая появится на вкладке ленты, а затем назначить макрос кнопке в этой группе. Например, можно добавить настраиваемую группу «Мои макросы» на вкладку Разработчик, а затем добавить в новую группу макрос (который отображается как кнопка). Для этого см. назначение макроса кнопке.

Запуск макроса путем щелчка области графического объекта

Вы можете создать хот-спот на графическом элементе, который пользователи могут щелкнуть, чтобы запустить макрос.

  1. На компьютере вставьте графический объект, например рисунок, или нарисуйте фигуру. Распространенный сценарий — нарисовать фигуру Скруглённый прямоугольник и отформатировали ее так, чтобы она выглядела как кнопка.

    Чтобы узнать о вставке графического объекта, см. добавление, изменение и удаление фигур.

  2. Щелкните правой кнопкой мыши созданный хот-спот и выберите пункт Назначить макрос.

  3. Выполните одно из указанных ниже действий.

    • Чтобы назначить существующий макрос графическому объекту, дважды щелкните макрос или введите его имя в поле Имя макроса.

    • Чтобы записать новый макрос для назначения выбранному графическому объекту, нажмите кнопку Запись ,в диалоговом окне Запись макроса введите имя макроса и нажмите кнопку ОК, чтобы начать запись макроса. Завершив запись макроса, нажмите кнопку Остановить Изображение кнопкина вкладке Разработчик в группе Код.

      Совет:  Вы также можете нажать Изображение кнопки в левой части панели состояния.

    • Чтобы изменить существующий макрос, щелкните его имя в поле Имя макроса и выберите изменить.

  4. Нажмите кнопку ОК.

На вкладке Разработчик нажмите кнопку Visual Basic, чтобы запустить редактор Visual Basic(VBE). Перейдите Project проводнике, чтобы найти модуль, содержащий макрос, который вы хотите запустить, и откройте его. Все макрос в этом модуле будут перечислены в области справа. Выберите макрос, который вы хотите запустить, разместив курсор в любом месте макроса и нажимая F5или выбрав в меню пункт Выполнить > Макрос.

Создайте Workbook_Open события.

В следующем примере событие Open используется для запуска макроса при открытии книги.

  1. Откройте или создайте книгу, в которую нужно добавить макрос.

  2. На вкладке Разработчик в группе Код нажмите кнопку Visual Basic.

  3. В окне Project проводника щелкните правой кнопкой мыши объект ThisWorkbook и выберите просмотр кода.

    Совет: Если окно Project проводника не отображается, в меню Вид выберите пункт Project проводник.

  4. В списке Объект над окном Код выберите книга.

    При этом автоматически создается пустая процедура для события Open, например:

    Private Sub Workbook_Open()

    End Sub

  5. Добавьте в процедуру следующие строки кода:

    Private Sub Workbook_Open()Листы даты
    MsgBox(«Лист1»).
    Диапазон(«A1»). Value = Date
    End Sub

  6. Переключитесь на приложение Excel и сохраните данную книгу как книгу с поддержкой макросов (.XLSM).

  7. Закройте и снова откройте книгу. При повторном запуске книги Excel выполняется процедура Workbook_Open, в которой в окне сообщения отображается сегодняшняя дата.

  8. В окне сообщения нажмите кнопку ОК.

    Примечание: Ячейка A1 на листе «Лист1» также содержит дату в результате Workbook_Open процедуры.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

К началу страницы

См. также

Автоматический запуск макроса при открытии книги 

Автоматизация задач с помощью средства записи макросов — Excel

Запись макроса для открытия определенных книг при запуске Excel

Создание и сохранение всех макросов в одной книге

Сохранение макроса

Нужна дополнительная помощь?

Макросы позволяют существенно расширить возможности в программе Excel. Они автоматизируют рабочие процессы и берут большую часть рутинной работы пользователя на себя. Просто нужно научится пользоваться макросами и производительность труда возрастет в десятки раз!

Вам даже не нужно быть программистом и знать язык программирования «VBA» чтобы создавать свои макро-программы с помощью инструмента записи макросов.

Сначала надо включить панель разработчика. Для этого в меню «Файл» открываем группу опций «Параметры». В появившемся окне «Параметры Excel» открываем группу «Настройка ленты». Обратите внимание на правую колонку настроек под аналогичным названием «Настройка ленты». В ней следует отметить галочкой опцию «Разработчик» как показано ниже на рисунке:

Панель разработчика.

Теперь нам доступна на ленте новая закладка «Разработчик» со всеми своими инструментами для автоматизации работы в Excel и создания макросов.

Применение VBA и макросов в Microsoft Excel

Макросы – это внутренние приложения, которые берут на себя всю рутинную работу, облегчая жизнь пользователю. Каждый пользователь может создать макрос без знания языков программирования. Для этого существует макрорекодер, который запускается с помощью кнопки «Запись макроса».

В этом режиме все действия пользователя макрорекодер в Excel записывает, переводя на язык программирования VBA-код в автоматическом режиме. После завершения записи мы получаем готовую программу, которая сама выполняет те действия, которые выполнял пользователь при записи.

Как записать готовый макрос в Excel? Очень просто:

  1. На вкладке «Разработчик» нажимаем кнопку «Запись макроса».
  2. Запись макроса.

  3. В появившимся диалоговом окне заполняем параметры макроса. И нажимаем «ОК».
  4. Параметры.

  5. После завершения нажимаем на кнопку «Остановить запись», после чего макрос будет автоматически сохранен.
  6. Остановить запись.

  7. Для выполнения или редактирования записанного макроса нажимаем на кнопку «Макросы» (или комбинацию клавиш ALT+F8). Появится окно со списком записанных макросов и кнопками для управления ими.
  8. Список макросов.

С помощью макропрограмм можно увеличить производительность труда пользователя в десятки раз. Но чтобы использовать запись пользовательских макросов на все 100% следует соблюдать простые правила, которые существенно влияют на их качество в момент записи и эффективность при выполнении.



Как работать с макросами в Excel

5 простых советов, которые помогут в создании макросов без программирования. Воспользуйтесь этими простыми советами, которые позволяют быстро и просто создавать качественные макропрограммы автоматически:

1 Правильные имена в макросах.

Присваивайте макросам короткие, но содержательные имена. Когда вы войдете вкус, со временем вам придется создавать много макросов. При выборе в диалоговом окне их легче найти с короткими и содержательными названиями. Система VBA предоставляет вам возможность указать описание к имени. Обязательно используйте ее.

Имя макроса обязательно должно начинаться с букв и не может содержать пробелы, символы или знаки препинания. После первого символа, вы можете использовать больше букв, цифр или нижнее подчеркивание, но максимальная длина имени составляет 80 символов.

2 Используйте относительные (не абсолютные) адреса ячеек

Абсолютный адрес ячейки – это точное местонахождение курсора, когда информация о его размещении записывается в макро-адреса с жесткой привязкой к конкретной ячейке в момент записи. Абсолютные адреса ограничивают возможности макроса, если будут добавляться / удаляться данные на листе Excel или список данных будет становиться больше. Относительные средства не привязывают курсор к конкретному адресу ячейки.

По умолчанию в Excel включен режим «Абсолют», но вы можете изменить его, включив кнопку «Относительные ссылки» расположенную ниже под кнопкой «Запись макроса» на панели инструментов вкладки «Разработчик»:

Относительные ссылки.

3 Всегда начинайте запись с курсором в A1

Абсолютный отсчет ячеек, всегда ведется с исходного положения (адрес ячейки А1) – до адреса курсора с вашими данными. Если вы сохранили ваш макрос в книге личных макросов (рекомендуется так и делать), то вы можете использовать свою программу на других листах с аналогичными данными. Независимо от того, где ваш курсор позиционируется, когда вы начинаете запись макроса! Даже если он уже находится в ячейке A1, ваш первый макрос лучше записывать после нажатия клавиш должны быть Ctrl + Home.

Пример: Представьте себе, что каждый месяц вы получаете десятки таблиц из всех филиалов. От вас требуется организовать данные и рассчитать показатели, чтобы произвести еще один ежемесячный отчет. Вы можете записать макрос для выполнения всех этих функций, в том числе открытие и соединение всех листов в одну комбинированную таблицу.

4 Всегда перемещаться с клавиш направления в момент записи макроса

Используйте кнопки со стрелками для управления курсором (Ctrl + Up, и т.п.). Позиционируйте курсор, так чтобы вы могли добавить, изменить или удалить данные внутри таблицы по мере необходимости.

Использование мыши для навигации является более сложным и не так надежным в момент записи. Когда дело доходит до макросов, использовать мышь лучше только для вызова меню.

5 Создавайте макросы для конкретных небольших задач

Держите ваши макросы для небольших специфичных задач. Чем больше программный код в макросе, тем медленнее он работает, особенно если это требуется для выполнения многих функций или рассчитать много формул в большой электронной таблице.

Если вы запустите каждый процесс отдельно, вы можете быстро просмотреть результаты для проверки точности их выполнения.

Если нельзя разбить длинный макрос на короткие приложения, а требуется проверить его функциональность пошагово («отладкой»). Нажмите клавишу F8 каждый раз, когда вы хотите перейти к следующему шагу выполнения задачи. Процесс выполнения программы останавливается, когда он видит ошибку. Вы можете исправить ошибку, которую легко найти с помощью «отладки» или записать по-новому.

В Excel 5 впервые была реализована поддержка нового макроязыка Visual Basic for Applications (VBA). Каждая копия Excel, начиная с 1993 года, содержит копию языка VBA, в явном виде не представленную на рабочих листах. VBA позволяет выполнять действия, которые обычно реализуются в Excel, но делает это намного быстрее и безукоризненно.

Если вам доводилось прежде сталкиваться с VBA-программами, то вы знаете, что очень часто они позволяют с помощью всего одного щелчка получать результаты, на которые в случае применения обычных средств Excel уходит несколько часов, а то и дней. Не стоит пугаться сложностей VBA, это ничуть не сложнее чем эмулятор psp. В 90% случаев программный код генерируется благодаря функции записи макросов, и только самые эффективные VBA-приложения пишутся вручную. В примерах раздела «Использование VBA для создания сводных таблиц» вы познакомитесь с нелегкой работой настоящего VBA-программиста.

По умолчанию VBA в Excel 2010 отключен. Прежде чем начать его использовать, нужно активизировать его в диалоговом окне Центр управления безопасностью (Trust Center). Выполните следующие действия.

  1. Выберите вкладку Файл (File) для перехода в окно представления Backstage.
  2. В находящейся слева навигационной панели щелкните на кнопке Параметры (Options). На экране появится диалоговое окно Параметры Excel (Excel Options).
  3. В диалоговом окне Параметры Excel выберите категорию Настройка ленты (Customize Ribbon).
  4. В находящемся справа списке отображается перечень основных вкладок Excel. По умолчанию флажок для вкладки Разработчик (Developer) не установлен. Установите его, после чего вкладка Разработчик отобразится на ленте. Щелкните на кнопке ОК для закрытия окна Параметры Excel.
  5. 5. Выберите вкладку ленты Разработчик. Нам понадобится группа команд Код (Code), в состав которой входят кнопки Visual Basic Editor, Макросы (Macros), Запись макроса (Macro Recorder) и Безопасность макросов (Macro Security) (рис. 12.1).

    Рис. 12.1. Доступ к инструментам VBA реализуется через вкладку Разработчик

    Рис. 12.1. Доступ к инструментам VBA реализуется через вкладку Разработчик

  6. Щелкните на кнопке Безопасность макросов. На экране появится диалоговое окно Центр управления безопаность, в котором можно выбрать одну из четырех настроек, задающих уровень безопасности при работе с макросами. Названия этих настроек изменились по сравнению с названиями, применяемыми в версиях Excel 97 — Excel 2003. Соответствующие объяснения можно найти при описании следующего шага.
  7. Выберите один из следующих переключателей.
    • Отключить все макросы с уведомлением (Disable all macros with notification). Эта настройка эквивалентна среднему уровню безопасности макросов в Excel 2003. При открытии рабочей книги, содержащей макросы, на экране появится сообщение о том, что в файле имеются макросы. Если вы хотите, чтобы эти макросы выполнялись, щелкните на кнопке Параметры (Options) и установите флажок Включить это содержимое (Enable). Это позволит VBA выполнять макросы, но вам придется явным образом разрешать их запуск при загрузке Excel.
    • Включить все макросы (Enable all macros). Эта настройка эквивалентна низкому уровню защиты макросов в Excel 2003. Поскольку она разрешает выполнение абсолютно всех макросов, содержащихся в рабочей книге (в том числе и зловредных), разработчики из Microsoft настоятельно не рекомендуют ее использовать.

Microsoft Excel – это популярное для работы с таблицами приложение, используемое в офисах и дом…

Microsoft
Excel – это популярное для работы с
таблицами приложение, используемое в
офисах и домах 90% людей. Несмотря на то
что программе уже 34 года, новые возможности
продолжают добавляться в обновлениях.
Поэтому программа до сих пор популярна.
Чтобы облегчить себе работу, нужно
знать, как работают эти опции. Для начала расскажем о том, что такое
макросы, а потом – как
включить макросы в Excel
2010, 2007, 2003.

Как включить макросы в Excel 2010, 2007, 2003

Что
такое макрос?    

До
того как
включить макросы в Excel,
необходимо
узнать, для чего они нужны. Макросы –
это сохраненные в строках таблицы
заранее созданные последовательности
действий с данными. Реализованы на языке
VBA, что позволяет работать не только с
командами Экселя, но и других приложений
Office, поддерживающих этот язык. Используя
макросы, можно настроить автоматическое
форматирование строк таблицы, отправку
по почте, или создание презентации.

как включить макросы в excel 2010

Описание
параметров макросов

После
сохранения макросы содержат пять
параметров работы, необходимых для
обеспечения защищенности при взаимодействии
с ними, так
как включить макросы в Excel
легко,
а избавляться от вирусов – нет.

  1. Отключить макросы без уведомления.
    Применяется
    для таблиц, автор которых неизвестен.
    Деактивирует сохраненные в ячейках
    макросы, не предупреждая об этом.
    Пользуйтесь им при опасности вирусов
    в таблице.
  2. Отключить макросы с уведомлением.
    Этот
    режим выбран стандартно. Предлагает
    выключать макросы, но перед этим
    запрашивает разрешения пользователя.
    С ним вы сможете решать, оставлять ли,
    или нет отдельно каждый макрос.
  3. Отключить макросы, кроме макросов с
    цифровой подписью.
    Похож
    на предыдущий, но автоматически разрешает
    использование макросов, подписанных
    цифровой подписью предприятия, доверие
    которому вы уже подтвердили.
  4. Включить макросы.
    Из
    названия понятно, что параметр разрешает
    использование макрокоманд, записанных
    в таблицу.
  5. Доверять доступ к объектной модели
    проектов VBA.

как в excel вставить макрос

    Показатель
    для разработчиков, открывающий доступ
    таблицы к программам, написанным для
    модели VBA любого приложения, по желанию
    пользователя. Это позволяет программисту
    настраивать, какой код имеет доступ к
    макросам, и куда макросы могут отправлять
    данные. При этом взломать или повредить
    работу команд программиста практически
    невозможно. Но новичку в VBA лучше не
    использовать этот параметр.

    макросы excel как включить

    Как включить
    макросы в Excel

    Существует
    три версии Экселя, где активация макросов
    отличается друг от друга. Сначала
    рассмотрим, как
    включить макросы в Excel
    2010.

    как вставить макрос в 2010 excel

    Как
    включить макросы в MS
    Excel 2010

    В
    2010 версии Экселя разработчики сделали
    упор на безопасность, поэтому для
    включения макросов нужно сделать
    следующее:

    • В верхнем меню приложения нажмите
      «Файл».
    • Откроется список, выбрать предпоследний
      пункт – «Параметры».
    • Нажмите,
      и попадете в окно «Параметры Excel». Слева
      перейдите в «Центр управления
      безопасностью».

    Как включить макросы в Excel 2010, 2007, 2003

    • Справа в тексте кликните «Параметры…».
    • Откроется еще одно меню, где нужно
      выбрать «Параметры макросов».
    • Отметьте один из пунктов, нажмите «Ок».

    Как включить макросы в Excel 2010, 2007, 2003

    • Закройте и запустите
      Excel снова, для вступления изменений в
      силу.

    Как
    включить макросы в MS
    Excel 2007

    Здесь
    способ не сильно отличается от того,
    как
    включить макросы в Excel
    2010:

    • Нажмите кнопку «Файл» (круглая желтая
      кнопка с цветными квадратами) слева
      сверху окна.
    • В правой нижней части меню кликните на
      «Параметры Excel».

    Как включить макросы в Excel 2010, 2007, 2003

    • Перейдите в раздел «Центр управления
      безопасностью», а затем «Параметры
      центра…»
    • В открывшемся меню отметьте режим работы
      макросов, который нужен.

    Как включить макросы в Excel 2010, 2007, 2003

    • Перезапустите Эксель.

    Как
    включить макросы в MS
    Excel 2003

    2003
    Эксель уступает в безопасности 2010-му,
    и включить макросы в нем легче, но важно
    тщательно проверять файлы на вирусы,
    пользуясь им. Включить исполнение
    макросов можно так:

    1. В
      открытом приложении нажмите на кнопку
      «Сервис» в верхнем меню.
    2. В выпадающем списке нажмите на «Макрос»,
      и «Безопасность».
    3. Откроется меню безопасности, где нужно
      отметить уровень безопасности для
      макросов.
    4. Нажмите
      «Ок», и перезайдите в Эксель.

    Как включить макросы в Excel 2010, 2007, 2003

    Способы

    Включить
    макрокоманды можно одним из трех путей:

    • во
      время показа окна сообщения;
    • с
      помощью Backstage;
    • когда
      появляется предупреждение системы
      безопасности.

    Как включить макросы в Excel 2010, 2007, 2003

    Во
    время показа окна сообщения

    Дополнительный
    способ работает, когда в Экселе открывается
    файл, содержащий макрокоманды. В верхней
    части листа появляется желтая карточка
    с надписью «Предупреждение системы
    безопасности». Кликните по «Включить
    содержимое», и они активируются.

    Как включить макросы в Excel 2010, 2007, 2003

    С
    помощью Backstage

    Если
    открыть книгу с макросами, в меню «Файл»
    появляется сообщение, позволяющее
    активировать их. Для этого сделайте
    следующее:

    1. Раскройте меню «Файл» — левая в ленте
      вверху страницы.
    2. В окне «Предупреждение системы
      безопасности» кликните по «Включить
      содержимое».
    3. Появится диалоговое меню, где необходимо
      будет отметить «Всегда включать активное
      содержимое этого документа».

    Как включить макросы в Excel 2010, 2007, 2003

    После
    того как все получилось, перезагрузите
    приложение.

    Активировать
    на одну сессию при появлении предупреждения
    системы безопасности

    Способ
    включения только на один раз для одной
    книги:

    1. Раскройте меню «Файл» — левая в ленте
      вверху страницы.
    2. В окне «Предупреждение системы
      безопасности» кликните по «Включить
      содержимое».
    3. Перейдите в раздел «Дополнительные
      параметры».
    4. В появившемся поле активируйте пункт
      «Включить содержимое для этого сеанса»
      по очереди для каждого из макросов.
    5. Сохраните изменения, кликнув «Ок».

    Время на прочтение
    7 мин

    Количество просмотров 312K

    Приветствую всех.

    В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

    VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.

    Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

    Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

    Поэтому, увы, будем учить Visual Basic.

    Чуть-чуть подготовки и постановка задачи

    Итак, поехали. Открываем Excel.

    Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.

    Появилась вкладка.

    Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

    То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).

    Результат, которого хотим добиться, выглядит примерно так:

    Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?

    Кодим

    Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

    И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

    Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:

    Sub FormatPrice()End Sub

    Напишем Hello World:

    Sub FormatPrice()
        MsgBox "Hello World!"
    End Sub

    И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

    Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

    Примеры синтаксиса

    ' Процедура. Ничего не возвращает
    ' Перегрузка в VBA отсутствует
    Sub foo(a As String, b As String)
        ' Exit Sub ' Это значит "выйти из процедуры"
        MsgBox a + ";" + b
    End Sub' Функция. Вовращает Integer
    Function LengthSqr(x As Integer, y As IntegerAs Integer
        ' Exit Function
        LengthSqr = x * x + y * y
    End FunctionSub FormatPrice()
        Dim s1 As String, s2 As String
        s1 = "str1"
        s2 = "str2"
        If s1 <> s2 Then
            foo "123""456" ' Скобки при вызове процедур запрещены
        End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
        Dim i As Integer
        ' Цикл всегда состоит из нескольких строк
        For i = 1 To 10
            res = res + CStr(i) ' Конвертация чего угодно в String
            If i = 5 Then Exit For
        Next iDim x As Double
        x = Val("1.234"' Парсинг чисел
        x = x + 10
        MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
        x = 5 / 0
        MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
        x = 5 / 0
        MsgBox "OK!"
        GoTo ne

    Err:
        MsgBox 

    "Err!"

    ne:

    On Error GoTo 0 ' Отключаем обработку ошибок

        ' Циклы бывает, какие захотите
        Do While True
            Exit DoLoop 'While True
        Do 'Until False
            Exit Do
        Loop Until False
        ' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
        ' Val также умеет возвращать Integer
        Select Case LengthSqr(Len("abc"), Val("4"))
        Case 24
            MsgBox "0"
        Case 25
            MsgBox "1"
        Case 26
            MsgBox "2"
        End Select' Двухмерный массив.
        ' Можно также менять размеры командой ReDim (Preserve) - см. google
        Dim arr(1 to 10, 5 to 6) As Integer
        arr(1, 6) = 8Dim coll As New Collection
        Dim coll2 As Collection
        coll.Add "item""key"
        Set coll2 = coll ' Все присваивания объектов должны производится командой Set
        MsgBox coll2("key")
        Set coll2 = New Collection
        MsgBox coll2.Count
    End Sub

    Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

    Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

    Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

    Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

    Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.

    Кодим много и под Excel

    В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

    Sub FormatPrice()
        Sheets("result").Cells.Clear
        Sheets("data").Activate
    End Sub

    Работа с диапазонами ячеек

    Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

    Примеры работы с Range

    Sheets("result").Activate
    Dim r As Range
    Set r = Range("A1")
    r.Value = "123"
    Set r = Range("A3,A5")
    r.Font.Color = vbRed
    r.Value = "456"
    Set r = Range("A6:A7")
    r.Value = "=A1+A3"

    Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

    1. Считали группы из очередной строки.
    2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
      1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
    3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

    Для упрощения работы рекомендую определить следующие функции-сокращения:

    Function GetCol(Col As IntegerAs String
        GetCol = Chr(Asc("A") + Col)
    End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
        Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
    End FunctionFunction GetCell(Col As Integer, Row As IntegerAs Range
        Set GetCell = Range(GetCol(Col) + CStr(Row))
    End Function

    Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

    Глобальные переменные

    Option Explicit ' про эту строчку я уже рассказывал
    Dim CurRow As Integer
    Const GroupsCount As Integer = 2
    Const DataCount As Integer = 3

    FormatPrice

    Sub FormatPrice()
        Dim I As Integer ' строка в data
        CurRow = 1
        Dim Groups(1 To GroupsCount) As String
        Dim PrGroups(1 To GroupsCount) As String

        Sheets(

    "data").Activate
        I = 2
        Do While True
            If GetCell(0, I).Value = "" Then Exit Do
            ' ...
            I = I + 1
        Loop
    End Sub

    Теперь надо заполнить массив Groups:

    На месте многоточия

    Dim I2 As Integer
    For I2 = 1 To GroupsCount
        Groups(I2) = GetCell(I2, I)
    Next I2
    ' ...
    For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
        PrGroups(I2) = Groups(I2)
    Next I2
    I =  I + 1

    И создать заголовки:

    На месте многоточия в предыдущем куске

    For I2 = 1 To GroupsCount
        If Groups(I2) <> PrGroups(I2) Then
            Dim I3 As Integer
            For I3 = I2 To GroupsCount
                AddHeader I3, Groups(I3)
            Next I3
            Exit For
        End If
    Next I2

    Не забудем про процедуру AddHeader:

    Перед FormatPrice

    Sub AddHeader(Ty As Integer, Name As String)
        GetCellS("result", 1, CurRow).Value = Name
        CurRow = CurRow + 1
    End Sub

    Теперь надо перенести всякую информацию в result

    For I2 = 0 To DataCount - 1
        GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
    Next I2

    Подогнать столбцы по ширине и выбрать лист result для показа результата

    После цикла в конце FormatPrice

    Sheets("Result").Activate
    Columns.AutoFit

    Всё. Можно любоваться первой версией.

    Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

    Sub AddHeader(Ty As Integer, Name As String)
        Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
        ' Чтобы не заводить переменную и не писать каждый раз длинный вызов
        ' можно воспользоваться блоком With
        With GetCellS("result", 0, CurRow)
            .Value = Name
            .Font.Italic = True
            .Font.Name = "Cambria"
            Select Case Ty
            Case 1 ' Тип
                .Font.Bold = True
                .Font.Size = 16
            Case 2 ' Производитель
                .Font.Size = 12
            End Select
            .HorizontalAlignment = xlCenter
        End With
        CurRow = CurRow + 1
    End Sub

    Уже лучше:

    Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

    Поэтому чуть-чуть меняем код с добавлением стиля границ:

    Sub AddHeader(Ty As Integer, Name As String)
        With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
            .Merge
            .Value = Name
            .Font.Italic = True
            .Font.Name = "Cambria"
            .HorizontalAlignment = xlCenterSelect Case Ty
            Case 1 ' Тип
                .Font.Bold = True
                .Font.Size = 16
                .Borders(xlTop).Weight = xlThick
            Case 2 ' Производитель
                .Font.Size = 12
                .Borders(xlTop).Weight = xlMedium
            End Select
            .Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
        End With
        CurRow = CurRow + 1
    End Sub

    Осталось лишь добится пропусков перед началом новой группы. Это легко:

    В начале FormatPrice

    Dim I As Integer ' строка в  data
    CurRow = 0 ' чтобы не было пропуска в самом начале
    Dim Groups(1 To GroupsCount) As String

    В цикле расстановки заголовков

    If Groups(I2) <> PrGroups(I2) Then
        CurRow = CurRow + 1
        Dim I3 As Integer

    В точности то, что и хотели.

    Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

    Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

    Спасибо за внимание.

    Буду рад конструктивной критике в комментариях.

    UPD: Перезалил пример на Dropbox и min.us.

    UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

    Понравилась статья? Поделить с друзьями:
  1. Как в excel открыть два файла на разные мониторы
  2. Как в excel оставить только цифры без букв
  3. Как в excel открыть два файла на одном экране
  4. Как в excel оставить только целые числа
  5. Как в excel открыть два файла в параллельных окнах