Как написать алгоритм для excel

Содержание

  1. Построение произвольных блок-схем и автоматический анализ связей в MS EXCEL
  2. Построитель произвольных блок-схем
  3. Анализ данных блок-схемы
  4. Как это реализовано?
  5. РЕАЛИЗАЦИЯ АЛГОРИТМОВ С ПОМОЩЬЮ МАКРОСОВ В EXCEL
  6. Реализация алгоритмов в электронных таблицах
  7. Линейные алгоритмы
  8. Алгоритм ветвления
  9. Циклические алгоритмы

Построение произвольных блок-схем и автоматический анализ связей в MS EXCEL

history 28 августа 2022 г.

Создадим редактор блок-схем произвольной формы в MS EXCEL. Помимо построения блок-схем редактор должен автоматически (по нажатию кнопки) проводить анализ связей элементов в схеме:

  • подсчитывать количество элементов,
  • присваивать им уникальные номера,
  • определять последователей и предшественников элемента,
  • проводить проверки (наличие связей, отсутствие дублирующих связей, контроль циклов внутри схемы и др.).

Справедливости ради, нужно отметить, что предложенный в данной статье построитель блок-схем во многом дублирует стандартный инструмент SmartArt (тип Иерархия), который можно создать через меню EXCEL Вставка-Иллюстрации-SmartArt.

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

Примечание:

В статье Автоматический анализ схем SmartArt MS EXCEL показано как считать всю информацию об элементах и их связях с помощью VBA (фактически реализован парсинг сбор и систематизация информации, parsing).

Построитель произвольных блок-схем

Для редактора блок-схем будем использовать стандартные элементы типа Надпись и Стрелка (меню EXCEL Вставка-Иллюстрации-Фигуры). Каждому элементу блок-схемы (Надпись) программа VBA будет присваивать уникальный номер, что в дальнейшем нам позволит определить связи между элементами (заполнив отдельную таблицу последователей и предшественников каждого элемента). Поскольку мы будем строить блок-схему иерархического типа, то последователь (тот элемент к которому идет стрелка) будет единственным, но если требуется создать схему с произвольными связями, то программу VBA можно легко настроить. Иерархический тип блок-схем подходит для описания организационных систем (начальник должен быть единственным, в идеале), производственных цепочек (механическая обработка и сборка изделий) и др.

Перечислим некоторые правила построения данного типа блок-схемы и работы с ней:

  1. У элемента допускается не более одной исходящей стрелки. Если у элемента отсутствует исходящая стрелка, то он называется Конечным элементом (это — Босс;)
  2. У элемента допускается несколько входящих стрелок. Если у элемента отсутствует входящая стрелка, то он называется Начальным элементом. Если их 2 и больше, то это — элемент типа Сборка
  3. Каждый элемент должен иметь соединение хотя бы с одним другим элементом
  4. Два элемента могут быть соединены только одной стрелкой
  5. В схеме можно сделать несколько последовательностей не связанных между собой стрелками.
  6. Количество несвязанных между собой последовательностей элементов равно количеству Конечных элементов (следствие Правила №1)
  7. Для анализа схемы все элементы и стрелки именуются по определенному формату (01, 02, . 09, 10, 11), это нужно для работоспособности схемы
  8. Вставляйте элементы и стрелки только с использованием кнопок на листе «Вставить элемент» и Связать 2 элемента»
  9. Не удаляйте элементы по отдельности — это может нарушить работоспособность схемы. Удаляйте схему целиком. Стрелки удалять можно
  10. Стрелки не соединяющие 2 элемента не допускаются (могут возникнуть при удалении 1 элемента)
  11. Элементы на схеме двигать можно, стрелки будут следовать за своим элементом. Если нужно подвинуть стрелку, то двигайте элемент

Для построения схемы на листе создано меню с кнопками управления (см. файл примера ).

Пример построения схемы с нуля

  1. Выделите ячейку на листе куда нужно поставить элемент
  2. Нажмите кнопку Вставить элемент схемы. Элемент (прямоугольник с номером 01) появится на листе
  3. Вставьте еще 1 элемент повторив шаг 1 и 2. На листе появится элемент с номером 02
  4. Выделите сначала элемент 01, затем, удерживая CTRL или SHIFT, выделите элемент 02 (последовательность выделения элементов важна для направления стрелки)
  5. Нажмите кнопку Связать 2 элемента, появится стрелка соединяющая элемент 01 с 02. Элементы можно перемещать, стрелка будет перемещаться вместе с элементами

Так выглядит схема с 2-мя независимыми последовательностями

Анализ данных блок-схемы

Построим следующую схему:

После построения блок-схемы нажмите кнопку Анализ схемы — заполнится таблица. Результаты анализа схемы приведены ниже.

Так как предшественников у каждого элемента может быть несколько, то их номера выведены в одной ячейке — в тектовой строке. Чтобы расшифровать ее используйте функцию ПСТР(). Например, формула =ПСТР(N33;3;2) выведет второго предшественника элемента 03 (или 3), т.е. элемент 02 (дополнительный ноль перед номером у элементов от 1 до 9 упрощает анализ этой строки).

Информацию из этой таблицы можно передавать в качестве исходных данных в программу, которая моделирует, например, производственный процесс (элементы представляют собой разное оборудование). К примеру, исходный материал в данной схеме должен подаваться на оборудование 01 и 04, а конечный продукт изготавливается оборудованием под номером 06. Программе также будет понятно на какое оборудование передавать материал на следующем шаге. Элементам можно присвоить характеристики (производительность, уровень брака, вероятность простоя).

С помощью данных, указанных в таблице, и простейших формул можно много узнать о схеме.

Также можно определить количество уровней иерархии в схеме или максимальную длину последовательности элементов, что фактически то же самое.

Как это реализовано?

Построение схемы (вставка элементов, их нумерация, связь элементов стрелками) реализовано с помощью процедур VBA.

Анализ схемы и заполнение таблицы — также нескоолько строк программного кода.

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

Источник

РЕАЛИЗАЦИЯ АЛГОРИТМОВ С ПОМОЩЬЮ МАКРОСОВ В EXCEL

Цель работы: получить практические навыки разработки функций для реализации линейных, разветвляющихся и простейших циклических алгоритмов с помощью макросов в Excel.

Теоретические сведения

Реализация линейных и разветвляющихся алгоритмов

В Visual Basic for Application для задания значения переменной используется оператор присваивания. Этот оператор имеет следующий вид:

Выражение может быть арифметическим, текстовым или логическим.

Для записи выражений используются арифметические, текстовые и логические операции (операторы).

Арифметические операторы служат для выполнения арифметических действий над числами (таблица 16.1).

Таблица 16.1 ‑ Арифметические операторы

Арифметический оператор Действие Пример
+ (знак плюс) Сложение 3+3
– (знак минус) Вычитание Унарный минус 3–1 –1
* (звездочка) Умножение 3*3
/ (косая черта) (обратная черта) Деление Целочисленное деление 5/8 (результат 0.625) 58 (результат 0)
% (знак процента) Процент 20%
^ (крышка) Возведение в степень 3^2 (аналогично 3*3)

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

Для записи разветвляющихсяалгоритмов используется оператор If(Если), который имеет две формы записи.

1. Однострочная запись:

Ifусловие Then [оператор]

If условие Then [оператор 1] [Elseоператор 2]

2. Многострочная запись:

If условие Then

End If

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

После имени конструкции If должно следовать логическое выражение, содержащее условие. Для создания сложных условий используются логические операции And (И) и Or (Или). В качестве условия могут выступать следующие логические выражения: сравнение переменной с другой переменной, константой или функцией; любая переменная; выражение; поле базы данных; функция, принимающие значения True (Истина) или False (Ложь).

Конструкция IfThen (Тогда)Else (Также)аналогична конструкции If. Then, но позволяет задать действия, исполняемые как при выполнении условий, так и в случае их невыполнения.

Команда Ifможет проверить только одно условие. Если требуется осуществить переход управления в зависимости от результатов проверки нескольких условий, то дополнительное условие можно задать с помощью оператора Else If (Также Если). Оно будет анализироваться только в том случае, если предыдущее условие ложно.

Ключевое слово End If обозначает конец многострочной конструкции и его наличие в команде в этом случае обязательно. Если указанное условие выполняется, то есть результат проверки равен True (Истина), то выполняются операторы, следующие за ключевым словом Then. Если условие не выполняется, то Visual Basic переходит к выполнению операторов, следующих за указанным оператором.

В качестве примера приведем функцию определения корней квадратного уравнения:

Function Корни(a, b, c)

d = b ^ 2 — 4 * a * c

x1 = (-b + d ^ (1 / 2)) / (2 * a)

x2 = (-b — d ^ (1 / 2)) / (2 * a)

Корни = «x1=» + str(x1) + «; x2=» + str(x2)

Корни = «корней нет»

Конструкция Select Сase позволяет обрабатывать в программе несколько условий и аналогична блоку конструкций IfThenElse. Эта конструкция состоит из анализируемого выражения и набора операторов Case (в случае) на каждое возможное значение выражения. Работает эта конструкция следующим образом. Сначала вычисляется значение заданного в конструкции выражения. Затем полученное значение сравнивается со значениями, задаваемыми в операторах Сase конструкции. Если найдено искомое значение, выполняются команды, приписанные данному оператору Case. После завершения выполнения конструкций управление будет передано конструкции, следующей за ключевым словом End Select. Запись конструкции Select Case следующая:

Select Case сравниваемое значение

CASE значение 1

CASE значение 2

End Select

В начале конструкции расположены ключевые слова Select Case, указывающие, что расположенный рядом с ними параметр “сравниваемое значение” будет проверяться на несколько значений. Далее следуют группы команд, начинающиеся с ключевого слова Case. Если параметр “сравниваемое значение” равен значению, указанному в текущем операторе Case, то будут выполняться команды, расположенные между этим и следующим ключевым словом Case.

В качестве примера воспользуемся конструкцией Select Case для выбора удельного активного сопротивления и расчета полного активного сопротивления R в зависимости от заданной марки провода воздушной линии электропередачи:

Источник

Реализация алгоритмов в электронных таблицах

Реализацию алгоритма вычислительной задачи в электронных таблицах Excel возможно, так как они выполняют необходимые требования, предъявляемые к среде реализации алгоритма [Глущенко Ю. В. Обоснование использования языка программирования в учебном процессе (в печати)].

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

  1. Составление спецификаций переменных заданного алгоритма в виде таблицы, в столбцах которой будут Имя переменной в алгоритме, назначение, тип, диапазон, адрес в Excel, вид реализации.
  2. Разработка таблиц ВводаИнформации.
  3. Разработка таблицы подзадачи ОбработкаИнформации.
  4. Разработка таблицы ВыводаРезультата.
  5. Тестирование построенных таблиц.

Линейные алгоритмы

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  1. Ввести значения сторон треугольника а, в, с.
  2. Вычислить значение полупериметра р = (а+в+с)/2
  3. Вычислить площадь треугольника S=(p*(p-а)*(р-в)*(р-с)).
  4. Вывести значение S.

Реализовать вычисления по заданному алгоритму в Excel.

1. Спецификация переменных исходного алгоритма:

Имя перем. в алгоритме

Назначение

Диапазон

Вид реализации

Переменные входного потока 1 А Сторона тр-ка Вещ 0, + B3 2 В Сторона тр-ка Вещ 0, + B4 3 С Сторона тр-ка Вещ 0, + В5

Переменные блока обработки информации 4 Р полупериметр Вещ 0, + Е3 5 S Площадь тр-ка Вещ 0, + Е4

Переменные выходного потока. 6 S Площадь тр-ка Вещ 0, + Н3

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать значения переменных входного потока. Ее реализация показана на Рис. 1.

3. Разработка таблицы подзадачи ОбработкаИнформации

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

4. Разработка таблицы ВыводаРезультатов

Таблица ВыводаРезультатов должна содержать значения переменных выходного потока. Ее реализация показана на Рис. 1.

5. Тестирование разработанных таблиц

Для тестирования полученных таблиц строим таблицу теста по следующему шаблону:

№ п/п. Имя Назначение Значение/результат
1 А Входной поток 1 3 1
2 В 1 4 1
3 С 4 5 2
4 Р Промежуточные 3 6 2
5 S Выходной поток Ошибка 6 0

Задачи для самостоятельной работы можно найти в Приложении 1.

Алгоритм ветвления

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  1. Ввести значение переменной Х.
  2. ЕСЛИ Х не больше 0, ТО Y:=Х*Х, ИНАЧЕ Y:=Х+1.
  3. Вывести значение переменной Y.

Реализовать вычисления по заданному алгоритму в Excel.

1. Спецификация переменных исходного алгоритма:

№ п/п. Имя переменной в алгоритме. Назна-чение Тип Диа-пазон Адрес Реализация
Переменные входного потока
1 Х Входной поток вещ ± B3
Переменные блока обработки информации
2 Y вычисление вещ ± Е3
Переменные выходного потока.
2 Y Выходной поток вещ ± Е3

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать значения переменных входного потока. В нашем случае значение X. Ее реализация показана на Рис. 2.

3, 4. Разработка таблицы подзадачи ОбработкаИнформации.

В данной задаче можно (и нужно) объединить задачи ОбработкиИнфориации и ВыводаРезультатов, построив только таблицу ВыводаРезультатов. Ее реализация показана на Рис. 2.

5. Тестирование разработанной таблицы.

Для тестирования полученной таблицы необходимо взять минимум три значения Х:

  • слева от ветвления,
  • в точке ветвления,
  • справа от точки ветвления.

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

Имя переменной ЗНАЧЕНИЕ/РЕЗУЛЬТАТ
Слева от точки ветвления В точке ветвления Справа от точки ветвления
X -5 0 2
Y 25 0 3

Задачи для самостоятельной работы можно найти в Приложении 2.

Циклические алгоритмы

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  • Ввести значение целочисленной переменной 1 I то идти на п.4
  • Вывести значение S <Вывод результата>.

Реализовать вычисления по заданному алгоритму в Excel.

1. Спецификация переменных исходного алгоритма:

№ п/п. Имя переменной в алгоритме. Назначение Тип Диапазон Адрес Реализация
Переменные входного потока
1 N ПВхП ц 1..10 B3
Индекс цикла
1 i индекс ц 1..N А10:A50
5 S ПВхдП ц
Переменные выходного потока.
5 S ПВхдП ц

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать значения переменных входного потока. В нашем случае значение N. Ее реализация показана на Рис. 3.

3. Разработка таблицы подзадачи ОбработкаИнформации

Реализация обработки информации возможна лишь с использованием циклического алгоритма.
В случае с Excel данную задачу необходимо разбить на три:

  • Построение столбца индексов цикла.
  • Построение столбца элементов массива.

ЗАДАЧА №1 ПОСТРОЕНИЕ СТОЛБЦА ИНДЕКСА ЦИКЛА.

Данную задачу сформулируем в виде:

Построить столбец значений индекса цикла в интервале [1..N (задано)]. При этом с изменением значения N в ячейке В3 должно изменяться и количество значений индекса цикла в расчетной таблице.
Эта задача решается в столбце А начиная со строки №10.

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

ПЕРВАЯ ЗАДАЧА РЕШЕНА

ЗАДАЧА №2. ПОСТРОЕНИЕ СТОЛБЦА ЭЛЕМЕНТОВ ЦИКЛА.

Здесь под элементом цикла будем понимать текущее значение S, зависящее от значения индекса цикла.
Сформулируем задачу в следующем виде:
Для каждого значения индекса цикла определить текущее значение S.
Столбец В дает нам текущие значения S=f( ), при этом протяжка формулы в столбце В должна быть не меньше протяжки в столбце А.

ВТОРАЯ ЗАДАЧА РЕШЕНА.

4. Разработка таблицы подзадачи ВыводРезультатов

Для решения данной задачи следует понять, что выходным значением S будет наибольшее из значений в ячейках В [10…]. Конечное значение интервала в В определяется протяжкой формул в задачах №№1, 2. Пусть формулы протянули до строки №50. Естественно, наибольшим S будет для наибольшего значения индекса цикла, так как на каждом шаге прибавляется число большее 1.
Следовательно, в ячейку Е3 необходимо ввести формулу

И если помнить, что значение пустой ячейки Excel воспринимает как «0», то…

ТРЕТЬЯ ЗАДАЧА РЕШЕНА.

5. Тестирование полученных таблиц

Для тестирования полученной таблицы строим таблицу теста по следующему шаблону:

№ п/п. Имя назначение Значение/результат
1 N Вход 1 5 7 9 10
2 S Выход 1 15 28 45 55

Задачи для самостоятельной работы можно найти в Приложении 3.

Источник

Реализацию алгоритма вычислительной задачи в
электронных таблицах Excel возможно, так как они
выполняют необходимые требования, предъявляемые
к среде реализации алгоритма [Глущенко Ю. В.
Обоснование использования языка
программирования в учебном процессе (в печати)].

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

  1. Составление спецификаций переменных заданного
    алгоритма в виде таблицы, в столбцах которой
    будут Имя переменной в алгоритме, назначение,
    тип, диапазон, адрес в Excel, вид реализации.
  2. Разработка таблиц ВводаИнформации.
  3. Разработка таблицы подзадачи
    ОбработкаИнформации.
  4. Разработка таблицы ВыводаРезультата.
  5. Тестирование построенных таблиц.

Линейные алгоритмы

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  1. Ввести значения сторон треугольника а, в, с.
  2. Вычислить значение полупериметра р = (а+в+с)/2
  3. Вычислить площадь треугольника S=(p*(p-а)*(р-в)*(р-с)).
  4. Вывести значение S.

КОНЕЦ_АЛГОРИТМА

Реализовать вычисления по заданному алгоритму
в Excel.

РЕШЕНИЕ.

1. Спецификация переменных исходного
алгоритма:

№ п/п.

Имя перем. в алгоритме

Назначение

Тип

Диапазон

Адрес

Вид реализации

Переменные входного потока

1 А Сторона тр-ка Вещ 0, + B3 <число>
2 В Сторона тр-ка Вещ 0, + B4 <число>
3 С Сторона тр-ка Вещ 0, + В5 <число>

Переменные блока
обработки информации

4 Р полупериметр Вещ 0, + Е3 <формула>
5 S Площадь тр-ка Вещ 0, + Е4 <формула>

Переменные выходного
потока.

6 S Площадь тр-ка Вещ 0, + Н3 <формула>

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать
значения переменных входного потока. Ее
реализация показана на Рис. 1.

3. Разработка таблицы подзадачи
ОбработкаИнформации

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

4. Разработка таблицы ВыводаРезультатов

Таблица ВыводаРезультатов должна содержать
значения переменных выходного потока. Ее
реализация показана на Рис. 1.

5. Тестирование разработанных таблиц

Для тестирования полученных таблиц строим
таблицу теста по следующему шаблону:

№ п/п. Имя Назначение Значение/результат
1 А Входной поток 1 3 1    
2 В 1 4 1    
3 С 4 5 2    
4 Р Промежуточные 3 6 2    
5 S Выходной поток Ошибка 6 0    

ЗАДАЧА РЕШЕНА.

Задачи для самостоятельной работы можно найти
в Приложении 1.

Алгоритм ветвления

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  1. Ввести значение переменной Х.
  2. ЕСЛИ Х не больше 0,
    ТО          Y:=Х*Х, ИНАЧЕ Y:=Х+1.
  3. Вывести значение переменной Y.

КОНЕЦ_АЛГОРИТМА

Реализовать вычисления по заданному алгоритму
в Excel.

РЕШЕНИЕ.

1. Спецификация переменных исходного
алгоритма
:

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать
значения переменных входного потока. В нашем
случае значение X. Ее реализация показана на Рис. 2.

3, 4. Разработка таблицы подзадачи
ОбработкаИнформации.

В данной задаче можно (и нужно) объединить
задачи ОбработкиИнфориации и ВыводаРезультатов,
построив только таблицу ВыводаРезультатов. Ее
реализация показана на Рис. 2.

5. Тестирование разработанной таблицы.

Для тестирования полученной таблицы
необходимо взять минимум три значения Х:

  • слева от ветвления,
  • в точке ветвления,
  • справа от точки ветвления.

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

Имя переменной ЗНАЧЕНИЕ/РЕЗУЛЬТАТ
Слева от точки ветвления В точке ветвления Справа от точки ветвления
X -5 0 2
Y 25 0 3

ЗАДАЧА РЕШЕНА.

Задачи для самостоятельной работы можно найти
в Приложении 2.

Циклические алгоритмы

ЗАДАЧА. Задан алгоритм в виде:

НАЧАЛО_АЛГОРИТМА

  • Ввести значение целочисленной переменной
    1<=N<=10.
  • S:= 0        {Начальное значение
    сумматора равно нулю}.
  • I:= 0         {Начальное
    значение индекса цикла равно нулю}.
  • I:=I+1      {Текущее значение индекса
    цикла}.
  • S:=S+I    
                                        {накопление
    суммы}.
  • ЕСЛИ N>I то идти на п.4       
    {конец цикла с постусловием}
  • Вывести значение
    S                
    {Вывод результата}.

КОНЕЦ_АЛГОРИТМА

Реализовать вычисления по заданному алгоритму
в Excel.

РЕШЕНИЕ.

1. Спецификация переменных исходного
алгоритма
:

№ п/п. Имя переменной в алгоритме. Назначение Тип Диапазон Адрес Реализация
Переменные входного потока
1 N ПВхП ц 1..10 B3 <число>
Индекс цикла
1 i индекс ц 1..N А10:A50 <массив>
5 S ПВхдП ц <=55 B10:B50 <формула>
Переменные выходного потока.
5 S ПВхдП ц <=55 Е3 <формула>

2. Разработка таблицы ВводаИнформации

Таблица ВводаИнформации должна содержать
значения переменных входного потока. В нашем
случае значение N. Ее реализация показана на Рис. 3.

3. Разработка таблицы подзадачи
ОбработкаИнформации

Реализация обработки информации возможна лишь
с использованием циклического алгоритма.
В случае с Excel данную задачу необходимо разбить
на три:

  • Построение столбца индексов цикла.
  • Построение столбца элементов массива.

ЗАДАЧА №1 ПОСТРОЕНИЕ СТОЛБЦА ИНДЕКСА ЦИКЛА.

Данную задачу сформулируем в виде:

Построить столбец значений индекса цикла в
интервале [1..N (задано)]. При этом с изменением
значения N в ячейке В3 должно изменяться и
количество значений индекса цикла в расчетной
таблице.
Эта задача решается в столбце А начиная со строки
№10.

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

Рис. 3.

ПЕРВАЯ ЗАДАЧА РЕШЕНА

ЗАДАЧА №2. ПОСТРОЕНИЕ СТОЛБЦА ЭЛЕМЕНТОВ ЦИКЛА.

Здесь под элементом цикла будем понимать
текущее значение S, зависящее от значения индекса
цикла.
Сформулируем задачу в следующем виде:
Для каждого значения индекса цикла определить
текущее значение S.
Столбец В дает нам текущие значения S=f(<индекс
цикла>), при этом протяжка формулы в столбце В
должна быть не меньше протяжки в столбце А.

Рис. 3.

ВТОРАЯ ЗАДАЧА РЕШЕНА.

4. Разработка таблицы подзадачи
ВыводРезультатов

Для решения данной задачи следует понять, что
выходным значением S будет наибольшее из
значений в ячейках В [10…]. Конечное значение
интервала в В определяется протяжкой формул в
задачах №№1, 2. Пусть формулы протянули до строки
№50. Естественно, наибольшим S будет для
наибольшего значения индекса цикла, так как на
каждом шаге прибавляется число большее 1.
Следовательно, в ячейку Е3 необходимо ввести
формулу

Е3 =>[=МАКС(b10:b50)]

Рис. 3.

И если помнить, что значение пустой ячейки Excel
воспринимает как «0», то…

ТРЕТЬЯ ЗАДАЧА РЕШЕНА.

5. Тестирование полученных таблиц

Для тестирования полученной таблицы строим
таблицу теста по следующему шаблону:

№ п/п. Имя назначение Значение/результат
1 N Вход 1 5 7 9 10
2 S Выход 1 15 28 45 55

ЗАДАЧА РЕШЕНА.

Задачи для самостоятельной работы можно найти
в Приложении 3.

Время на прочтение
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) — тут скобки нужны постоянно.

#Руководства

  • 23 май 2022

  • 0

Как с помощью макросов автоматизировать рутинные задачи в Excel? Какие команды они выполняют? Как создать макрос новичку? Разбираемся на примере.

Иллюстрация: Meery Mary для Skillbox Media

Ксеня Шестак

Рассказывает просто о сложных вещах из мира бизнеса и управления. До редактуры — пять лет в банке и три — в оценке имущества. Разбирается в Excel, финансах и корпоративной жизни.

Макрос (или макрокоманда) в Excel — алгоритм действий в программе, который объединён в одну команду. С помощью макроса можно выполнить несколько шагов в Excel, нажав на одну кнопку в меню или на сочетание клавиш.

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

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

В статье разберёмся:

  • как работают макросы и как с их помощью избавиться от рутины в Excel;
  • какие способы создания макросов существуют и как подготовиться к их записи;
  • как записать и запустить макрос начинающим пользователям — на примере со скриншотами.

Общий принцип работы макросов такой:

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

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

  • Автоматизировать повторяющиеся процедуры.

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

  • Объединять работу нескольких программ Microsoft Office.

    Например, с помощью одного макроса можно создать таблицу в Excel, вставить и сохранить её в документе Word и затем отправить в письме по Outlook.

  • Искать ячейки с данными и переносить их в другие файлы.

    Этот макрос пригодится, когда нужно найти информацию в нескольких объёмных документах. Макрос самостоятельно отыщет её и принесёт в заданный файл за несколько секунд.

  • Форматировать таблицы и заполнять их текстом.

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

  • Создавать шаблоны для ввода данных.

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

  • Создавать новые функции Excel.

    Если пользователю понадобятся дополнительные функции, которых ещё нет в Excel, он сможет записать их самостоятельно. Все базовые функции Excel — это тоже макросы.

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

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

Есть два способа создания макроса в Excel:

  • Написать макрос вручную.

    Это способ для продвинутых пользователей. Предполагается, что они откроют окно Visual Basic в Еxcel и самостоятельно напишут последовательность действий для макроса в виде кода.

  • Записать макрос с помощью кнопки меню Excel.

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

Разберёмся на примере, как создать макрос с помощью второго способа.

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

Так выглядят таблицы с продажами автосалона в первоначальном виде
Скриншот: Skillbox Media

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


Готовимся к записи макроса

Кнопки для работы с макросами в Excel находятся во вкладке «Разработчик». Эта вкладка по умолчанию скрыта, поэтому для начала разблокируем её.

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

В операционной системе macOS это нужно делать по-другому. В самом верхнем меню нажимаем на вкладку «Excel» и выбираем пункт «Параметры…».

Нажимаем сюда, чтобы вызвать панель с дополнительными параметрами Excel в macOS
Скриншот: Skillbox Media

В появившемся окне нажимаем кнопку «Лента и панель».

Выбираем параметр «Лента и панель»
Скриншот: Skillbox Media

Затем в правой панели «Настроить ленту» ищем пункт «Разработчик» и отмечаем его галочкой. Нажимаем «Сохранить».

Отмечаем пункт «Разработчик» и сохраняем изменения
Скриншот: Skillbox Media

Готово — вкладка «Разработчик» появилась на основной панели Excel.

Теперь можно работать с макросами
Скриншот: Skillbox Media

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

Перед записью макросов нужно сохранить документ в формате с их поддержкой
Скриншот: Skillbox Media

Перед началом записи макроса важно знать об особенностях его работы:

  • Макрос записывает все действия пользователя.

    После старта записи макрос начнёт регистрировать все клики мышки и все нажатия клавиш. Поэтому перед записью последовательности лучше хорошо отработать её, чтобы не добавлять лишних действий и не удлинять код. Если требуется записать длинную последовательность задач — лучше разбить её на несколько коротких и записать несколько макросов.

  • Работу макроса нельзя отменить.

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

  • Макрос выполняет свой алгоритм только для записанного диапазона таблиц.

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

Для начала записи макроса перейдём на вкладку «Разработчик» и нажмём кнопку «Записать макрос».

Нажимаем сюда, чтобы начать запись макроса
Скриншот: Skillbox Media

Появляется окно для заполнения параметров макроса. Нужно заполнить поля: «Имя макроса», «Сохранить в», «Сочетание клавиш», «Описание».

Так выглядит окно с параметрами макроса
Скриншот: Skillbox Media

«Имя макроса» — здесь нужно придумать и ввести название для макроса. Лучше сделать его логически понятным, чтобы в дальнейшем можно было быстро его найти.

Первым символом в названии обязательно должна быть буква. Другие символы могут быть буквами или цифрами. Важно не использовать пробелы в названии — их можно заменить символом подчёркивания.

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

Если выбрать параметр «Эта книга», макрос будет доступен при работе только в этом файле Excel. Чтобы макрос был доступен всегда, нужно выбрать параметр «Личная книга макросов» — Excel создаст личную книгу макросов и сохранит новый макрос в неё.

«Сочетание клавиш» — здесь к уже выбранным двум клавишам (Ctrl + Shift в системе Windows и Option + Cmd в системе macOS) нужно добавить третью клавишу. Это должна быть строчная или прописная буква, которую ещё не используют в других быстрых командах компьютера или программы Excel.

В дальнейшем при нажатии этих трёх клавиш записанный макрос будет запускаться автоматически.

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

В нашем случае с форматированием таблицы заполним поля записи макроса следующим образом и нажмём «ОК».

Заполняем поля и жмём «ОК», чтобы начать запись
Скриншот: Skillbox Media

После этого начнётся запись макроса — в нижнем левом углу окна Excel появится значок записи.

Началась запись макроса — теперь в него попадут все клики мышки и нажатия клавиш
Скриншот: Skillbox Media

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

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

Так макрос будет работать и для таблиц с большим количеством строк
Скриншот: Skillbox Media

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

Так макрос отформатирует только выбранные строки: если в других таблицах строк окажется больше, они останутся в первоначальном виде
Скриншот: Skillbox Media

После всех манипуляций с оформлением таблица примет такой вид:

Так выглядит таблица после форматирования
Скриншот: Skillbox Media

Проверяем, все ли действия с таблицей мы выполнили, и останавливаем запись макроса. Сделать это можно двумя способами:

  • Нажать на кнопку записи в нижнем левом углу.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Остановить запись».

Нажимаем сюда, чтобы остановить запись макроса
Скриншот: Skillbox Media

Готово — мы создали макрос для форматирования таблиц в границах столбцов A–G. Теперь его можно применить к другим таблицам.


Запускаем макрос

Перейдём в лист со второй таблицей «Февраль_2022». В первоначальном виде она такая же нечитаемая, как и первая таблица до форматирования.

Так выглядит таблица до запуска макроса
Скриншот: Skillbox Media

Отформатируем её с помощью записанного макроса. Запустить макрос можно двумя способами:

  • Нажать комбинацию клавиш, которую выбрали при заполнении параметров макроса — в нашем случае Option + Cmd + Ф.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Макросы».

Нажимаем сюда, чтобы вызвать панель для выбора макроса
Скриншот: Skillbox Media

Появляется окно — там выбираем макрос, который нужно запустить. В нашем случае он один — «Форматирование_таблицы». Под ним отображается описание того, какие действия он включает. Нажимаем «Выполнить».

Нажимаем сюда, чтобы запустить макрос для форматирования таблицы
Скриншот: Skillbox Media

Готово — вторая таблица с помощью макроса форматируется так же, как и первая.

За пару секунд с помощью макроса исходная таблица принимает такой вид
Скриншот: Skillbox Media

То же самое можно сделать и на третьем листе для таблицы продаж за март. Более того, этот же макрос можно будет запустить и в следующем квартале, когда сервис автосалона выгрузит таблицы с новыми данными.

Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше

history 28 августа 2022 г.
    Группы статей

  • Приложения
  • Управление проектами

Создадим редактор блок-схем произвольной формы в MS EXCEL. Помимо построения блок-схем редактор должен автоматически (по нажатию кнопки) проводить анализ связей элементов в схеме:

  • подсчитывать количество элементов,
  • присваивать им уникальные номера,
  • определять последователей и предшественников элемента,
  • проводить проверки (наличие связей, отсутствие дублирующих связей, контроль циклов внутри схемы и др.). 

Справедливости ради, нужно отметить, что предложенный в данной статье построитель блок-схем во многом дублирует стандартный инструмент SmartArt (тип Иерархия), который можно создать через меню EXCEL Вставка-Иллюстрации-SmartArt.

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

Примечание:

В статье Автоматический анализ схем SmartArt MS EXCEL показано как считать всю информацию об элементах и их связях с помощью VBA (фактически реализован парсинг — сбор и систематизация информации, parsing).

Построитель произвольных блок-схем

Для редактора блок-схем будем использовать стандартные элементы типа Надпись и Стрелка (меню EXCEL Вставка-Иллюстрации-Фигуры). Каждому элементу блок-схемы (Надпись) программа VBA будет присваивать уникальный номер, что в дальнейшем нам позволит определить связи между элементами (заполнив отдельную таблицу последователей и предшественников каждого элемента). Поскольку мы будем строить блок-схему иерархического типа, то последователь (тот элемент к которому идет стрелка) будет единственным, но если требуется создать схему с произвольными связями, то программу VBA можно легко настроить. Иерархический тип блок-схем подходит для описания организационных систем (начальник должен быть единственным, в идеале), производственных цепочек (механическая обработка и сборка изделий) и др.

Перечислим некоторые правила построения данного типа блок-схемы и работы с ней:

  1. У элемента допускается не более одной исходящей стрелки. Если у элемента отсутствует исходящая стрелка, то он называется Конечным элементом (это — Босс;)
  2. У элемента допускается несколько входящих стрелок. Если у элемента отсутствует входящая стрелка, то он называется Начальным элементом. Если их 2 и больше, то это — элемент типа Сборка
  3. Каждый элемент должен иметь соединение хотя бы с одним другим элементом
  4. Два элемента могут быть соединены только одной стрелкой
  5. В схеме можно сделать несколько последовательностей не связанных между собой стрелками. 
  6. Количество несвязанных между собой последовательностей элементов равно количеству Конечных элементов (следствие Правила №1)
  7. Для анализа схемы все элементы и стрелки именуются по определенному формату (01, 02, … 09, 10, 11), это нужно для работоспособности схемы
  8. Вставляйте элементы и стрелки только с использованием кнопок на листе «Вставить элемент» и Связать 2 элемента»
  9. Не удаляйте элементы по отдельности — это может нарушить работоспособность схемы. Удаляйте схему целиком. Стрелки удалять можно
  10. Стрелки не соединяющие 2 элемента не допускаются (могут возникнуть при удалении 1 элемента)
  11. Элементы на схеме двигать можно, стрелки будут следовать за своим элементом. Если нужно подвинуть стрелку, то двигайте элемент

Для построения схемы на листе создано меню с кнопками управления (см. файл примера).

Пример построения схемы с нуля

  1. Выделите ячейку на листе куда нужно поставить элемент
  2. Нажмите кнопку Вставить элемент схемы. Элемент (прямоугольник с номером 01) появится на листе
  3. Вставьте еще 1 элемент повторив шаг 1 и 2. На листе появится элемент с номером 02
  4. Выделите сначала элемент 01, затем, удерживая CTRL или SHIFT, выделите элемент 02 (последовательность выделения элементов важна для направления стрелки)
  5. Нажмите кнопку Связать 2 элемента, появится стрелка соединяющая элемент 01 с 02. Элементы можно перемещать, стрелка будет перемещаться вместе с элементами

Так выглядит схема с 2-мя независимыми последовательностями

Анализ данных блок-схемы

Построим следующую схему:

После построения блок-схемы нажмите кнопку Анализ схемы — заполнится таблица. Результаты анализа схемы приведены ниже.

Так как предшественников у каждого элемента может быть несколько, то их номера выведены в одной ячейке — в тектовой строке. Чтобы расшифровать ее используйте функцию ПСТР(). Например, формула =ПСТР(N33;3;2) выведет второго предшественника элемента 03 (или 3), т.е. элемент 02 (дополнительный ноль перед номером у элементов от 1 до 9 упрощает анализ этой строки).

Информацию из этой таблицы можно передавать в качестве исходных данных в программу, которая моделирует, например, производственный процесс (элементы представляют собой разное оборудование). К примеру, исходный материал в данной схеме должен подаваться на оборудование 01 и 04, а конечный продукт изготавливается оборудованием под номером 06. Программе также будет понятно на какое оборудование передавать материал на следующем шаге. Элементам можно присвоить характеристики (производительность, уровень брака, вероятность простоя). 

С помощью данных, указанных в таблице, и простейших формул можно много узнать о схеме.

Также можно определить количество уровней иерархии в схеме или максимальную длину последовательности элементов, что фактически то же самое.

Как это реализовано?

Построение схемы (вставка элементов, их нумерация, связь элементов стрелками) реализовано с помощью процедур VBA.

Анализ схемы и заполнение таблицы — также нескоолько строк программного кода.

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

Большинство типовых
вычислительных алгоритмов в Excel оформлены
в виде стандартных функций и вызываются
с помощью программы Мастер функций (см.
подразд. 1.9
). Самые популярные
из них:

  • ЕСЛИ() – позволяет
    предусмотреть разные варианты заполнения
    ячейки;

  • СУММ(), ПРОИЗВЕД()
    – соответственно суммирование и
    перемножение значений из одного или
    нескольких блоков;

  • СУММПРОИЗВ() –
    суммирование произведений соответствующих
    элементов двух или нескольких массивов;

  • СРЗНАЧ(), СРГЕОМ()
    – расчет соответственно среднего
    арифметического и геометрического по
    числам в заданных блоках;

  • СЧЕТ() – определение
    количества чисел в заданном блоке.

Более сложные
алгоритмы оформлены в виде команд и
заказываются через меню Сервис. Наиболее
важные из них:

  • Подбор параметра…
    – нахождение аргумента, при котором
    функция примет нужное значение;

  • Поиск решения…
    – решение систем уравнений и задач
    оптимизации;

  • Пакет анализа –
    содержит программы, необходимые при
    статистической обработке данных.

Если нужная для
вычислений команда отсутствует в меню,
ее можно установить с помощью команды
Сервис Надстройки…

6.1. Общие сведения о функции если()

Функция ЕСЛИ()
позволяет предусмотреть разные способы
заполнения одной и той же ячейки. То,
каким из них следует воспользоваться
в данный момент, Excel определяет
самостоятельно по тому, выполняется
или нет при введенных данных указанное
в функции условие. Стандартный формат
функции имеет следующий вид:

ЕСЛИ(Логическое_выражение;
Значение_если_истина;Значение_если_ложь)

Здесь:

  • Логическое_выражение
    – это условие, которое при одних
    значениях введенных данных выполняется,
    при других – нет;

  • Значение_если_истина
    – алгоритм, по которому определяется
    значение функции, когда условие
    оказывается правильным;

  • Значение_если_ложь
    – алгоритм, по которому определяется
    значение функции, когда условие
    оказывается неправильным.

В роли алгоритмов,
которые выбирает функция ЕСЛИ(), могут
выступать расчетные выражения, другие
функции, ссылки на ячейки, где находится
нужная информация, текстовые строки и
т. п.

Рассмотрим действие
этой функции на конкретных примерах.

6.2. Выбор из двух вариантов по одному условию

Пример

Поставщик ввел
оптовую скидку на цену для больших
партий товара. Надо составить шаблон
для расчета стоимости любой партии
товара.

Составим таблицу
из констант, необходимых для расчета.
В ячейки А1:А4 введем названия констант:
«ОбъемПартии», «ОптБарьер»,
«РознЦена», «ОптЦена». Присвоим
ячейкам В1:В4 такие же имена (удобно
пользоваться командой Вставка

Имя

Создать…
). В ячейку С1 введем
текст «СтоимПартииТовара».

Сделаем активной
ячейку С2 и вызовем через Мастер функций
функцию ЕСЛИ(). В окне аргументов в
текстовые поля введем следующие значения:

  • В поле
    «Логическое_выражение:» вводится
    условие, по которому Excel будет выбирать
    нужный вариант действий. Его можно
    составить так:

ОбъемПартии<=ОптБарьер

  • В поле
    «Значение_если_истина:» указывается
    способ, по которому следует рассчитывать
    функцию, если условие оказалось
    правильным при тех данных, которые
    введены во влияющие ячейки в данный
    момент. Для нашего примера этот аргумент
    выглядит следующим образом:

ОбъемПартии*
РознЦена

  • В поле
    «Значение_если_ложь:» указывается,
    как рассчитывать функцию, если условие
    не выполняется. Для нашего примера
    следует ввести

ОбъемПартии*ОптЦена

Расчетный шаблон
готов. Чтобы проверить его, введите
удобные для устных расчетов числа в
ячейки В1:В4 и проверьте, правильно ли
функция ЕСЛИ() выбрала формулу для
заполнения ячейки С2. Введите в В1 другой
объем партии, при котором требуется
использовать другую цену при расчете
стоимости покупки. Если в обоих случаях
получены верные результаты, можно
красиво отформатировать ячейки А1:С4
(см.
подразд. 1.13–1.16
) и пользоваться
этим шаблоном, меняя только значения
констант в В1:В4.

Пример

В таблице значений
функции y = 2cos(x
+
2)e0,5xнадо отметить символом «*» строку
с минимальным значением.

Введем в ячейки
А1 и В1 подписи «X» и
«Y», в блок А2:А11 –
значения аргументов, в блок В2:В11 –
формулу расчета функции. Столбец С
зарезервируем для заказанной в условии
метки. В ячейкуD1 введем
текст «минимум», в ячейкеD2
с помощью функции МИН() найдем это
значение в блоке В2:В11.

Выделим ячейку С2
и вызовем через Мастер функций функцию
ЕСЛИ(). Условие, по которому Excel выбирает
нужный вариант действий, составим так:
В2=$D$2. В строку второго
аргумента вводим символ «*» (без
кавычек), в третий – пробел и нажмем
после этого <ОК>. С помощью протяжки
скопируем полученную формулу на блок
С2:С11.

Задание

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

Рассмотрим функцию
ЕСЛИ() в той строке, в которой появилась
«*». Значение функции y
в этой строке минимально. Левая и
правая части условия оказались
одинаковыми, т. е. первый аргумент –
правильный. Поэтому для заполнения
своей ячейки функция ЕСЛИ выбрала то,
что указано во втором аргументе. Для
значений функцииув других строках
условие, введенное в функцию ЕСЛИ(),
оказывается неверным, поэтому она
заполняет свои ячейки по варианту
третьего аргумента. В нашем случае это
пробел, который невидим на экране,
поэтому ячейки кажутся пустыми.

Измените аргументы,
введенные в А2:А11. «*» переместилась
в другую строку, хотя формулы в С2:С11 не
были изменены (после изменения данных
каждая функция ЕСЛИ() автоматически
проверила свой первый аргумент заново
и приняла новое управляющее решение,
каким правилом пользоваться для
заполнения своей ячейки).

Задание

В ячейку А1 введите
формулу:

=ЕСЛИ(С3=37;»СЕНО»;»СОЛОМА»)

Определите влияющую
ячейку (команда
Сервис

Зависимости

Влияющие ячейки
) и введите в
нее такое число, при котором СОЛОМА
превратится в СЕНО.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Как написать word на python
  • Как написать sin в квадрате в excel
  • Как написать cos в excel
  • Как написать and в excel
  • Как написать 001 в excel