ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» Кафедра прикладной математики ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе по дисциплине «Информатика» на тему: «Создание автоматизированных бланков отчетности в MSExcel с использованием встроенного языка VBA for applications» Выполнил студент гр.____________ ____________ Руководитель работы _______________________________ Донецк, 2019 1 Содержание Введение ...................................................................................................................... 2 1. Постановка задачи...................................................................................................... 3 2. Теоретическая часть ................................................................................................... 5 3. Описание алгоритма решения задачи ...................................................................... 7 4. Инструкция пользователя ........................................................................................ 18 5. Заключение ............................................................................................................... 19 Список использованных источников и литературы ............................................. 20 Приложения .............................................................................................................. 21 2 ВВЕДЕНИЕ Microsoft Excel (также иногда называется Microsoft Office Excel) — программа для работы с электронными таблицами, созданная корпорацией Microsoft для Microsoft Windows, Windows NT и Mac OS, а также Android, iOS и Windows Phone. Она предоставляет возможности экономико-статистических расчетов, графические инструменты и, за исключением Excel 2008 под Mac OS X, язык макропрограммирования VBA (Visual Basic for Application). Microsoft Excel входит в состав Microsoft Office и на сегодняшний день Excel является одним из наиболее популярных приложений в мире. В данной работе представлены автоматизированные отчеты, которые позволяют формировать ведомость учета услуг междугородней телефонной связи для абонентов квартирного сектора Курсовая работа была выполнена на ПК с такими характеристиками: Модель Lenovo IdeaPad 100S-11IBY Дисплей 11.6"/1366x768 пикс. Операционная Windows 10 Процессор Intel Atom Z3735F 1.33ГГц 3 1 ПОСТАНОВКА ЗАДАЧ Справочные данные о тарифах на услуги междугородней телефонной связи для абонентов квартирного сектора приведены на рис. 1. Бланк «Квитанция для оплаты телефонных разговоров» представлен на рис. 2. Поля Дата, Наименование города, Минут заполняются пользователем. Необходимо: 1. построить таблицу по приведенным ниже табличным данным (рис. 1); 2. автоматизировать заполнение бланка «Квитанция для оплаты телефонных разговоров» (рис. 2), используя данные справочных таблиц (рис. 1); 3. рассчитать и заполнить форму «Выборка оплаты по выбранной дате и городу» (рис. 3), где по вводимой пользователем дате и наименованию города с помощью макроса из таблицы «Квитанция для оплаты телефонных разговоров» выбирается необходимая информация; 4. заполнить форму «Итоговые суммы по городам» (рис.4), в которой выполняется расчет общей суммы оплаты по каждому городу с помощью функции, определенной разработчиком проекта. Тарифы на услуги междугородней телефонной связи ОАО "Ростелеком" для абонентов квартирного сектора Наименование города Код города в рабочие в выходные дни, дни, руб. руб. Волгоград 8442 5,50 3,20 Киров 8332 5,50 3,20 Новосибирск 3832 6,50 3,80 Пенза 8412 4,50 2,50 Челябинск 3442 6,50 3,80 Рис. 1. Тарифы на услуги междугородней телефонной связи для абонентов квартирного сектора 4 Квитанция для оплаты телефонных разговоров Номер телефона 555-44-33 Наименование Дата Код города города Стоимость, Минут 15.01.2006 2 16.01.2006 6 17.01.2006 8 18.01.2006 3 23.01.2006 10 Итого Рис. 2. Квитанция для оплаты телефонных разговоров Введите дату __________ Город _____________ Стоимость, Дата Минут руб. Итого Рис. 3 Выборка оплаты по выбранной дате и городу Наименование города Стоимость, руб. Волгоград Киров Пенза Челябинск Новосибирск Рис. 4 Итоговые суммы по городам руб. 5 2 ТЕОРЕТИЧЕСКАЯ ЧАСТЬ Курсовая работа была выполнена в программе Microsoft Excel, которая предназначена для работы с электронными таблицами, созданная корпорацией Microsoft для Microsoft Windows. Она предоставляет возможности экономикостатистических расчетов, графические инструменты и, за исключением Excel 2008 под Mac OS X, язык макропрограммирования VBA. Microsoft Excel входит в состав Microsoft Office и на сегодняшний день Excel является одним из наиболее популярных приложений в мире. В ходе ее выполнения были использованы различные функции. Рассмотрим их. 1. Функция ЕСЛИ возвращает одно значение, если указанное условие дает в результате значение ИСТИНА, и другое значение, если условие дает в результате значение ЛОЖЬ. Например, формула =УСЛИ(А1>10, “Больше 10”, “10 или меньше”) возвращает строку “Больше 10”, если значение в ячейке А1 больше 10, и “10 или меньше”, если оно меньше или равно 10. 2. Функция ЕСЛИОШИБКА в Microsoft Excel похожа на функцию ЕСЛИ. Данная функция возвращает указанное значение, если вычисление по формуле вызывает ошибку; в противном случае функция возвращает результат формулы. Функция ЕСЛИОШИБКА позволяет перехватывать и обрабатывать ошибки в формулах. 3. Функция ПРОСМОТР возвращает значение из строки, столбца или массива. Функция дает две синтаксических формы: векторную и форму массива. 4. Функция ИЛИ возвращает значение ИСТИНА, если хотя бы один из аргументов имеет значение ИСТИНА или ЛОЖЬ, если все аргументы имеют значение ЛОЖЬ. 5. Функция ДЕНЬНЕД возвращает день недели, соответствующий дате. По умолчанию день недели определяется как целое число в интервале от 1 (воскресенье) до 7 (суббота). 6 6. Макрокоманда, макроопределение или макрос – программный алгоритм действий, записанный пользователем. Часто макросы применяют для выполнения рутинных действий. А также макрос – это символьное имя в шаблонах, заменяемое при обработке препроцессором на последовательность символов, например: фрагмент html-страницы в веб-шаблонах, или одно слово из словаря синонимов в синонимизаторах. 7. Visual Basic for Applications (VBA, Visual Basic для приложений) – немного упрощенная реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office. VBA является интерпретируемым языком. Как и следует из его названия, VBA близок к Visual Basic. VBA, будучи языком, построенным на COM, позволяет использовать ее все доступные в операционной системе COM объекты и компоненты ActiveX. 7 3 ОПИСАНИЕ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧ Для решения задачи необходимо: 1. Запустить табличный процессор MS Excel. 2. Создать книгу с именем «Курсовая». 3. Лист 1 переименовать в лист с названием тарифы. 4. На рабочем листе тарифы MS Excel создать таблицу базового прайс-листа и заполнить ее исходными данными (см. рис. 1). На листе создать именованный диапазон город, который необходимо использовать для заполнения данными других таблиц и как аргумент функций. Рис. 1 Фрагмент листа тарифы 5. Лист 2 переименовать в лист с названием Квитанция для оплаты. 6. Создание бланка формы «Квитанция для оплаты» необходимо выполнять автоматически, а следовательно необходимо создать с помощью макрорекордера макрос, который запишет последовательность действий, создающих бланк формы. Для того чтобы создать макрос необходимо выполнить следующие действия: выбрать вкладку Вид, а затем щелкнуть на стрелке направленной вниз рядом с кнопкой и выбрать опцию Запись макроса. Заполнить диалоговое окно Запись макроса (см. рис. 2); 8 Рис. 2. Диалоговое окно Запись макроса выполнить удаление с листа предыдущей информации; создать структуру таблицы, в которой будет содержаться список заказов, выполняемых предприятием, используя для ввода данных поля со списками, там где это необходимо; в ячейку C2 листа Квитанция для оплаты ввести следующую формулу =ЕСЛИОШИБКА(ПРОСМОТР(B2;Код;Тарифы!$A$2:$A$5);" ") и скопировать ее в смежные ячейки вниз по столбцу; в ячейку E2 листа Квитанция для оплаты ввести следующую формулу =ЕСЛИОШИБКА(ЕСЛИ(ИЛИ(ДЕНЬНЕД(A2;2)=6;ДЕНЬНЕД(A2;2)=7); ПРОСМОТР(B2;Код;Тарифы!$D$2:$D$5);ПРОСМОТР(B2;Код;Тарифы! $C$2:$C$5))*D2;" ") и скопировать ее в смежные ячейки вниз по столбцу; по завершении выполнения требуемых действий необходимо выбрать вкладку Вид, а затем щелкнуть на стрелке направленной вниз рядом с кнопкой и выбрать опцию Остановить запись; 9 для того, чтобы с рабочей книгой мог работать пользователь, не являющийся разработчиком проекта, необходимо закрепить выполнение макроса за кнопкой , для этого нужно: выбрать вкладку Разработчик, а затем щелкнуть на стрелке направленной вниз рядом с кнопкой Вставить (см. рис. 3) и в списке Элементы управления выбрать управляющий элемент Кнопка; разместить управляющий элемент Кнопка на рабочем листе список заказов и назначить ей макрос Список_заказов_бланк (см. рис. 4), переименовать кнопку, дать ей имя Бланк. Рис. 3 Добавление элемента управления на лист MS Excel 10 Рис. 4. Назначение макроса элементу управления Кнопка: щелчок мыши по кнопке запустит на выполнение назначенный ей макрос В результате с помощью щелчка мышью по кнопке Бланк можно сформировать бланк формы Квитанция для оплаты (см. рис. 5). Следующим этапом решения задачи является ввод в бланк формы исходных данных (см. рис. 6). Текст кода макроса приведен в приложении 4. Рис. 5. Бланк формы Квитанция для оплаты 11 Рис. 6. Заполненная форма Квитанция для оплаты 7. Добавить новый лист и переименовать в лист с названием выборка по дате и городу. Создание бланка формы «выборка по дате и городу» необходимо выполнять автоматически, а следовательно необходимо создать с помощью макрорекордера макрос, который запишет последовательность действий, создающих бланк формы. Создание макроса с помощью макрорекордера и назначение его выполнения кнопке нужно выполнить аналогично предыдущему заданию. Результаты работы макроса по созданию бланка формы «выборка по дате и городу» приведены на рисунке 7. Рис. 7. Бланк формы «выборка по дате и городу» Обработку формы необходимо выполнить с помощью процедуры, блоксхема которой представлена на рисунке 8, а текст кода приведен в приложении 1. 12 Рис. 8. Блок-схема процедуры обработки формы «выборка по городу и дате» Порядок создания процедуры обработки формы «выборка по городу и дате»: перейти в редактор VBA щелкнуть на кнопке ; выбрав вкладку Разработчик, а затем 13 в окне Редактор Visual Basic (см. рис. 9) в меню редактора выбрать последовательно опции Insert Module. В появившемся окне создать процедуру, которая решает поставленную задачу; Рис. 9. Окно Редактор Visual Basic исходным данным для обработки является введенные в ячейки B1 и D1 значения ; проверку выполнения макроса выполнить щелкнув на кнопке окна Редактор Visual Basic результаты работы макроса, вызываемого на выполнение щелчком мыши по кнопке Обработать приведены на рисунке 10. Рис. 10. Заполненная форма выборки данных по названию города и дате 14 8. Добавить новый лист и переименовать в лист с названием итоговые суммы по городам. Создание бланка формы «Итоговые суммы по городам» необходимо выполнять автоматически, а следовательно необходимо создать с помощью макрорекордера макрос, который запишет последовательность действий, создающих бланк формы. Создание макроса с помощью макрорекордера и назначение его выполнения кнопке выполнить аналогично предыдущим заданиям. Результаты работы макроса по созданию формы «Форма заказа по номеру» приведены на рисунке 11. Рис. 11. Бланк формы «Итоговые суммы по городам» Обработку формы необходимо выполнить с помощью функции пользователя, блок-схема которой представлена на рисунке 12, а текст кода приведен в приложении 1. 15 Рис. 11. Блок-схема процедуры обработки формы «Итоговые суммы по городам» Порядок создания функции пользователя для обработки формы «Итоговые суммы по городам» аналогичен предыдущим заданиям. После ввода кода функции, необходимо перейти на лист MS Excel Итоговые суммы по городам и щелкнуть на ячейке B2, где будет рассчитываться итоговая сумма для города, наименование которого введено в ячейку A2. Затем вызвать мастер функции и в категории Определенные пользователем выбрать функцию общая_сумма (см. рис. 12), а затем в 16 появившемся окне указать аргументы функции (см. рис. 13), скопировать полученную формулу в смежные ячейки. Рис. 12. Выбор с помощью мастера функции, созданной пользователем Рис. 13. Диалоговое окно Аргументы функции для функции, созданной пользователем Сформированная форма «Итоговые суммы по городам» приведены на рисунке 14. 17 Рис. 14. Заполненная форма «Итоговые суммы по городам» 18 4 ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ Для работы с книгой необходимо: 1. Запустить программу MS Excel. 2. Открыть книгу «Курсовая работа». 3. Открыть лист «квитанция для оплаты», нажать на кнопку «Бланк 1», которая запустит наш макрос. Он очистит ячейки, создаст таблицу и запишет необходимые формулы. 4. Необходимо заполнить таблицу данными. 5. Перейти на лист «выборка по дате и городу» 6. Нажать кнопку «Бланк», которая создаст таблицу. 7. Выбрать название города в ячейке D1 и ввести дату в ячейку B1. После нажать на кнопку «код». Будут выполнены все необходимые нам расчеты. 8. Перейти на лист «Итоговые суммы по городам». 9. Нажать на кнопку «Бланк» которая создаст таблицу. 10.Вызвать функцию «общая сумма» в ячейке В2 в качестве Аргумента Ячейку А2, которая посчитает общую сумму по городам. 11.Сохранить информацию. 19 5 ЗАКЛЮЧЕНИЕ Все задачи – создание таблиц, запись макросов и создание собственных функций – были успешно выполнены. Был приобретен опыт работы с MS Excel, приобрели навыки построения таблиц и записи макросов, получили возможность создавать свои собственный функции и писать инструкции для посторонних пользователей. В процессе решения поставленных задач было подтверждено высказывание о том, что MS Excel чрезвычайно удобен для работы с электронными таблицами и вычислениями в них. Его возможности охватывают широкий круг задач, которые могут удовлетворить практически любой пользователь, а простота использования позволяет практически любому пользователю успешно справляться с работой в программе. 20 Список использованных источников и литературы 1. Экономико-математические модели и методы: Учеб. Пособие для студ. экон. спец . БГУИР, всех форм обуч. / С.А. Поттосина, В.А.Журавлев. – Мн.: БГУИР, 2003. – 94 с.: ил. 2. Алесинская Т.В. Учебное пособие по решению задач по курса “Экономико-математические методы и модели”. Таганрог: Изд-во ТРТУ 2002, 153 с. 3. Расторгуев, Д.Н. Методические рекомендации к практическим занятиям по компьютерному моделированию социально-экономических процессов. – Ульяновск: УлГТУ, 2006. – 32 с. 4. Кутузов А.Л. Математические методы в экономике и менеджменте Учеб пособие. СПб.: Изд-во СПб ГТУ 2001. 5. Курицкии Б.Я. Поиск оптимальных решений средствами Excel 7 0. СПб.: БХВ – Санкт-Петербург, 1997. 21 Приложение Sub квитанция_бланк() ' ' квитанция_бланк Макрос ' ' Cells.Select Selection.Clear Range("A1").Select ActiveCell.FormulaR1C1 = "дата" Range("B1").Select ActiveCell.FormulaR1C1 = "код города" Range("C1").Select ActiveCell.FormulaR1C1 = "город" Range("D1").Select ActiveCell.FormulaR1C1 = "минуты" Range("E1").Select ActiveCell.FormulaR1C1 = "стоимсоть, руб" Range("A1:F1").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Font.Bold = True Range("A1:E17").Select 22 Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Columns("A:A").ColumnWidth = 13.43 Columns("B:B").ColumnWidth = 14.29 Columns("D:D").ColumnWidth = 18.86 Columns("C:C").ColumnWidth = 14.57 Columns("E:E").ColumnWidth = 16.43 Range("B2:B17").Select With Selection.Validation 23 .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Код" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Range("C2").Select ActiveCell.FormulaR1C1 = "=IFERROR(LOOKUP(RC[1],Код,Тарифы!R2C1:R5C1),"" "")" Selection.AutoFill Destination:=Range("C2:C17"), Type:=xlFillDefault Range("C2:C17").Select Range("E2").Select ActiveCell.FormulaR1C1 = _ "=IFERROR(IF(OR(WEEKDAY(RC[-4],2)=6,WEEKDAY(RC[4],2)=7),LOOKUP(RC[-3],Код,Тарифы!R2C4:R5C4),LOOKUP(RC[3],Код,Тарифы!R2C3:R5C3))*RC[-1],"" "")" Selection.AutoFill Destination:=Range("E2:E17"), Type:=xlFillDefault Range("E2:E17").Select End Sub Sub задание3() ' ' задание3 Макрос ' ' Cells.Select Selection.Clear Range("A1").Select ActiveCell.FormulaR1C1 = "Введите дату" Range("C1").Select ActiveCell.FormulaR1C1 = "Город" Range("D1").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 24 xlBetween, Formula1:="=город" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Range("B2").Select ActiveCell.FormulaR1C1 = "Дата" Range("C2").Select ActiveCell.FormulaR1C1 = "Минуты" Range("D2").Select ActiveCell.FormulaR1C1 = "Стоимость" Range("A1:D2").Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Font.Bold = True Columns("A:A").ColumnWidth = 13.71 Columns("A:A").ColumnWidth = 17.29 Columns("C:C").ColumnWidth = 13 Columns("D:D").ColumnWidth = 14.57 Range("B2:D15").Select 25 Selection.Borders(xlDiagonalDown).LineStyle Selection.Borders(xlDiagonalUp).LineStyle = With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("A1:D1").Select Selection.Borders(xlDiagonalDown).LineStyle Selection.Borders(xlDiagonalUp).LineStyle = With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 = xlNone xlNone = xlNone xlNone 26 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("E3").Select End Sub Sub задание4() Cells.Select Selection.Clear Range("A1").Select ActiveCell.FormulaR1C1 = "наименование города" Range("B1").Select ActiveCell.FormulaR1C1 = "стоимость, руб." Range("A1:B1").Select 27 With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Font.Bold = True Columns("A:A").ColumnWidth = 13.86 Columns("B:B").ColumnWidth = 24.86 Columns("A:A").ColumnWidth = 22.57 Columns("A:A").ColumnWidth = 25.86 Range("A2").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=город" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Selection.AutoFill Destination:=Range("A2:A7"), Type:=xlFillDefault Range("A2:A7").Select 28 Range("A1:B10").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Range("D5").Select End Sub 29 Sub список() Dim город As String, i As Integer, s As Double, n As Integer, j As Integer, дата_ As Date Dim дата(1 To 30) As Date, минуты(1 To 30) As Integer, стоимость(1 To 30) As Double город = Cells(1, 4) дата_ = Cells(1, 2) Range("A3:E25").Select Selection.Clear Sheets("Квитанция для оплаты ").Select i = 1 j = 2 s = 0 Do While Cells(j, 3) <> "" If Cells(j, 1) = дата_ And Cells(j, 3) = город Then дата(i) = Cells(j, 1) минуты(i) = Cells(j, 4) стоимость(i) = Cells(j, 5) s = s + стоимость(i) i = i + 1 j = j + 1 Else j = j + 1 End If Loop n = i - 1 Sheets("выборка по дате и городу").Select j = 3 For i = 1 To n Cells(j, 2) = дата(i) Cells(j, 3) = минуты(i) Cells(j, 4) = стоимость(i) j = j + 1 Next i Cells(j + 1, 3) = "Итого по " + город Cells(j + 1, 4) = s End Sub 30 Function общая_сумма(город As String) As Double Dim i As Integer, s As Double i = 2 s = 0 Do While Worksheets("Квитанция для оплаты ").Cells(i, 3) <> "" If Worksheets("Квитанция для оплаты ").Cells(i, 3) = город Then s = s + Worksheets("Квитанция для оплаты ").Cells(i, 5) End If i = i + 1 Loop общая_сумма = s End Function