Задачи по программированию для начинающих excel

Содержание

  1. Задачи vba excel для начинающих
  2. Задачник на VBA (часть I)*
  3. Сборник задач по VBA

Задачи vba excel для начинающих

Вывод. В ходе работы мы рассмотрели методику нахождения экстремума функции, составили блок-схему и программу вычисления в VBA.

Тема 3: Решение нелинейных уравнений.

Цель. Рассмотреть методы решения нелинейных уравнений : метод деления отрезка пополам. Составить алгоритм решения и реализовать программы в VBA.

Интервал 1;2 . точность 10-5

1) Метод деления отрезка пополам.

Делим отрезок пополам:

Определяют знак функции f(x) и выбирают ту половину отрезка, на концах которого функция принимает значение разных знаков и деление повторяется.

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

Мы водим в лист MS Excel начальные данные: a, b,f(x), eps:

Создаем макрос: Сервис – Макрос – макросы. Задаем имя(нелинейное). Вводим программу:

If f(a) * f(X) > 0 Then

Cells(i + 3, 5) = f(X)

Loop While Abs(X — X0) > eps

f = 0.8 * X ^ 4 — 2 * X ^ 2

Запускаем программу: кнопка F5.

Сворачиваем программу и на листе MS Excel нам выдает данные:

Основан на предположении, что на маленьком отрезке функция изменяется линейно. Тогда кривую можно заменить хордой и в качестве приближенного значения принять точку пересечения хорды с осью абсцисс. Точка Х находиться по формуле Х=a-((b-a)*f(a))/(f(b)-f(a)). Определяют знак функции f(x) и выбирают ту половину отрезка, на концах которого функция принимает значение разных знаков и деление повторяется.

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

Эти два метода очень похожи и различаются только способом нахождения Х. все остальное то же самое.

Источник

Задачник на VBA (часть I)*

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего профессионального образования

«КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ЭНЕРГЕТИЧЕСКИЙ УНИВЕРСИТЕТ»

Н.К. ПЕТРОВА, М.М. ВОЛЧЕНКО

ПРОГРАММИРОВАНИЕ НА VBA В ПРИМЕРАХ И ЗАДАЧАХ

ЧАСТЬ I. БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ

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

«Информатика», «Компьютерные технологии в науке и образовании», «Программные средства информатики», «Новые информационные технологии»

УДК 681.3 ББК 32.973 П78

кандидат физико-математических наук, доцент Татарского государственного педагогического университета И.Н. Голицына ;

кандидат физико-математических наук, доцент Казанского государственного энергетического университета Р.А. Ишмуратов

П78 Петрова Н.К., Волченко М.М.

Программирование на VBA. Часть I. Базовые алгоритмические структуры. Практикум / Н.К. Петрова, М.М. Волченко. – Казань: Казан. гос. энерг. ун-т, 2010. – 55 с.

Предлагается своего рода «Задачник» по программированию, ориентированный на обучение студентов основам алгоритмизации математических и инженерных задач средствами языка VBA в приложении к Excel.

Содержание I части охватывает разделы программы, посвященные базовым алгоритмическим структурам: линейные программы, «ветвление», «цикл» — арифметический и итерационный. Изложение материала оформлено в виде отдельных разделов, в которых кратко представлены основные теоретические сведения.

Типовые задачи даются с подробными решениями. Имеется большое количество задач для самостоятельной работы. Задания делятся на три типа: 1 – умение «читать» готовые программы, 2 – разрабатывать программы по шаблонному алгоритму и 3 – разрабатывать программы с неявным алгоритмом.

Практикум предназначен для студентов всех специальностей КГЭУ, изучающих «Информатику».

УДК 681.3 ББК 32.973

© Казанский государственный энергетический университет, 2010

В учебной литературе имеется не так много пособий по практической работе на VBA, ориентированных на решение математических, инженерных задач. Данный практикум разработан с целью восполнить существующий пробел. Он предназначен для обучения – самостоятельно или под руководством преподавателя – основам алгоритмизации с использованием языка VBA (Visual Basic for Application) в приложении к одному из самых популярных приложений MS Office – MS Excel.

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

В тексте практикума приняты такие соглашения:

1. Элементы языка VBA в текстовой части практикума выделены

2. Курсивом выделены новые термины, имена переменных в текстовой части практикума, в комментариях к операторам программ.

3. Примеры разбираемых программ даются, как правило, с комментариями, при этом текст программы пишется курсивом. Тексты программ для самостоятельного разбора приводятся, как правило, в рамке.

4. При описании структуры операторов[ необязательные операнды ] взяты в квадратные скобки, альтернативные параметры – Yes | No –

написаны через вертикальную черту.

5. В тексте используются следующие сокращения:

ОП – оперативная память; ПК – компьютер; п/п – программа-процедура; п/ф – программа-функция

При подготовке данного практикума авторы использовали многолетний опыт работы по преподаванию курса информатики в Казанском государственном энергетическом университете и Казанском государственном университете.

Общие теоретические сведения по программированию на VBA

I. Структура программ на VBA. Процедуры и функции пользователя

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

В VBA программный код, реализующий какие-либо действия, оформляется в виде процедур и функций . Благодаря этому создаваемые программы имеют хорошую структурированность и наглядность. Разработанные отдельные функции или процедуры можно накапливать в библиотеках и в дальнейшем использовать их по мере необходимости.

Программа-процедура (п/п) на VBA имеет следующую структуру:

[Private|Public] Sub ИмяПроцедуры ( СпискиПараметров ) >

где [Private|Public] – необязательные ключевые слова, определяющие область видимости программы; Sub – ключевое слово, определяющее тип п/п. ИмяПроцедуры – имя п/п (дает сам пользователь). СписокПараметров служит для передачи процедуре исходных данных для вычислений (может отсутствовать). Он состоит из элементов списка, разделенных запятыми.

Этот элемент списка параметров имеет синтаксис:

ИмяЭлемента [ As ТипДанных ]

где ИмяЭлемента – идентификатор; As – ключевое слово; ТипДанных – тип данных элемента списка (Табл. 1.1).

Процедура пользователя может быть вызвана из другой п/п оператором Call или указанием ее имени.

Источник

Сборник задач по VBA

Министерство образования Республики Беларусь Учреждение образования

« МОГИЛЕВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПРОДОВОЛЬСТВИЯ »

Кафедра « Информатика и вычислительная техника »

Сборник задач по VBA

Методические указания для студентов всех специальностей и аспирантов

Рассмотрены и рекомендованы к изданию на заседании кафедры

« Информатика и вычислительная техника » Протокол № 9 от « 14 » апреля 200 8 г .

кандидат технических наук , доцент , заведующий кафедрой « Автоматизированные системы управления » Белорусско — Российского университета

С . К . Крутолевич

кандидат физико — математических наук , доцент кафедры « Математического анализа , информатики и вычислительной техники » Могилевского государственного университета им . А . А . Кулешова С . Н . Батан

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

Visual Basic for Applications (VBA).

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

© УО « Могилевский государственный университет продовольствия », 2008

Основная цель данного методического указания – научить аспирантов и студентов программировать на языке Visual Basic for Applications (VBA).

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

В методическом указании предложено большое количество задач ( более 200), от простых до достаточно сложных .

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

Часть 1. СОЗДАНИЕ МАКРОСОВ

Начальные сведения по решению задач данной части содержатся в частях 1 и 2 учебно — методического пособия « Программирование на VBA».

Приступая к решению задач этого раздела , следует вспомнить , что :

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

ü записанные макрорекордером макросы не универсальны , поскольку они

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

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

ü применение макросов повышает скорость работы и , главное , точность и надежность .

1. Создайте макрос в Excel, который строит график функции y = x 2 — x — 2 на отрезке [-3,3].

2. Создайте макрос в Excel, который заливает ячейку B1 ярко — зеленым цветом , вычисляет разность ячеек A1, A2 и выводит результат в ячейку B1 шрифтом Arial, подчеркнутым , 14 размером .

3. Создайте макрос в Excel, вычисляющий площадь поверхности и объем цилиндра ( ячейки , содержащие r , h , должны быть подписаны ).

S = 2 × p × r × ( h + r )

4. Создайте макрос в Excel, который переводит вес из фунтов в килограммы ( один фунт равен 409,5 г ; ячейки , содержащие фунты и килограммы , должны быть подписаны ).

5. Создайте макрос в Excel, который выводит на синем фоне красными буквами в текущую ячейку сообщение «Visual Basic for Applications (VBA)»

шрифтом Times New Roman, обычным , 12 размером .

6. Создайте макрос в Excel, который выделенный диапазон ячеек одной строки A1:H1 сортирует по убыванию .

7. Создайте макрос в Excel, вычисляющий площадь треугольника :

S = 1 2 × a × h , где a – длина основания треугольника , h – его высота ( ячейки ,

содержащие a , h , должны быть подписаны ).

8. Создайте макрос в Excel, который выводит , начиная с текущей ячейки , четверостишие :

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

9. Создайте макрос в Excel, который вычисляет произведение чисел , расположенных в выделенном диапазоне 5- и ячеек .

10. Создайте макрос в Excel, который копирует ячейки A1:C2 и выводит их содержимое , начиная с ячейки F20.

11. Создайте макрос в Excel, который из последовательности чисел , расположенных в ячейках A1:A10, выводит последовательность с положительными числами в ячейки B1:B10.

12. Создайте макрос в Excel, вычисляющий объем и площадь поверхности шара ( ячейка , содержащая r , должна быть подписана ).

13. Создайте макрос в Excel, который переносит ячейки A1:A10 в ячейки

14. Создайте макрос в Excel, который выводит в текущей ячейке фразу : « Каждый охотник желает знать , где сидят фазаны », позволяющую запомнить порядок следования цветов радуги ( первая буква слова кодирует цвет : каждый – красный , охотник – оранжевый , желает – желтый , знать – зеленый , где – голубой , сидят – синий , фазаны – фиолетовый ). Каждое слово фразы должно быть выведено соответствующим цветом .

15. Создайте макрос в Excel, который переводит расстояния из километров в версты ( одна верста равна 1066,8 м .; ячейки , содержащие километры и версты , должны быть подписаны ).

16. Создайте макрос в Excel, который выделенный диапазон ячеек одного столбца B1:B10 сортирует по возрастанию .

17. Создайте макрос в Excel, который выводит , начиная с ячейки B3, на синем фоне серыми буквами 16 размером четверостишие :

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

18. Создайте макрос в Excel, вычисляющий объем конуса ( ячейки , содержащие r , h , должны быть подписаны ).

S = 1 3 × p× r 2 × h

19. Создайте макрос в Excel, который для ячеек A2:B10 строит точечную диаграмму ( значения X: A2:A10, значения Y: B2:B10).

20. Создайте макрос в Excel, который вычисляет сумму чисел , расположенных в ячейках A1:B10, и выводит результат в ячейку B11.

21. Создайте макрос в Excel на изменение ширины текущего столбца

( Ширина столбца 20).

22. Создайте макрос в Excel, который объединяет ячейки B7:H7 и выводит на желтом фоне синими буквами в объединенной ячейке сообщение « Создание макроса » шрифтом Times New Roman, обычным , 12 размером .

23. Создайте макрос в Excel, который для ячеек A2:C2 строит круговую диаграмму .

24. Создайте макрос в Excel на изменение высоты текущей строки ( Высота строки 25).

25. Создайте макрос в Excel, вычисляющий площадь круга : S = p× r 2 , где r – радиус круга ( ячейка , содержащая r , должна быть подписана ).

26. Создайте макрос в Excel, который строит график функции y = x 2 — 1 на

27. Создайте макрос в Excel на изменение угла наклона текста в текущей ячейке (90 градусов ).

28. Создайте макрос в Excel, вычисляющий объем полого цилиндра ( ячейки ,

содержащие r 1 , r 2 , h , должны быть подписаны ; r 1 − радиус цилиндра , r 2 − радиус отверстия , h − высота цилиндра ).

V = p × h × ( r 1 2 — r 2 2 )

29. Создайте макрос в Excel на добавление листа в книгу .

30. Создайте макрос в Excel, вычисляющий площадь трапеции : S = a + 2 b × h ,

где a , b – длины оснований , h – высота трапеции ( ячейки , содержащие a , b , h , должны быть подписаны ).

Часть 2. СОЗДАНИЕ ПРОГРАММ С ЛИНЕЙНОЙ СТРУКТУРОЙ

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

Приступая к решению задач этого раздела , следует вспомнить , что :

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

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

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

Источник

Adblock
detector

Задания для курсовой работы

Оглавление

Задание
1. Построение графиков функции и
поверхностей в
MS Excel

Задание №2. Вычисления в MS Excel

Задание №3. Формирование массива по
определенному условию

Задание №4. Обработка двумерного
массива

Задание №5. Создание меню

Задание №6. Программа для перевода
чисел из одной системы счисления в другую

Задание
1. Построение графиков
функции и поверхностей в
MS Excel

Используя возможности
табличного процессора
MS Excel,
выполнить следующие задания:

·        
для каждой функции построить отдельную
диаграмму

·        
построить графики 3 функций в одной
системе координат

·        
для каждой диаграммы оформить элементы:
название (сверху), легенда (справа или снизу)

·        
для построения использовать заданный
диапазон

·        
по оси x
указать соответствующие значения

·        
поместить каждую диаграмму на отдельном
листе

·        
отформатировать листы в соответствии с
вариантом задания

Вариант
выбирается в соответствии с номером в журнале группы!

Вариант

Функции

Диапазон построений, тип диаграммы

Параметры форматирования

1

Гистограмма   [-5,5] шаг 0,5

Цвет
ярлыка листа – желтый,
область построений – градиентная заливка (2 цвета желтый-красный),

цвета линий – красный, синий, зеленый

Линейчатая  [-10,10]
шаг 1

График  [-2,10]
шаг 0,6

Для
общей диаграммы
y1, y2, y3

График

45
значений (от π/60 с шагом π/30)

2

Линейчатая  [-15,2] шаг 1

Цвет
ярлыка листа – красный,
область построений – градиентная заливка (2 цвета синий-красный),

цвета линий – оттенки красного

Гистограмма  [-5, 5]
шаг 0,25

График  [-6,10]
шаг 0,8

Для
общей диаграммы
y1, y2, y3

График

45
значений (от -π/2 с шагом π/30)

3

Гистограмма  [10,15] шаг 0,5

Цвет
ярлыка листа – зеленый,
область построений – градиентная заливка (3 цвета
желтый-зеленый-синий)
,
цвета линий – оттенки лилового

Линейчатая
  [-15, 2]
шаг 1

График  [-8,9]
шаг 0,85

Для
общей диаграммы
y1, y2, y3

45
значений (от -π с шагом π/10)

4

Линейчатая  [-6,4] шаг 1

Цвет
ярлыка листа – оранжевый,
область построений – градиентная заливка (2 цвета желтый-оранжевый),

цвета линий – красный, синий, оранжевый

Гистограмма  [2,11]
шаг 0,25

График  [-10,3]
шаг 0,65

Для
общей диаграммы
y1, y2, y3

45
значений (от -2π с шагом 2π/3)

5

Гистограмма  [-2,4] шаг 0,25

Цвет
ярлыка листа – лиловый,
область построений – градиентная заливка (2 цвета синий-зеленый),

цвета линий – оттенки зеленого

Линейчатая
   [-2, 12]
шаг 1

График   [-5,18]
шаг 1,15

Для
общей диаграммы  
y1, y2, y3

45
значений (от -π с шагом π/2)

Вариант

Функции

Диапазон построений, тип диаграммы

Параметры форматирования

6

Линейчатая   [-3,15] шаг 1,5

Цвет
ярлыка листа – синий,
область построений – градиентная заливка (2 цвета зеленый-красный),

цвета линий – красный, коричневый, зеленый

Гистограмма  [-5,10]
шаг 1

График   [-3,6]
шаг 0,45

Для
общей диаграммы
y1, y2, y3

45
значений (от -π с шагом π/15)

7

Гистограмма  [-8,3] шаг 1

Цвет
ярлыка листа – желтый,
область построений – градиентная заливка (2 цвета
оранжевый-зеленый)
,
цвета линий – оттенки синего

Линейчатая
  [-3, 5]
шаг 0,5

График  [-12,6]
шаг 0,9

Для
общей диаграммы
y1, y2, y3

45
значений (от -2π с шагом π/65)

8

Линейчатая  [2,12] шаг 1

Цвет
ярлыка листа – красный,
область построений – градиентная заливка (2 цвета лиловый-зеленый),

цвета линий – оттенки красного

Гистограмма  [-5,8]
шаг 0,5

График   [2,14]
шаг 0,6

Для
общей диаграммы
y1, y2, y3

45
значений (от -π с шагом π/60)

9

Гистограмма  [-1,4] шаг 0,25

Цвет
ярлыка листа – зеленый,
область построений – градиентная заливка (3 цвета
желтый-красный-лиловый)
,
цвета линий – оттенки синего

Линейчатая
  [-5, 5]
шаг 1

График   [-2,6]
шаг 0,4

Для
общей диаграммы
y1, y2, y3

45
значений (от –π/2 с шагом π/50)

10

Линейчатая   [-1,6] шаг 1

Цвет
ярлыка листа – оранжевый,
область построений – градиентная заливка (2 цвета лиловый-желтый),

цвета линий – оливковый, синий, оранжевый

Гистограмма  [-6.5,3.5]
шаг 0,5

График   [-8,3]
шаг 0,55

Для
общей диаграммы
y1, y2, y3

45
значений (от –π с шагом π/5)

11

Гистограмма   [-2,7] шаг 0,5

Цвет
ярлыка листа – красный,
область построений – градиентная заливка (2 цвета желтый-красный),

цвета линий – оттенки синего

Линейчатая
   [-8, 6]
шаг 1

График   [-4.5,3]
шаг 0,3

Для
общей диаграммы
y1, y2, y3

45
значений (от –2π с шагом π/30)

12

Линейчатая   [-3,6] шаг 1

Цвет
ярлыка листа – оливковый,
область построений – градиентная заливка (2 цвета синий-желтый),

цвета линий – оранжевый, красный, зеленый

Гистограмма   [-6,3]
шаг 0,5

График   [-6,10]
шаг 0,8

Для
общей диаграммы
y1, y2, y3

45
значений (от –π с шагом π/10)

13

График   [-8,3] шаг
0,8

Цвет
ярлыка листа – зеленый,
область построений – градиентная заливка (3 цвета
желтый-зеленый-синий)
,
цвета линий – оттенки лилового

Гистограмма  [-5,20]
шаг 1,5

Линейчатая   [-3,10] шаг 1.2

Для
общей диаграммы
y1, y2, y3

45
значений (от –2π с шагом π/10)

Вариант

Функции

Диапазон построений, тип диаграммы

Параметры форматирования

14

y1
=a(x-sin x)

График,
[0, 12] шаг 0,8; a – любое

Цвет
ярлыка листа – желтый,
область построений – градиентная заливка (2 цвета желтый-красный),

цвета линий – красный, синий, зеленый

Гистограмма  
[-6,3] шаг 0,5

Линейчатая  
[-3,12] шаг 1,5

Для
общей диаграммы
y1, y2, y3

45
значений (от –2π с шагом π/15)

15

y1=(sin kx)/kx

x=0,1,
0,6, ….,10,  k=0,5

Цвет
ярлыка листа – зеленый,
область построений – градиентная заливка (3 цвета
желтый-красный-лиловый)
,
цвета линий – оттенки синего

Гистограмма  
[-6,3] шаг 0,5

Линейчатая  
[-3,6] шаг 1

Для
общей диаграммы
y1, y2, y3

45
значений (от –π с шагом π/30)

16

y1=(sin
x)/x

График x=0,1,
0,6, ….,12

Цвет
ярлыка листа – оранжевый,
область построений – градиентная заливка (2 цвета лиловый-желтый),

цвета линий – оливковый, синий, оранжевый

Гистограмма  
[-6,3] шаг 0,5

Линейчатая  
[-10,8] шаг 1,5

Для
общей диаграммы
y1, y2, y3

45
значений (от –π/2 с шагом π/30)

17

y1=a( t-sin t)

График  
[0,12] шаг 0,8 a – любое

Цвет
ярлыка листа – оливковый,
область построений – градиентная заливка (2 цвета синий-желтый),

цвета линий – оранжевый, красный, зеленый

y2=a( 1-cos t )

Линейчатая  
[-3.5,8.5] шаг 1
,
a
= 4

y3=(sin
x)/x

График  
[-8,3] шаг 0,5

Для
общей диаграммы
y1, y2, y3

45
значений (от –π/45 с шагом π/30)

18

y1= sin kx,

График  
[0,12] шаг 0,8,  k=20

Цвет
ярлыка листа – красный,
область построений – градиентная заливка (2 цвета желтый-красный),

цвета линий – оттенки синего

Гистограмма  
[-6,3] шаг 0,5

Линейчатая  
[-3,15] шаг 2

Для
общей диаграммы
y1, y2, y3

45
значений (от –2π с шагом π/60)

19

График  
[-8,3] шаг 0,55

Цвет
ярлыка листа – красный,
область построений – градиентная заливка (2 цвета лиловый-зеленый),

цвета линий – оттенки красного

Линейчатая  
[-1.5,8.5] шаг 1,5

Гистограмма 
[-15,30] шаг 2,5

Для
общей диаграммы
y1, y2, y3

45
значений (от –2π с шагом π/45)

20

График 
[-12,6] шаг 0,9

Цвет
ярлыка листа – синий,
область построений – градиентная заливка (2 цвета зеленый-красный),

цвета линий – красный, оранжевый, зеленый

y1 = a(x cos  x)

Линейчатая  
[-1,6] шаг 1

Гистограмма 
[5,18] шаг 0,8

Для
общей диаграммы
y1, y2, y3

45
значений (от –π с шагом π/45)

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

№ варианта

Параметры функции

1

 a=2, b=2, c=4

2

z=ln(x2+y2+1)-ex-y,
где x,y
[-2;3],h=0,1

3

b=ax2-axy+ay2-ax+2ay;
x=[-5;5]
шаг 0,5; y=[-5,5] шаг 0,5; a=4

4

r=sin x* sin y*ln (a+x+y); a=10; x=[0; 4] шаг 0,2; y=[0; 4] шаг 0,2

5

t=x3+ay3-bxy+1; a=8, b=6;
x=[-5;5]
шаг 0,5; y=[-5;5] шаг 0,5

6

z=(ax-x2)*(ay-y2); a=2;
x=[-5;5]
шаг 0,5; y=[-5;5] шаг 0,5

7

q=a
sin x* sin y/(xy); a=3; x=[0,01; 4,01]
шаг 0,2; y=[0,01; 4,01] шаг 0,2

8

w=a
sin (bx2y2); a=2; b=1,5; x=[-1,5; 1,5]
шаг 0,15; y=[-1,5;
1,5]
шаг 0,15

9

z=sin
x + sin y + sin(x+y); x=[0; 4]
шаг 0,2; y=[0; 4] шаг 0,2

10

u= a
sin (x2+y2); a=0,5; x=[0; 2]
шаг 0,1; y=[0; 2] шаг 0,1

11

s=ax2+axy+(a+2)y2-5ax;
x=[-5;5]
шаг 1; y=[-5,5] шаг 1; a=4

12

v=x4+y4-ax2-bxy-ay2
; a=2, b=4; x=[-2; 2]
шаг 0,2; y=[-2; 2] шаг 0,2

13

z=
a*ln (bx2y2+c); a=2, b=3, c=0,01; x=[-2; 2]
шаг 0,2; y=[-2; 2] шаг 0,2

14

m= a*tg (bx2y2+c); a=2, b=1,5,
c=0,01; x=[-2; 2]
шаг 0,2; y=[-2; 2] шаг 0,25

15

k=ax2-axy+by2+x-by;
x=[-5;5]
шаг 0,5; y=[-4,5] шаг 0,25; a=2, b=3

16

z = x2
+ y2 − ax − b xy − ay + ab ; a=2, b=4; x=[-5;5]
шаг 0,5; y=[-5;5] шаг 0,5; y=[-5;5] шаг 0,5

17

p=exp(x-y)
(x2-2y2); x=[-3;3]
шаг 0,3; y=[-5; 5] шаг 0,5

18

t=(sin x+ sin y)*ln (a+x+y); a=10; x=[0; 4] шаг 0,2; y=[0; 4] шаг 0,2

19

r=exp(x/2)
(x+y2); x=[-5;5]
шаг 0,5; y=[-5,5] шаг 0,5

20

 w=x3+axy2-5ax-4ay;
x=[-5;5]
шаг 0,5; y=[-5,5] шаг 0,5; a=3

Задание №2. Вычисления в MS
Excel

Вычислить значение функции, используя
возможности
MS Excel.
Оформить вычисление в электронной таблице, найти значения в контрольных точках.

Вариант

Функция

Контрольные точки

1

-3

-1

0

5

6

2

-8

0

1

5

8

3

-10

3

5

12

20

4

-1

0

5

12

20

5

-20

-3

-1

0

12

6

-2

0

5

9

16

7

-3

0

1

15

23

8

-21

-6

0

3

20

9

-6

0

5

21

45

10

-20

0

1

12

23

11

-31

-20

-4

0

6

12

-11

-2

0

16

38

13

8

-1

0

-10

12

14

19

0

2

-10

-1

15

-10

0

1

20

25

16

-4

0

5

10

22

17

-12.5

-10

0

11

18

18

-2.4

0

3.1

0.5

10.8

19

-1

0

3.1

-5

11.2

20

0

11

-5

25

5

Задание №3. Формирование
массива по определенному условию

Написать программу и составить блок-схему
и для обработки двумерного массива.

Вариант
условия задачи
выбирается в
соответствии с номером в журнале группы!

Условие задачи:
Сформировать и вывести на экран заданный двумерный массив (для заполнения
массива использовать формулу).

Вариант

Заданный
массив

Вариант

Заданный
массив

1.        
 

2. 

3.        
 

4.      

5.        
 

6.      

7.        
 

8.      

9.        
 

10.  

11.     

12.  

13.     

14.  

Вариант

Заданный
массив

Вариант

Заданный
массив

15.     

16.  

17.     

18.  

19.  

20.  

21.  

22.  

Задание №4. Обработка
двумерного массива

Составить блок-схему и написать программу
для обработки двумерного массива.

Вариант
условия задачи выбирается в соответствии с номером в журнале группы!

Условие задачи:
Дан двумерный массив А размерностью
NхN,
элементы массива – случайные целые числа из диапазона (-30..30).
N
задается пользователем и может быть равно значению от 5 до 9 включительно.
Необходимо сформировать из элементов массива А одномерный массив В, в который
поместить все элементы, удовлетворяющие заданному условию.

Вычислить:

·        
Сумму
элементов массива А

·        
Сумму
элементов массива В

·        
Среднее
арифметическое элементов массива А

·        
Среднее
арифметическое элементов массива В

Вывести на экран и в текстовый документ
исходный массив А, полученный массив
B
и вычисленные значения.

Вариант

Условие отбора
элементов из массива А

1.       

Четные
элементы, находящиеся на четных местах

2.       

Все
четные элементы

3.       

Все
элементы массива А в порядке возрастания

4.       

Элементы,
которые делятся на 2 и 3

5.       

Четные
и положительные элементы

6.       

Отрицательные
и нечетные элементы

7.       

Все
элементы массива А в порядке убывания

8.       

Элементы,
находящиеся на четных местах

9.       

Элементы,
которые делятся на 5

10.   

Элементы
из диапазона (-10..10)

11.   

Элементы,
которые делятся на 5

12.   

Элементы,
находящиеся на нечетных местах

13.   

Все
ненулевые элементы

14.   

Положительные
элементы, находящиеся на четных местах

15.   

Все
положительные элементы, которые делятся на 3

16.   

Все
нечетные элементы

17.   

Элементы,
находящиеся на четных местах и делящиеся на 3

18.   

Нечетные
элементы, находящиеся на нечетных местах

19.   

Отрицательные
элементы, находящиеся на четных местах

20.   

Все
отрицательные элементы, которые делятся на 5

21.   

Все
нечетные элементы, делящиеся на 3

22.   

Все
четные элементы в диапазоне (-10..10)

23.   

Все
нечетные элементы в диапазоне (-11..11)

Задание №5. Создание меню

Решить задачу 3
способами:

1.      Используя
метки и оператор
goto (не используя
никакой цикл)

2.      Используя
цикл (
repeat
или
while)

3.      Используя
массив

Вариант условия задачи
выбирается в соответствии с номером в журнале группы!

Вывести на экран
условие задачи. Оформить решение в виде меню с 4 пунктами:

1.   I способ

2.   II способ

3.   III способ

4.   Выход

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

Вариант

Условие задачи

1

С клавиатуры вводится N целых
чисел
a1, a2,….,aN. Найти
сумму этих чисел. Вывести на экран в процессе ввода чисел:
a1+a2, a2+a3, …. aN-1+aN

2

С клавиатуры вводится N
вещественных  чисел
a1, a2,….,aN. Вычислить
выражение (1+
R)/(1+S), где R – сумма
чисел последовательности, которые не превосходят 1, а
S – сумма
чисел, больших 1.

3

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел. Определить, количество чисел, которые имеют более одного
разряда в записи.

4

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел и среднее арифметическое. Определить число соседств четного
и нечетного чисел.

5

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел. Определить число соседств двух ненулевых чисел.

6

С клавиатуры вводится N
вещественных  чисел
a1, a2,….,aN. Найти
сумму этих чисел. Определить, количество чисел превышающих по модулю 10.

7

С клавиатуры вводится N целых
чисел
a1, a2,….,aN. В
ответ на экран выводится то же число, если оно меньше 7. В противном случае
выводится число 7. Найти сумму всех введенных чисел.

8

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
произведение всех чисел. Если в последовательности есть число, равное а1,
определить сумму всех чисел, следующих за первым таким числом. В противном
случае выведите ноль.

9

С клавиатуры вводится N целых
чисел
a1, a2,….,aN. Найти
сумму этих чисел. Найти номер первого четного числа последовательности чисел.
Если четных чисел нет, то результат равен нулю.

10

С клавиатуры вводится N целых
чисел
a1, a2,….,aN. Найти
сумму этих чисел. Вывести на экран в процессе ввода чисел:
a1, a1a2, a1a2a3, …,a1a2a3…aN.

11

С клавиатуры вводится N
вещественных  чисел
a1, a2,….,aN. Найти
сумму этих чисел. Определить число соседств двух чисел разного знака.

12

С клавиатуры вводится N целых
чисел
a1, a2,….,aN
Выводите на экран в процессе ввода чисел: а1/а2, а2/а3, … а
N-1/aN. Найти
сумму всех чисел.

13

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел. Определить, количество чисел, которые имеют один разряд в
записи.

14

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел. Выводите на экран в процессе ввода чисел а1, 2а2, 3а3,….,
NaN.

15

С клавиатуры вводится N целых
чисел
a1, a2,….,aN.  Найти
сумму всех чисел и среднее арифметическое. Определить, максимальное число в
последовательности.

Задание №6. Программа для
перевода чисел из одной системы счисления в другую

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

Вариант
задания определяется в соответствии с номером по порядку в журнале группы!

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

Методические указания

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

逅矷矶塵矵矧

Обратный
перевод осуществляется последовательным умножением на степень основания системы
счисления.

Для
перевода
X2 ®
X8 или X2 ®
X16 следует справа налево
разбить двоичное число на триады (для восьмеричной) и тетрады (для
шестнадцатеричной), добавить при необходимости слева нули и заменить
соответственно:

08 ®0002, 18 ®
0012, 28
®0102, 38
®0112 и т.д

Также
производится и обратный перевод
X8 ® X2 или X16 ®
X2.

При
переводе
X8 ®
X16 или X16 ®
X8 следует использовать
двоичную систему счисления, т.е. эти переводы будут реализованы, как два:
X8 ®
X2 ®X16 и X8 ®
X2 ®
X16.

Для
представления чисел в системе счисления удобнее всего использовать строковые
переменные. Чтобы получить
i-тый символ строки st можно использовать следующие
команды:
st [i] (строка рассматривается как
массив) или
copy (st, i, 1).

Для
преобразования строки
st в число используется
процедура:
val (st, k, code). Переменная code типа integer содержит номер символа, на котором
при преобразовании произошла ошибка, или 0, если преобразование прошло успешно.

Вариант

Преобразование

  1.  

2 ®
8, 8
® 10

  1.  

2 ®
10, 8
® 16

  1.  

2 ®
16, 10
® 2

  1.  

8 ®
2, 10
® 8

  1.  

8 ®
10, 10
® 16

  1.  

8 ®
16, 16
® 2

  1.  

10 ®
2, 16
® 8

  1.  

10 ®
8, 16
® 10

  1.  

10 ®
16, 2
® 8

  1.  

16 ®
2, 2
® 10

  1.  

16 ®
8, 2
® 16

  1.  

16 ®
10, 8
® 2

  1.  

8 ®
10, 8
® 2

  1.  

8 ®
16, 10
® 16

  1.  

10 ®
2, 8
® 10

  1.  

10 ®
8, 2
® 16

  1.  

10 ®
16, 2
® 8

  1.  

16 ®
2, 10
® 2

  1.  

10 ®
8, 8
® 2

  1.  

16 ®
8, 10
® 2

  1.  

2 ®
10, 16
® 2

  1.  

8 ®
10, 2
® 8

  1.  

16 ®
10, 10
® 8

  1.  

2 ®
16, 16
® 8

  1.  

8 ®
16, 2
® 10

  1.  

10 ®
16, 8
® 10

  1.  

8 ®
2, 16
® 10

  1.  

10 ®
2, 2
® 16

  1.  

16 ®
2, 8
® 16

  1.  

2 ®
8, 10
® 16

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

Перейти к содержанию

На чтение 2 мин Опубликовано 11.05.2020

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

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

  • Часть 1: Оформление кода
  • Часть 2: Типы данных, переменные и константы
  • Часть 3: Массивы
  • Часть 4: Процедуры Function и Sub
  • Часть 5: Условные операторы
  • Часть 6: Циклы
  • Часть 7: Операторы и встроенные функции
  • Часть 8: Объектная модель Excel
  • Часть 9: События в Excel
  • Часть 10: Ошибки VBA
  • Примеры по VBA

Более подробное описание по Excel VBA можно найти на сайте Microsoft Office.

Оцените качество статьи. Нам важно ваше мнение:

Понравилась статья? Поделить с друзьями:
  • Задачи по оптимизации решений в excel линейная оптимизация
  • Задачи по оптимизации данных excel
  • Задачи по оптимизации в excel примеры решения задач
  • Задачи по обработке данных excel
  • Задачи по налогам с решением в excel