Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
00001 коррУчПособ_Excel(ПЗ1_10) вар1_15.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
1.47 Mб
Скачать

Обработка данных табличными формулами.

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

Для группирования записей по счетам на листе ОбщИтоги в ячейку D4 (см.рисунок ниже) можно ввести следующую формулу:

=СУММЕСЛИ(ЖурналОпер!$D$4:$D$100;C24;ЖурналОпер!$E$4:$E$100)

В этой формуле в исходном диапазоне $D$4:$D$100 листа ЖурнОпер осуществляется отбор в соответствии с условием, записанным в ячейке С24 (там указан номер счета 10). Для строк, содержащих такой номер счета, значения суммируются.

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

В этом практическом занятии для итоговых расчетов будут использоваться формулы массива (табличные формулы).

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

=СУММ(ЕСЛИ(ЖурналОпер!$D$4:$D$100=ОбщИтоги!$C4;1;0)*ЖурналОпер!$E$4:$E$100)

где: ЖурналОпер – имя листа, на котором расположена таблица 1;

ОбщИтоги – имя листа, на котором расположена таблица итогов (табл.2).

Для группирования записей по доходам в таблице 2 в ячейку Е4 (см.рисунок ниже) должна быть введена следующая табличная формула:

=СУММ(ЕСЛИ(ЖурналОпер!$D$4:$D$100=ОбщИтоги!$C4;1;0)*ЖурналОпер!$F$4:$F$100).

Обе указанные формулы следует вводить как табличные формулы или формулы массива: для этого после набора формулы нажимается сочетание клавиш <Ctrl+Shift+Enter>, при этом формула в ячейке будет заключена в фигурные скобки (смотри рисунок, строка формул). Нельзя вводить фигурные скобки с клавиатуры – в этом случае Excel воспринимает формулу как текст.

После ввода формул массива в ячейки D4 и E4 они (формулы) размножаются вниз на все строки, в которых указаны номера счетов (на рисунке – до 11 строки).

Формула массива выполняет следующие процедуры для ячейки D4, в которой регистрируется значение расходов для номера счета 10:

- в логическом условии функции ЕСЛИ() сравнивается текущий номер счета с номером счета в столбце D на листе учета текущих операций (ЖурналОпер), если они совпадают, на выходе функции будет значение 1, а если не совпадают – на выходе будет 0;

- полученный результат функции ЕСЛИ (0 или 1) умножается на соответствующее значение в столбце E листа ЖурналОпер;

- указанные действия суммируются для всего диапазона указанных ячеек и остаются в D4.

Аналогичные результаты получаются для других ячеек столбца Расход.

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

Учет данных за каждый месяц иллюстрируется следующим рисунком.

В ячейку F4 вводится похожая формула:

=СУММ(ЕСЛИ(МЕСЯЦ(ЖурналОпер!$B$4:$B$100)=МЕСЯЦ($B$4);1;0)*

ЕСЛИ(ЖурналОпер!$D$4:$D$100=январь!$D4;1;0)*ЖурналОпер!$F$4:$F$100),

которая вводится как табличная формула сочетанием клавиш <Ctrl+Shift+Enter>.

После ввода формулы из ячеек E4 и F4 размножаются вниз.

Данные формулы выполняют уже больше процедур:

- сравнивают месяц каждой даты столбца В листа ЖурналОпер со значением месяца в ячейке В4 текущего листа;

- сравнивают номер счета на листе ЖурналОпер с номером счета в ячейке текущего листа;

- умножают получаемые значения нулей или единиц на соответствующую запись в столбце E или F листа ЖурналОпер.

Представление даты 01.01.2009 в ячейке В4 в виде имени месяца производится путем задания соответствующего формата данной ячейки из перечня форматов для Даты (только название месяца).

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

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

В формулах зарезервирован диапазон фиксируемых журнале операций данных до сотой строки (например, $B$4:$B$100). Этот диапазон можно расширить (например, до десятитысячной строки) и указать в табличных формулах.

Приложение к ПЗ – исходные данные для расчетов

Журнал регистрации хозяйственных операций

Дата

Счет (содержание операции)

Номер Счета

Расход

Приход

10.01.09

Расчеты с поставщ. и подрядчиками

60

3100

 

11.01.09

Расчетные счета

51

7800

 

12.01.09

Расчетные счета

51

 

50000

17.01.09

Расходы будущих периодов

97

 

2000

18.01.09

Расчеты с подотчетными лицами

71

600

 

19.01.09

Расчеты с поставщ. и подрядчиками

60

3600

 

21.01.09

Материалы

10

3000

 

25.01.09

Касса

50

5000

 

27.01.09

Материалы

10

2500

 

01.02.09

Материалы

10

2000

 

04.02.09

Материалы

10

3500

 

04.02.09

НДС

19

4000

 

04.02.09

Материалы

10

20000

 

07.02.09

Расчеты с поставщ. и подрядчиками

60

2300

 

10.02.09

Расчеты с поставщ. и подрядчиками

60

4800

 

11.02.09

Расчеты с подотчетными лицами

71

400

 

17.02.09

Материалы (полуфабрикаты)

10

 

7000

20.02.09

Касса (получено)

50

 

4000

21.02.09

Налог

68

1600

 

22.02.09

Налог

68

3400

 

01.03.09

Материалы

10

1200

 

03.03.09

Расчетные счета

51

 

10000

11.03.09

Касса (расчет)

50

4200

 

15.03.09

Расчеты с поставщ. и подрядчиками

60

3300

 

17.03.09

Расчетные счета

51

 

5000

20.03.09

Касса (расчет)

50

1700

 

26.03.09

Расчет по зарплате Соловьева М.М.

50

4500

 

29.03.09

Возврат ссуды от Климова А.Р.

50

 

12000

02.04.09

Материалы (полуфабрикаты)

10

 

9000

07.04.09

Расчеты с поставщ. и подрядчиками

60

3700

 

14.04.09

Материалы

10

1200

 

15.04.09

Расчеты с поставщ. и подрядчиками

60

2800

 

22.04.09

Получена задолженность

50

 

5900

27.04.09

Касса (расчет)

50

1700

 

28.04.09

Расчеты с подотчетными лицами

71

400

 

29.04.09

Расчетные счета

51

 

5000

05.05.09

Расчеты с поставщ. и подрядчиками

60

 

13800

12.05.09

Материалы

10

3500

 

13.05.09

Налог

68

3400

 

18.05.09

Налог

68

1600

 

19.05.09

Получена задолженность

50

 

9000

21.05.09

Расчеты с подотчетными лицами

71

600

 

26.05.09

Касса (расчет)

50

3700

 

27.05.09

Расчеты с поставщ. и подрядчиками

60

2200

 

28.05.09

Материалы

10

5400

 

ПЗ-9. Использование VBA для разработки модулей программ (массивы).

Решим несложную задачу розыгрыша одномерных случайных массивов с использованием редактора Visual Basic Excel. Окно этой прикладной программы можно вызвать несколькими способами:

1) вкладка Разработчик- Visual Basic;

2) сочетание клавиш Alt-F11, (повторное сочетание возвратит нас в окно Excel);

3 ) щелчок правой кнопкой мыши (ПКМ) по корешку листа, пункт Исходный текст.

Экран редактора разбит на три части. Справа одно большое окно кода. Здесь будем писать программу на VBA. Слева вверху "Project - VBAProject" - Окно проекта. Это окно, в котором выбираем расположение того кода, который будем писать (если вы его закроете, вновь открыть можно, нажав Ctrl+R). В этом окошке находится папка "Microsoft Excel Objects", а в ней список листов книги и ниже сама книга (ЭтаКнига). Каждый лист, а также сама книга Excel считается отдельным объектом. Нажатие двойным кликом на любом из них открываем окно кода для этого объекта. Увидеть, чье окно кода открыто, можно, посмотрев на заголовок редактора кода (UserForm - на рисунке), или на список элементов (активный подсвечен).

Есть особенность: код, написанный в окне конкретного объекта (листа или книги), доступен только этому объекту. Чтобы писать универсальный код (макрос), который можно применять без привязки к документу, нужно создать Модуль. (Мы создавали макрос Возврат, применяемый на любом листе книги, в отдельном модуле, создаваемом автоматически при написании макроса).

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

Есть еще одно окно - это Окно отладчика (Immediate). Как правило, оно закрыто. Открыть его можно, нажав Ctrl+G (или найти в меню View). Оно расположено по умолчанию под окном кода.

Модуль. Создание. В окне проекта (VBA Project(аКнигаСодержание…)) или в папке "Modules" нажимаем ПКМ, выбираем Insert/ Module. Видим, что появилась новая "папочка" "Modules" и в ней новый документ "Module1" (если папка была, то появится только очередной экземпляр модуля).

Сразу переименуем его в "Module_Form1mer". Для этого становимся курсором в окне проекта на Module1. Ниже, в окне свойств, видим всего одну строчку: надпись "(Name)" и правее "Module1". Изменяем эту надпись на указанную, нажимаем Enter. Видим, что модуль везде поменял название.

В поле кода запишем заголовок программки (процедуры), это имя будет именем макроса. Нажмем Enter и внутри заготовки напишем строку команды для открытия (Show) формы:

Sub massiv1mern()

Form1merMassiv.Show

End Sub Саму форму Form1merMassiv нам предстоит еще создать.

Форма. В окне проекта (VBA Project(аКнигаСодержание…)) нажимаем ПКМ, выбираем Insert/UserForm. Сразу же меняем ее имя в окне свойств (рис.выше). Затем свойство Caption меняем на надпись «Одномерный массив из 10 случ.чисел» В этой форме разместим (нарисуем) элементы управления: текстовый бокс и 2 командные кнопки, эти элементы находятся в окошке Toolbox, которое появляется при активизации формы (см.рисунок ниже, кружочком выделено текстовое поле). Меняем свойства Caption кнопок, как показано на рисунке, имена оставляем по умолчанию.

Процедуры (подпрограммы, командные коды).

Щелкаем 2 раза ЛКМ по второй кнопке, в окне кода появляется заготовка процедуры щелчка (Click) кнопкой, где мы набираем команду скрытия формы и очистку текстового поля:

Private Sub CommandButton2_Click()

Form1merMassiv.Hide

TextBox1 = ""

End Sub

Щелкаем 2 раза ЛКМ по первой кнопке и пишем программу (блок команд):

Option Explicit 'оператор проверки объявлений используемых переменных

Private Sub CommandButton1_Click()

Dim M(1 To 10) As Integer ‘Объявление массива целых чисел

Dim N(1 To 10) As Single ‘Объявление массива дробных чисел

Dim i%, k% ‘Объявление переменных в виде целых чисел

TextBox1 = "" ‘Очистка текстового бокса перед новым массивом

Randomize 'оператор, который запускает начальное значение случайных чисел

Debug.Print "массив M(i) от 0 до 100" 'Заголовок массива

For i = 1 To 10 'цикл от 1 до 10

M(i) = Rnd() * 100 'генерирование случайного числа

Debug.Print M(i); ' так будет печать в одной строке, напр.: 74 38 37 12 37 2 9 24 45 75

' если ; (точку с запятой) не поставить, будет печать чисел в столбик!!!!

' ниже печать чисел в текстовом окне формы в виде нарастающего итога

TextBox1 = TextBox1 + CStr(M(i)) + " " ' пробел для раздела чисел

Next i

Debug.Print 'пустая строка

Debug.Print "массив N(k) от -1 до 1" 'Заголовок массива

For k = 1 To 10

N(k) = (Rnd() * 2) - 1

Debug.Print N(k) ' будет печать в столбик!!!!

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

Next k

MsgBox "Оба массива в окне отладки!!!"

End Sub

Все готово.

Э ту программу можно запустить на исполнение прямо из окна VB, нажав кнопку Run Sub (рис.слева).

Результат можно посмотреть в окне отладки, который вызывается из меню View VB или сочетанием Ctrl+G.

Но сделаем доработку.

На титульном листе через Разработчик вставляем элемент управления формы Кнопка. [Если вкладки Разработчик нет, активизируем ее: Файл  Параметры Excel  «птичка» в квадратике Разработчик]. В появившемся окне Назначение макроса щелкаем по подпрограмме (макросу) massiv1mern. Тем самым присваиваем его кнопке, меняем ее название на «Построить одномерные массивы». Щелкаем по этой кнопке. Появляется форма. Щелкаем по кнопке «Заполнить два 1-мерных массива» на форме. Один массив появляется в текстовом окне, а второй (вместе с первым) находится в окне отладки в редакторе Visual Basic:

массив M(i) от 0 до 100

1 43 42 17 49 74 56 86 37 52

массив N(k) от -1 до 1

-0,6241974

-0,4315228

-0,283106

0,9673221

0,5040017

0,9050713

0,0435375

-0,5218856

0,999457

-0,1647906

Окно отладки Immediate вызывается (см.выше).

Итак, мы разработали программы обработки событий (нажатие кнопки). Кроме того, применили макрос с одной командой для открытия формы.

Давайте разберем приведенный выше в качестве примера макрос (процедуру) massiv1mern.

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.

  • Любой макрос должен заканчиваться оператором End Sub.

  • Все, что находится между Sub и End Sub - тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос открывает форму. Можно в событие открытия поместить и другие команды, например, вывести окно сообщения (MsgBox) с приглашением разыграть массивы элементов.

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

[Мы уже использовали этот способ при создании кнопок открытия листов книги в ПЗ-4.]

Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем выполнять какие-либо действия (построение прогрессии, например), то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим подробную программу (процедуру).

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

У такого способа есть свои плюсы и минусы:

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается. Более того, он не понимает команды, которые вы будете давать с командной строки (например, открыть другой документ).

  • М акрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Нельзя написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например, или что-то подобное).

  • Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако можно давить на (кривую) кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возвратит действия в предыдущее состояние, но и стирает последнюю записанную команду в коде VBA.

Чтобы начать запись, необходимо нажать кнопку Запись макроса на вкладке Разработчик (стр.23), а затем настроить параметры записываемого макроса в окне Запись макроса (там же). Записав необходимые действия, надо нажать кнопку окончания записи.

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы на вкладке Разработчик, или сочетанием клавиш Alt+F8.

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить.

  • Кнопка Параметры позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.

  • Кнопка Изменить открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

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

В качестве дополнительного задания для конструирования объектов с помощью VBA ниже приведена распечатка программы ZadanieAAA() моделирования двумерного массива случайных целых чисел. Для нее можно создать форму с текстовым полем, куда (дополнительно к распечатанной программе) отправлять получаемые результаты обработки массива (суммы строк и столбцов, …), как это было сделано выше в одномерном массиве. Либо ограничиться просмотром результата программы в окне Immediate.

=========================================================================

Option Explicit

Sub ZadanieААА() 'Розыгрыш и обработка двумерного массива целых чисел

Dim A(4, 3) As Integer 'Объявление двумерного массива целых чисел

Dim i%, j%, Sctr%, Sstolb%, Sum%, kol%, diag%,diagTop%, diagDown% 'Объявление переменных типа Integer

Debug.Print "=================Элементы массива (матрицы)"

Randomize 'оператор, который запускает начальное значение случайных чисел

'РОЗЫГРЫШ И ПЕЧАТЬ МАССИВА

For i = 1 To 4

For j = 1 To 3

A(i, j) = Rnd * 20 – 10 'целые числа от -10 до 10

Debug.Print A(i, j); 'печать всех элементов строки массива в одной строке

'если не поставить знак « ;» - точка с запятой -, то печать элементов массива будет в столбик. !!!

Next j

Debug.Print 'переход на новую строку для печати очередной строки массива

Next i

Debug.Print "======================="

'СУММИРОВАНИЕ СТРОК МАССИВА

For i = 1 To 4 'от первой до четвертой строки по всем строкам

S ctr =0 'обнуление суммы очередной (i-той) строки

For j = 1 To 3 'проход по всем элементам текущей строки

Sctr = Sctr + A(i, j) 'и суммирование этих элементов

Next j

Debug.Print "сумма "; i; "-й строки= "; Sctr 'печать суммы очередной (i-той) строки

Next i

Debug.Print "======================="

'СУММИРОВАНИЕ НЕЧЕТНЫХ СТОЛБЦОВ МАССИВА

For j = 1 To 3 Step 2 'только нечетные столбцы!!!!

Sstolb = 0 'обнуление суммы столбца

F or i = 1 To 4 'проход по всем элементам текущего (нечетного) столбца

Sstolb = Sstolb + A(i, j) 'и суммирование этих элементов

Next i

Debug.Print "сумма "; j; "-го столбца = "; Sstolb

Next j

Debug.Print "======================="

Sum = 0: kol = 0: diag = 0: diagTop = 0: diagDown = 0 'обнуление вычисляемых переменных

For i = 1 To 4

For j = 1 To 3

Sum = Sum + A(i, j) 'суммирование ВСЕХ ЭЛЕМЕНТОВ массива

If A(i, j) >0 Then kol=kol+1 'суммирование КОЛИЧЕСТВА ПОЛОЖИТЕЛЬНЫХ чисел массива

If i = j Then diag = diag + A(i, j) 'суммирование элементов ГЛАВНОЙ ДИАГОНАЛИ массива

If j > i Then diagTop = diagTop + A(i, j) 'сумма над гл.диагональю

If i > j Then diagDown = diagDown + A(i, j) 'сумма под гл.диагональю

Next j

Next i

Debug.Print "общая сумма = "; Sum; " положительных чисел = "; kol

Debug.Print "сумма главной диагонали массива = "; diag

Debug.Print "сумма над гл.диагональю = "; diagTop

Debug.Print "сумма под гл.диагональю = "; diagDown

MsgBox "Результат в окне отладки модуля (Immediate)"

End Sub

Вот что должно быть в окне отладки:

============Элементы массива (матрицы)

6 -7 -3

2 7 8

1 6 -9

-5 8 2

=======================

сумма 1 -й строки= -4

сумма 2 -й строки= 17

сумма 3 -й строки= -2

сумма 4 -й строки= 5

=======================

сумма 1 -го столбца = 4

сумма 3 -го столбца = -2

=======================

общая сумма = 16 положительных чисел = 8

сумма главной диагонали массива = 4

сумма над гл.диагональю = -2

сумма под гл.диагональю = 14

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

ПЗ-10. Использование макросов и модулей VBA для других задач.

Создадим новый лист Модули. Напишем макрос для заполнения столбца F листа геометрической прогрессией. Вызы­ваем вкладкой Разработчик кнопку Начать запись, в окне Запись макроса задаем имя ГеомПрогр, нажимаем ОК и дальше выполняем действия для построения прогрессии: в ячейку F1 вводим число 2, нажимаем зеленую галочку, вызываем окно Прогрессия, в нем выбираем пункты: по столбцам, геометрическая, шаг 2, предельное значе­ние 100000, кнопка ОК, прекращаем запись макроса.

Наносим кнопку из панели Элементы управления формы (РазработчикВставить) на лист и назначаем ей макрос ГеомПрогр, на кнопке пишем название: "Постро­ить геометрическую прогрессию".

Сразу же напишем макрос очистки столбца F: вызовем окно записи, присвоим имя Очистка, нажмем ОК и выделим диапазон F1:F20, нажмем кнопку Delete, щелкнем по ячейке G4, прекратим запись макроса. Нанесем новую кнопку рядом с кнопкой построения прогрессии, присвоим ей макрос Очистка, изменим надпись кнопки: "Очистить столбец F". Пощелкаем созданными кнопками.

Нажмем сочетание клавиш Alt+F8 (вызов окна Макросы), выберем макрос Очистка, нажмем кнопку Войти. Появится окно с модулем VBA, где активной будет запись про­граммы Очистка (Sub Очистка()). В этой программе перечислены операторы, которые мы за­давали при записи макроса своими действиями.

Sub Очистка()

' Очистка Макрос ' Макрос записан ...

Range("F1:F20").Select

Selection.Clear

Range("G4").Select

End Sub

Можно, при необходимости, изменить действия макроса (программы) прямо в данном модуле.

Нанесем на лист еще одну кнопку и присвоим ей макрос Возврат. Затем перейдем на титуль­ный лист, напишем макрос ОткрМодули для открытия листа Модули и присвоим его кнопке открытия.

Теперь на листе Модули сделаем так, чтобы при нажатии специальной кнопки на лист помещалась новая кнопка, на ней появлялась надпись "новая кнопка", а в ячейке А3 производился подсчет количества созданных новых кнопок. Для подсчета новых кнопок объявим переменную n% (объявление в качестве целого числа) в области объявления переменных, там же поместим декларацию "Option Explicit", которая будет инициировать проверку описания встречаемых в программе переменных. В программу макроса открытия листа Модули добавим операторы присвоения нуля переменной n и записи этого значения в ячейку А3.

Option Explicit

Dim n%

Sub ОткрМодули()

' Функция Макрос' Макрос записан ...

n = 0

ActiveWindow.ScrollWorkbookTabs Position:=xlLast

Sheets("Модули ").Select

Range("A3").Select

ActiveCell.FormulaR1C1 = n ' Запись 0 в ячейку А3

End Sub

Запишем макрос (КнопкаAdd - его программа приведена ниже), выполнив все действия по добавлению новой кнопки и изменению надписи на ней. Присвоим этот макрос кнопке с названием "Добавить новую кнопку!". Щелчки по ней будут добавлять на лист новую кнопку. Однако необходимо вести подсчет новых (добавленных) кнопок. Для этого в программе макроса КнопкаAdd необходимо значение переменной n увеличивать на единицу при добавлении каждой новой кнопки. Поэтому в программе макроса КнопкаAdd необходимо добавить операторы (ниже в распечатке программы они находятся в конце и выделены полужирным курсивом).

Sub КнопкаAdd()

' КнопкаAdd Макрос

' Макрос записан ....

ActiveSheet.Buttons.Add(399.75, 110.25, 127.5, 29.25).Select

Selection.Characters.Text = "новая кнопка"

With Selection.Characters(Start:=1, Length:=12).Font

.Name = "Arial Cyr"

.FontStyle = "обычный"

.Size = 12 …

.ColorIndex = xlAutomatic

End With

n = n + 1

Range("A3").Select

ActiveCell.FormulaR1C1 = n

End Sub

Обнуление переменной n будет производиться при открытии листа Модули (распечатка программы ОткрМодули приведена выше).

Щелкая по кнопке "Добавить новую кнопку!" будем на листе добавлять кнопки с надписью "новая кнопка" одну над другой – если не вести учет в ячейке А3, то не будем знать, сколько всего добавлено кнопок.