Содержание
- Задачи vba excel для начинающих
- Задачник на VBA (часть I)*
- Сборник задач по 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 |
Цвет |
|
Линейчатая [-10,10] |
||
|
График [-2,10] |
||
Для |
График 45 |
||
2 |
|
Линейчатая [-15,2] шаг 1 |
Цвет |
|
Гистограмма [-5, 5] |
||
|
График [-6,10] |
||
Для |
График 45 |
||
3 |
|
Гистограмма [10,15] шаг 0,5 |
Цвет |
|
Линейчатая |
||
|
График [-8,9] |
||
Для |
45 |
||
4 |
|
Линейчатая [-6,4] шаг 1 |
Цвет |
|
Гистограмма [2,11] |
||
|
График [-10,3] |
||
Для |
45 |
||
5 |
|
Гистограмма [-2,4] шаг 0,25 |
Цвет |
|
Линейчатая |
||
|
График [-5,18] |
||
Для |
45 |
Вариант |
Функции |
Диапазон построений, тип диаграммы |
Параметры форматирования |
|
6 |
|
Линейчатая [-3,15] шаг 1,5 |
Цвет |
|
|
Гистограмма [-5,10] |
|||
|
График [-3,6] |
|||
Для |
45 |
|||
7 |
|
Гистограмма [-8,3] шаг 1 |
Цвет |
|
|
Линейчатая |
|||
|
График [-12,6] |
|||
Для |
45 |
|||
8 |
|
Линейчатая [2,12] шаг 1 |
Цвет |
|
|
Гистограмма [-5,8] |
|||
|
График [2,14] |
|||
Для |
45 |
|||
9 |
|
Гистограмма [-1,4] шаг 0,25 |
Цвет |
|
|
Линейчатая |
|||
|
График [-2,6] |
|||
Для |
45 |
|||
10 |
|
Линейчатая [-1,6] шаг 1 |
Цвет |
|
|
Гистограмма [-6.5,3.5] |
|||
|
График [-8,3] |
|||
Для |
45 |
|||
11 |
|
Гистограмма [-2,7] шаг 0,5 |
Цвет |
|
|
Линейчатая |
|||
|
График [-4.5,3] |
|||
Для |
45 |
|||
12 |
|
Линейчатая [-3,6] шаг 1 |
Цвет |
|
|
Гистограмма [-6,3] |
|||
|
График [-6,10] |
|||
Для |
45 |
|||
13 |
|
График [-8,3] шаг |
Цвет |
|
|
Гистограмма [-5,20] |
|||
|
Линейчатая [-3,10] шаг 1.2 |
|||
Для |
45 |
|||
Вариант |
Функции |
Диапазон построений, тип диаграммы |
Параметры форматирования |
|
14 |
y1 |
График, |
Цвет |
|
|
Гистограмма |
|||
|
Линейчатая |
|||
Для |
45 |
|||
15 |
y1=(sin kx)/kx |
x=0,1, |
Цвет |
|
|
Гистограмма |
|||
|
Линейчатая |
|||
Для |
45 |
|||
16 |
y1=(sin |
График x=0,1, |
Цвет |
|
|
Гистограмма |
|||
|
Линейчатая |
|||
Для |
45 |
|||
17 |
y1=a( t-sin t) |
График |
Цвет |
|
y2=a( 1-cos t ) |
Линейчатая |
|||
y3=(sin |
График |
|||
Для |
45 |
|||
18 |
y1= sin kx, |
График |
Цвет |
|
|
Гистограмма |
|||
|
Линейчатая |
|||
Для |
45 |
|||
19 |
|
График |
Цвет |
|
|
Линейчатая |
|||
|
Гистограмма |
|||
Для |
45 |
|||
20 |
|
График |
Цвет |
|
y1 = a(x — cos x) |
Линейчатая |
|||
|
Гистограмма |
|||
Для |
45 |
|||
Построить график
поверхности. Для форматирования использовать те же параметры, что и для других
графиков.
№ варианта |
Параметры функции |
1 |
a=2, b=2, c=4 |
2 |
z=ln(x2+y2+1)-ex-y, |
3 |
b=ax2-axy+ay2-ax+2ay; |
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; |
6 |
z=(ax-x2)*(ay-y2); a=2; |
7 |
q=a |
8 |
w=a |
9 |
z=sin |
10 |
u= a |
11 |
s=ax2+axy+(a+2)y2-5ax; |
12 |
v=x4+y4-ax2-bxy-ay2 |
13 |
z= |
14 |
m= a*tg (bx2y2+c); a=2, b=1,5, |
15 |
k=ax2-axy+by2+x-by; |
16 |
z = x2 |
17 |
p=exp(x-y) |
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) |
20 |
w=x3+axy2-5ax-4ay; |
Задание №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. |
Элементы, |
5. |
Четные |
6. |
Отрицательные |
7. |
Все |
8. |
Элементы, |
9. |
Элементы, |
10. |
Элементы |
11. |
Элементы, |
12. |
Элементы, |
13. |
Все |
14. |
Положительные |
15. |
Все |
16. |
Все |
17. |
Элементы, |
18. |
Нечетные |
19. |
Отрицательные |
20. |
Все |
21. |
Все |
22. |
Все |
23. |
Все |
Задание №5. Создание меню
Решить задачу 3
способами:
1. Используя
метки и оператор goto (не используя
никакой цикл)
2. Используя
цикл (repeat
или while)
3. Используя
массив
Вариант условия задачи
выбирается в соответствии с номером в журнале группы!
Вывести на экран
условие задачи. Оформить решение в виде меню с 4 пунктами:
1. I способ
2. II способ
3. III способ
4. Выход
При решении
способом с массивом вывести все введенные числа в виде строки
Вариант |
Условие задачи |
1 |
С клавиатуры вводится N целых |
2 |
С клавиатуры вводится N |
3 |
С клавиатуры вводится N целых |
4 |
С клавиатуры вводится N целых |
5 |
С клавиатуры вводится N целых |
6 |
С клавиатуры вводится N |
7 |
С клавиатуры вводится N целых |
8 |
С клавиатуры вводится N целых |
9 |
С клавиатуры вводится N целых |
10 |
С клавиатуры вводится N целых |
11 |
С клавиатуры вводится N |
12 |
С клавиатуры вводится N целых |
13 |
С клавиатуры вводится N целых |
14 |
С клавиатуры вводится N целых |
15 |
С клавиатуры вводится N целых |
Задание №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, если преобразование прошло успешно.
Вариант |
Преобразование |
|
2 ® |
|
2 ® |
|
2 ® |
|
8 ® |
|
8 ® |
|
8 ® |
|
10 ® |
|
10 ® |
|
10 ® |
|
16 ® |
|
16 ® |
|
16 ® |
|
8 ® |
|
8 ® |
|
10 ® |
|
10 ® |
|
10 ® |
|
16 ® |
|
10 ® |
|
16 ® |
|
2 ® |
|
8 ® |
|
16 ® |
|
2 ® |
|
8 ® |
|
10 ® |
|
8 ® |
|
10 ® |
|
16 ® |
|
2 ® |
Время на прочтение
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 Integer) As 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, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As 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.
Оцените качество статьи. Нам важно ваше мнение: