Vba excel задачи с решениями

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

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

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

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

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

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

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

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

Казань 2010

УДК 681.3 ББК 32.973 П78

Рецензенты:

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

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

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

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

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

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

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

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

УДК 681.3 ББК 32.973

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

3

Предисловие

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

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

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

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

таким стилем.

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

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

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

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

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

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

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

4

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

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

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

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

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

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

End Sub

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

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

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

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

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

5

Например:

Private Sub Prog1( )

Начало процедуры с именем Prog( )

Dim t As Integer

Описание типа переменной t

t = 2

Присвоение переменной t значения 2

Call Prog2 (t)

Вызов процедуры Prog2 (t) с фактическим

[Другие операторы]

параметром t

Prog2 (t)

другой способ вызова п/п Prog2

[Другие операторы]

End Sub

Конец процедуры Prog1

Public Sub Prog2(x As

Начало п/п Prog2 с формальным параметром х

Integer)

MsgBox x

Выдача значения x в специальном окне

End Sub

Конец процедуры Prog2

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

[Private|Public]Function ИмяФункции([СпискиПараметров])[As ТипДанных]

<<Тело п/ф>>

ИмяФункции = ВозвращаемоеЗначение

End Sub

Function – ключевое слово, указывающее на то, что это функция; остальные параметры те же, что и в Sub. ВозвращаемоеЗначение – значение, возвращаемой функцией.

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

Пример:

Private Sub Prog3( ) Dim u,t As Integer

t = 2

y = Func ( t ) [Другие операторы] End Sub

Public Function Func(x As Integer) As Integer

f % = x ^ 2 + x + 5

func = f % End Function

6

Начало вызывающей п/п Задание типа переменным u,t

Присвоение переменной t значения 2 Вызов п/ф Func с фактическим аргументом t

Конец п/п

Начало п/ф Func, имеющей целочисленный тип. Формальный аргумент t имеет целочисленный тип

Вычисление полинома по t и присвоение результата целочисленной переменной f % Присвоение возвращаемого значения Конец п/ф

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

II. Типы констант. Представление числовых констант в формате с фиксированной и плавающей десятичной точкой

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

Числовые константы: представляют собой положительные или отрицательные числа двух видов:

а) целочисленные, представляющие собой положительные и отрицательные числа и ноль, при их записи не должна использоваться

десятичная запятая: -100

2

0 +458 ;

б) вещественные константы – все действительные числа, включая и

целые. Записываются в двух форматах:

100.

–0.001

+2.563

с фиксированной точкой, например,

(вместо десятичной запятой используется при записи точка)

с плавающей точкой, например,

2.5·10-2, записываемое как

2.5Е-02 или 2.5D-02.

Здесь

2.5

мантисса, Е, D

десятичная

экспонента одинарной (Е) или двойной (D) точности.

Например: 1,5 10-3 1.5Е-3=0.15Е-02=15Е-04=0.0015,

150000 1.5Е+05,

0,0000254 2.54Е-05.

7

III. Объявление переменных на VBA

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

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

Для эффективного использования памяти и времени ПК необходимо правильно выбрать тип переменной. Объявить переменную – значит заранее сообщить программе о ее существовании. Объявление переменной производится специальным оператором: Dim переменная [As тип]

Одновременно с объявлением переменной после ее имени можно

записать ключевое слово

As, после которого

задается

тип переменной

(Табл. 1.1).

Dim power As

Например: оператор

single

приписывает

переменной power вещественный тип одинарной точности.

Задать тип переменной также можно, используя специальный символ в конце имени – постфикс (см. табл. 2) – или, используя инструкцию

DefТип.

Например, если на уровне модуля дана инструкция DefInt I-N, это означает, что всем переменным, имена которых начинаются с букв, лежащих в диапазоне от I до N (и прописных, и строчных), в программах данного модуля будет присвоен тип Integer. Другие значения инструкции DefТип представлены в Табл. 1.2.

8

Таблица 1.1 Некоторые типы переменных VBA

Тип

Хранимая

Занимаемая

Диапазон значений

информация

память

Целочисленные типы

Byte

Целые числа

1 байт

От 0 до 255

Boolean

Логические

2 байт

True или False

значения

Integer

Целые числа

2 байт

От -32 768 до 32 767

Long

Длинное целое

4 байт

От -2 147 483 648 до 2 147 483

647

Типы с плавающей точкой

От -3,402823E38 до

Вещественные

-1,401298E-45

Single

числа с плавающей

4 байт

для отрицательных значений;

точкой одинарной

(7 цифр)

от 1,401298E-45 до

точности

3,402823E38

для положительных значений

От -1,79769313486232E308

Вещественные с

до -4,94065645841247E-324

8 байт

для отрицательных значений;

Double

плавающей точкой

(15 цифр)

от 4,94065645841247E-324

двойной точности

до 1,79769313486232E308 для

положительных значений

Строковые типы

Текстовая

String

информация

10 байт + 1 байт

От 0 до приблизительно

(строка) переменной

на каждый символ

2 миллиардов символов

длины

String*n

Строка постоянной

Длина строки

От 1 до приблизительно

длины в n символов

65 400

Типы Variant

Variant

Значения любого из

16 байт для чисел;

Любое числовое или

перечисленных

22 байт + 1 байт

строковое значение вплоть до

типов данных

на каждый символ

границ диапазона для типа

строки

Double.

9

Таблица1.2. ЗначенияинструкцииDefТиписоответствующихпостфиксов

Инструкция

Тип данных

Постфикс

Инструкция

Тип данных

Постфикс

DefBool

Boolean

нет

DefSng

Single

!

DefByte

Byte

нет

DefDbl

Double

#

DefInt

Integer

%

DefStr

String

$

DefLng

Long

&

DefVar

Variant

нет

IV. Значения и типы переменных по умолчанию

Если в программах модуля операторы описания типа или постфиксы в именах переменных отсутствуют, то работает принцип умолчания

(табл. 1.3), согласно которому все переменные принимают тип Variant и

соответствующие значения. Применение данного типа позволяет выполнять операции, не обращая внимания на тип данных, которые они содержат. Удобен для объявления переменных, тип которых заранее неизвестен. Переменные этого типа могут содержать специальные значения: Empty (пусто), Null (Нуль), Error (ошибка).

Таблица 1.3. Значения и типы переменных разных типов по умолчанию

Тип

Значение

Тип

Значение

Тип

Значение

Boolean

Ложь/False

Single

0,0

String

““

Byte

0

Double

0,0

String*n

“¬ . . . ¬“

Integer

0

Long

0

n пробелов

Variant

Empty, Null, Error

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

(любого типа – Byte, Integer, Long, Single, Double) то ее значение по умолчанию равно 0 (ноль). Для символьных переменных типа String значение по умолчанию «» – отсутствие символов, если String*n, то ее значение будет равно n пробелам. Для логических (Boolean) переменных значение по умолчанию будет «ложь»

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

1. Переменные, описанные с помощью DIM на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне п/п, доступны только в данной п/п.

10

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

3.Переменным типа Variant могут присваиваться как строковые, так и

числовые выражения. Однако обратное не всегда верно.

4.Присвоение выражения с одним из числовых типов переменной с другим числовым типом данных преобразует значение выражения в тип данных результирующей переменной. Например: если a % = 2.33, то а % будет иметь целое значение 2 (округление с недостатком) или b % = 2.65, то b % = 3 (округление с избытком), таким образом, присвоение вещественного числа целочисленной переменной приводит к округлению его до ближайшего целого (аналогично функции INT).

5.Если присваивается численное выражение типизированной переменной с меньшей точностью (например, Double → Long), VBA

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

6. Если переменной типа String присваивается переменная типа Variant, содержащая число, VBA автоматически преобразует это число в строку.

V. Встроенные математические функции

Таблица 1.4. Некоторые стандартные функции VBA

Функция

Выполняемое действие

Atn(аргумент)

Возвращение арктангенса угла в радианах

Sin (аргумент)

Возвращение синуса угла, заданного в радианах

Cos(аргумент)

Возвращение косинуса угла, заданного в радианах

Tan(аргумент)

Возвращение тангенса угла, заданного в радианах

Exp(аргумент)

Возвращение значения ex, где x — значение переменной

или введенное число

Log(аргумент)

Возвращение натурального ln(x) логарифма числа x

Sqr(аргумент)

Возвращение квадратного куреня числа

Randomize

Запуск генератора случайных чисел

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

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

0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 2

1

11.10.2009, 14:56. Показов 13573. Ответов 8


Студворк — интернет-сервис помощи студентам

Нужна помощь в решении задач VBA (excel)

№1. Поменяйте местами содержимое ячейки А10 (один) и ячейки В10 (два) при нажатии кнопки *замена*.

№2. Начиная с ячейки D2, при нажатии кнопки *сумма* просуммируйте содержимое непустых ячеек строки. Результат поместите в пустую ячейку, следующую за ней непустой.



0



yaser

134 / 79 / 6

Регистрация: 06.04.2009

Сообщений: 192

11.10.2009, 15:50

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub CommandButton1_Click()
Dim sA10 As String
 
  sA10 = Range("A10")
  Range("A10") = Range("B10")
  Range("B10") = sA10
  
End Sub
 
Private Sub CommandButton2_Click()
Dim nColumn As Integer
Dim dbSumm As Double
 
  nColumn = 4
  While Cells(2, nColumn) <> ""
    dbSumm = dbSumm + Cells(2, nColumn)
    nColumn = nColumn + 1
  Wend
  Cells(2, nColumn) = dbSumm
 
End Sub



0



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 2

11.10.2009, 20:32

3

огромное спасибо!!!!



0



3 / 3 / 0

Регистрация: 18.12.2012

Сообщений: 49

30.03.2013, 17:40

4

Извините что поднимаю такую древнюю тему
но не могли бы объяснить 4 задачу. Как так получается что он прямо сумму вставляет после непустой ячейки. я прочитал про offset но это функция сдвига ячеек. Объясните пожалуйста как так получается



0



Почетный модератор

Эксперт по компьютерным сетямЭксперт Windows

28040 / 15771 / 981

Регистрация: 15.09.2009

Сообщений: 67,752

Записей в блоге: 78

30.03.2013, 17:48

5

Цитата
Сообщение от FRINGE
Посмотреть сообщение

не могли бы объяснить 4 задачу.

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



0



Igor_Tr

4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

30.03.2013, 18:45

6

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

Visual Basic
1
2
3
4
Cells([D2].Row, Columns.Count).End(xlToLeft).Offset(0, 2).Value = _
            Application.Sum(Range([D2], Cells([D2]. _
                    Row, Columns.Count).End(xlToLeft)). _
                            SpecialCells(xlCellTypeConstants))



0



3 / 3 / 0

Регистрация: 18.12.2012

Сообщений: 49

31.03.2013, 14:46

7

Цитата
Сообщение от magirus
Посмотреть сообщение

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

ой. вторую задачу то есть



0



971 / 353 / 135

Регистрация: 27.10.2006

Сообщений: 764

31.03.2013, 21:01

8

Igor_Tr, по-моему, проще писать цифру 2, вместо [D2].Row



0



4377 / 661 / 36

Регистрация: 17.01.2010

Сообщений: 2,134

01.04.2013, 03:48

9

to_Pavel55. Что-то совсем не соображаю. Где именно Вы имеете в виду? Вижу только, что в моем выражении не мешало бы подстраховаться вот так

…SpecialCells(xlCellTypeConstants, xlNumbers))

А! Дошло. Да, если точно знаем (но такое бывает очень не часто, лучше (!) привыкать к экстриму сразу). Поэтому здесь как Демо и на ходу, хотелось подсказать, что каким-то образом из какого-то выражения вытягиваем номер ряда ([D2].row). А так — Вы правы. И смотрю, так никто и не обяснил Мэри про While. А у меня праздники…



0



ВНИМАНИЕ Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru
💡 Время нашего ответа обычно составляет не более 10 минут.

Цель работы

Приобретение навыков написания программ на VBA с использованием циклических алгоритмов.

Постановка задания (задача №1)

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

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

Варианты заданий

Сумма (произведение) ряда
1

$S_n = sumlimits_{n = 1}^{50} frac{cos(nx) + sin(nx)}{n + 1}$,
$x$ вводится пользователем с клавиатуры

2 $P_n = prodlimits_{n = 1}^{10} frac{n cdot sin(n + 2)}{n^2 + 2}$
3 $S_n = sumlimits_{n = 1}^{25} frac{n^3 + 5n^2 — 7n + 14 + 2cos(n)}{n^5 + 2n^3 — 4n + 11}$
4 $P_n = prodlimits_{n = 1}^{20} frac{n^4  + 10n^3 — 8n^2 + 15n — 2n + 7}{3n^5 + 2n^3 — n + 17}$
5 $S_n = sumlimits_{n = 1}^{50} frac{sin(nx) — cos(nx)}{n^3 + 4n + 5}$,
$x$ вводится пользователем с клавиатуры
6

$P_n = prodlimits_{n = 1}^{10} frac{a + n}{cos(a^n) cdot n}$,

$a$ вводится пользователем с клавиатуры

7

$S_n = sumlimits_{n = 1}^{100} frac{a cdot sin(a^n)}{n + a}$,
$a$ вводится пользователем с клавиатуры

8

$P_n = prodlimits_{n = 1}^{10} frac{n^x}{n^{x + 1} + 5n}$,

$x$ вводится пользователем с клавиатуры

9 $S_n = sumlimits_{n = 1}^{50} frac{n cdot sin(n)}{n cdot sin(n) + 5n + 4}$
10 $P_n = prodlimits_{n = 1}^{5} frac{cosfrac{1}{n} + n}{cosfrac{1}{n} + n + n^2}$

Образец выполнения (вариант №1)

Условие задания

$S_n = sumlimits_{n = 1}^{50} frac{cos(nx) + sin(nx)}{n + 1}$,

$x$ вводится пользователем с клавиатуры

Решение задачи с использованием макроса на VBA

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

‘ процедура (запускается при помощи макроса), вычисляющая конечную сумму ряда

Sub Sum()

    ‘ раздел объявления переменны

    Dim x As Double         ‘ значение, вводимое пользователем в ячейку A2

    Dim S As Double         ‘ рассчитываемая сумма конечного ряда

    Dim n As Integer        ‘ счетчик цикла с параметром

    Dim current As Double   ‘ значение текущего слагаемого ряда

    ‘ производим очистку от прошлых выводов

    Worksheets(«Task1»).Cells(2, «B»).ClearContents

    S = 0               ‘ перед накоплением суммы необходимое стартовое обнуление

    ‘ считываем значение переменной х, введенное пользователем в ячейку А2

    x = Worksheets(«Task1»).Cells(2, 1)

    ‘ в цикле от 1 до 50 вычисляем очередной член ряда и добавляем к результирующей сумме

    For n = 1 To 50 Step 1

        ‘ получаем значение текущего члена ряда конечной суммы

        current = (Cos(n * x) + Sin(n * x)) / (n + 1)

        ‘ добавляем значение текущего члена к итоговой сумме

        S = S + current

    Next n  ‘ конец цикла со счетчиком

    ‘ выводим значение рассчитанной суммы в ячейку B2

    Worksheets(«Task1»).Cells(2, 2) = S

End Sub

Решение задачи с использованием функции на VBA

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

‘ функция (выбираемая пользователем вручную), вычисляющая конечную сумму ряда

‘ x — входной параметр, значение которого вводит пользователь с клавиатуры в ячейку А2

Function GetSum(x As Double) As Double

    ‘ раздел объявления переменны

    Dim S As Double         ‘ рассчитываемая сумма конечного ряда

    Dim n As Integer        ‘ счетчик цикла с параметром

    Dim current As Double   ‘ значение текущего слагаемого ряда

    ‘ производим очистку от прошлых выводов

    Worksheets(«Task1»).Cells(2, «B»).ClearContents

    S = 0               ‘ перед накоплением суммы необходимое стартовое обнуление

    ‘ в цикле от 1 до 50 вычисляем очередной член ряда и добавляем к результирующей сумме

    For n = 1 To 50 Step 1

        ‘ получаем значение текущего члена ряда конечной суммы

        current = (Cos(n * x) + Sin(n * x)) / (n + 1)

        ‘ добавляем значение текущего члена к итоговой сумме

        S = S + current

    Next n  ‘ конец цикла со счетчиком

    GetSum = S              ‘ возвращаем результат из функции

End Function

Результаты работы программы

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

➡ Важно понимать, что для одного и того же значения переменной $x$, как макрос, так и функция получит одинаковый результат.

РУК. Лабораторная работа №4. Вариант №1. Тестирование задачи через макрос на VBA in Excel

Тестирование через макрос

РУК. Лабораторная работа №4. Вариант №1. Тестирование задачи через функцию на VBA in Excel

Тестирование через функцию

ВНИМАНИЕ Для получения макроса или функции своего варианта пишите на наш электронный адрес proglabs@mail.ru
💡 Время нашего ответа обычно составляет не более 10 минут.

Постановка задания (задача №2)

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

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

Варианты заданий

Условие
1

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

2

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

3

Вычислять и выводить в ячейки рабочего листа члены арифметической прогрессии до тех пор, пока очередной член прогрессии не окажется большим $50$. Первый член арифметической прогрессии равен $2$, разность равна $5$.

4

Вычислять и выводить в ячейки рабочего листа члены геометрической прогрессии до тех пор, пока очередной член прогрессии не окажется большим $250$. Первый член геометрической прогрессии равен $3$, знаменатель равен $4$.

5

Общий член последовательности задан формулой: $a_n = frac{n^2}{5}$. Вычислить сумму $n$ первых членов последовательности, меньших $75$.

6

Общий член последовательности задан формулой: $a_n = frac{5n}{n^2 + 1}$. Вычислить сумму $n$ первых членов последовательности, больших $1$.

7

Общий член последовательности задан формулой: $a_n = frac{n}{5} + 2n + 1$.

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

8

Общий член последовательности задан формулой: $a_n = frac{n}{3} + n + 4$.

Вычислять произведение первых $n$ членов последовательности до тех пор, пока произведение не окажется большим $1000$. Вывести значение произведения и последнего $n$-го члена последовательности.

9

Первый член арифметической прогрессии равен $-50$, разность равна $7$. Вывести на в ячейки рабочего листа все члены данной арифметической прогрессии, меньшие нуля.

10

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

Образец выполнения (вариант №1)

Условие задания

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

Решение задачи с использованием макросов на VBA

Всего было закодировано $5$ различных макросов для всех видов циклов с пред- и постусловием.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

‘ решение задачи с использование цикла While-Wend

Sub While_Wend()

    ‘ раздел объявления переменных

    Dim x As Integer    ‘ значение, вводимое пользователем с клавиатуры

    Dim P As Long       ‘ накапливаемое произведение вводимых чисел

    P = 1       ‘ при расчете произведения следует присвоить изначально результату 1

    ‘ запрашиваем 1ое число от пользователя

    x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    ‘ пока пользователь не введет число, равное единице, продолжаем вычисления

    ‘ цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ

    While (x <> 1)

        P = P * x

        ‘ запрашиваем очередное число от пользователя

        x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    Wend

    ‘ выводим накопленное произведение в соот-щую ячейку листа Excel

    Worksheets(«Task2»).Cells(5, «B») = P

End Sub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

‘ решение задачи с использование цикла Do While-Loop

Sub Do_While_Loop()

    ‘ раздел объявления переменных

    Dim x As Integer    ‘ значение, вводимое пользователем с клавиатуры

    Dim P As Long       ‘ накапливаемое произведение вводимых чисел

    P = 1       ‘ при расчете произведения следует присвоить изначально результату 1

    ‘ запрашиваем 1ое число от пользователя

    x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    ‘ пока пользователь не введет число, равное единице, продолжаем вычисления

    ‘ цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ

    Do While (x <> 1)

        P = P * x

        ‘ запрашиваем очередное число от пользователя

        x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    Loop

    ‘ выводим накопленное произведение в соот-щую ячейку листа Excel

    Worksheets(«Task2»).Cells(6, «B») = P

End Sub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

‘ решение задачи с использование цикла Do Until-Loop

Sub Do_Until_Loop()

    ‘ раздел объявления переменных

    Dim x As Integer    ‘ значение, вводимое пользователем с клавиатуры

    Dim P As Long       ‘ накапливаемое произведение вводимых чисел

    P = 1       ‘ при расчете произведения следует присвоить изначально результату 1

    ‘ запрашиваем 1ое число от пользователя

    x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    ‘ пока пользователь не введет число, равное единице, продолжаем вычисления

    ‘ цикл выполняется, пока условие в заголовке цикла является ЛОЖНЫМ

    Do Until (x = 1)

        P = P * x

        ‘ запрашиваем очередное число от пользователя

        x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

    Loop

    ‘ выводим накопленное произведение в соот-щую ячейку листа Excel

    Worksheets(«Task2»).Cells(7, «B») = P

End Sub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

‘ решение задачи с использование цикла Do-Loop While

Sub Do_Loop_While()

    ‘ раздел объявления переменных

    Dim x As Integer    ‘ значение, вводимое пользователем с клавиатуры

    Dim P As Long       ‘ накапливаемое произведение вводимых чисел

    P = 1       ‘ при расчете произведения следует присвоить изначально результату 1

    ‘ пока пользователь не введет число, равное единице, продолжаем вычисления

    ‘ цикл выполняется, пока условие в заголовке цикла является ИСТИННЫМ

    Do

        ‘ запрашиваем очередное число от пользователя

        x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

        ‘ если введенное число не равно 1, то пересчитываем произведение

        If (x <> 1) Then

            ‘ пересчитываем произведение

            P = P * x

        End If

    Loop While (x <> 1)

    ‘ выводим накопленное произведение в соот-щую ячейку листа Excel

    Worksheets(«Task2»).Cells(8, «B») = P

End Sub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

‘ решение задачи с использование цикла Do-Loop Until

Sub Do_Loop_Until()

    ‘ раздел объявления переменных

    Dim x As Integer    ‘ значение, вводимое пользователем с клавиатуры

    Dim P As Long       ‘ накапливаемое произведение вводимых чисел

    P = 1       ‘ при расчете произведения следует присвоить изначально результату 1

    ‘ пока пользователь не введет число, равное единице, продолжаем вычисления

    ‘ цикл выполняется, пока условие в заголовке цикла является ЛОЖНЫМ

    Do

        ‘ запрашиваем очередное число от пользователя

        x = InputBox(«Введите число х: «, «Сообщение для пользователя»)

        ‘ если введенное число не равно 1, то пересчитываем произведение

        If (x <> 1) Then

            ‘ пересчитываем произведение

            P = P * x

        End If

    Loop Until (x = 1)

    ‘ выводим накопленное произведение в соот-щую ячейку листа Excel

    Worksheets(«Task2»).Cells(9, «B») = P

End Sub

Результаты работы программы

Программа имеет следующий интерфейс:

Интерфейс программы. РУК. Лабораторная работа №4. Задача №2. VBA in Excel

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

Список из 5 макросов

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

Будем последовательно вводить следующие числа: $2$, $5$, $4$, $3$, $1$. При вводе числа $1$ программа прекратит свое исполнение и отобразит результат в соответствующей ячейке.

Каким должен быть ответ? Наша цель — найти произведение введенных чисел, то есть ответ будет равен — $2 cdot 5 cdot 4 cdot   3 = 120$.

Тестирование макроса While-Wend

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

Конечный результат отработки всех макросов

💡 Делаем вывод, что все макросы отработали успешно и все заданные циклы с пред- и постусловием отработали корректно.

ВНИМАНИЕ Для получения $5$ процедур своего варианта пишите на наш электронный адрес proglabs@mail.ru
💡 Время нашего ответа обычно составляет не более 10 минут.

Понравилась статья? Поделить с друзьями:
  • Vba excel задать шрифт
  • Vba excel задать цвет текста ячейки
  • Vba excel задать условие
  • Vba excel для mac os
  • Vba excel для ipad