У меня небольшая проблема, когда мне нужно создать вектор в EXCEL VBA .
У меня есть следующий сценарий
Например, если ячейка в C12 равна 11, я хочу получить следующий результат:
ЦИФРЫ
БУКВЫ
ОБНОВИТЬ
ПОВОРОТНЫЕ ПИСЬМА:
Вы не указали, что произойдет, если значение превышает последнее письмо, поэтому я выдаю ошибку. Это то, что вы хотите?
EDIT # 1:
Чтобы получить буквенный вектор, используйте:
——-РЕШЕНИЕ———–
Вот решение проблемы выше:
Что он делает, так это то, что он получает значение “11” из “Листы” (“Индата”). Диапазон (“$ C $ 12”). Значение и возвращает вектор:
—-Code использовать буквы вместо numbers—–
Dim M As Long, vectorA As String
M = Листы (“Индата”). Диапазон (“$ C $ 13”).
vectorA = Join (Оценить (“транспонировать (char (строка (65:” & M + 64 & “))))))
Что он делает, так это то, что он получает значение 11 из Sheets (“Indata”). Range (“$ C $ 13”). Значение и возвращает вектор:
- Введение
- 1 Первые шаги
- 2 Структуры пространства имен System.Drawing
- 3 Создание графических объектов
- 3.1 Задание координат точки
- 3.2 Прямая линия
- 3.3 Эллипс
- Автоматизация рутины в Microsoft Excel при помощи VBA
- Чуть-чуть подготовки и постановка задачи
- Кодим
- Кодим много и под Excel
- Работа с диапазонами ячеек
- 💥 Видео
Видео:Зачем нужен ВЕКТОР. Объяснение смыслаСкачать
Введение
Тема, рассматриваемая в данном реферате, очень важна, так как строить графики очень сложно и мало кто знает как правильно это делать. Реферат адресован всем пользователям, кто хочет научиться строить графики и разобраться как это делать в Visual Basic.
Создание хорошего интерфейса является важным компонентом любого пользовательского приложения. Visual Basic 2010 предлагает множество графических средств для улучшения интерфейса: создание линий, фигур и текста, размещение изображений на форме, добавление анимации в приложение и многое другое.
В Visual Basic 2010 для работы с графикой используется интерфейс GDI+, представляющий собой усовершенствованный GDI (Graphics Device Interface, GDI) и позволяющий с помощью различных графических методов и свойств размещать графические объекты на форме или элементах управления
PictureBox . Пространство имен System.Drawing обеспечивает доступ к базовым средствам GDI+ . Более сложные средства предоставляют пространства имен System.Drawing.Drawing2D , позволяющее работать с двумерной и векторной графикой, System.Drawing.Imaging, предлагающее дополнительные инструменты для работы с изображениями, и System.Drawing.Text , предна-значенное для работы с текстом.
При помощи графики в Visual Basic 2010 можно создавать графические объекты, текст, управлять графическими изображениями как объектами. Интерфейс GDI+ полностью заменил GDI и является единственным программным способом построения и расположения графики в приложениях Windows. В момент разработки можно также использовать Image Editor.
Видео:Что такое VBAСкачать
1 Первые шаги
Для построения объектов на форме необходимо познакомиться со структурами, позволяющими задавать основные атрибуты фигур (размер, цвет, расположение), с классами, с помощью которых можно задать различные параметры фигур (тип линии, вид заливки, шрифт текста), и перечислениями пространства имен System . Drawing . Не менее важным является класс Graphics этого пространства имен. С его помощью на форме или элементе управления можно расположить линии, фигуры, текст, изображения. Поэтому, приступая к работе с графикой, в первую очередь необходимо создать объект Graphics , который используется в качестве поверхности для рисования, а также предназначен для создания графических изображений. Объект Graphics можно создать несколькими способами.
С помощью ссылки на графический объект, являющийся частью PaintEventArcs в событии Paint или методе OnPaint . Данный способ наиболее распространенный. Например :
Protected Overrides Sub OnPaint(ByVal e As _ System.Windows.Forms.PaintEventArgs)
Dim g As Graphics=e.Graphics
Замечание : Также для работы с графикой предназначен метод OnPaintBackground. Он используется при создании фона элемента управления.
С помощью метода CreateGraphics элемента управления или формы. Дан-ный способ обычно применяется, когда форма или элемент управления уже существуют: Dim g As Graphics = Me . CreateGraphics
Используя метод FromHwnd класса Graphics . Этот метод в качестве параметра содержит указатель на окно:
Dim hwnd As IntPtr = Me.Handle
Dim g As Graphics = Graphics.FromHwnd(hwnd)
Замечание :С помощью метода Dispose высвобождаются используемые объектом Graphics ресурсы.
С помощью метода Graphics.FromImage , указывающего имя изображения,используемое для создания объекта Graphics . Метод применяется, когда требуется изменить существующее изображение или создать новое изображение в памяти:
Dim myBitmap As New Bitmap(«C:Мои документыМоирисункиMyPic.bmp»)
Dim g As Graphics = Graphics.FromImage(myBitmap) g.Dispose()
Замечание : Чтобы можно было использовать классы, структуры и перечисления пространства имен System . Drawing , следует импортировать данное пространство имен и при необходимости подключить библиотеку System.Drawing.dll с по-мощью окна Add Reference (Добавить ссылку), открываемого одноименной командой меню Project (Проект).
Видео:Excel VBA Улучшить таблицу = разложить по вектору разделителяСкачать
2 Структуры пространства имен System.Drawing
Теперь познакомимся со структурами пространства имен System . Drawing (табл.1.), позволяющими задать координаты, размеры, цвет объектов. Хотя нередко можно обойтись без данных структур, они делают код более понятным и удобным.
Таблица 1 – Структуры пространства имен System . Drawing
Позволяет задать ARGB -цвета объекта, где A –основная составляющая, R, G, B красная, зеленая и синяя составляющие соответственно.
Задает целочисленные координаты точки на плоскости
Определяет расположение точки на плоскости. Координаты имеют тип Single
Содержит информацию о расположении и размере прямоугольника.Все данные типа Integer
Содержит информацию о расположении и размере прямоугольника.Все данные типа Single
Определяет размер двумерного объекта с помощью пары объектов типа Integer , задающих высоту и ширину объекта
Определяет размер двумерного объекта с помощью пары объектов типа Single , задающих высоту и ширину объекта
Замечание : Так как структуры PointF , RectangleF , SizeF аналогичны структурам Point , Rectangle , Size и отличаются лишь типом данных, будем рассматривать только последние. Более того, структуры PointF , RectangleF , SizeF можно легко перевести в структуры Po i nt, Rectangle , Size с помощью методов Ceiling , Round и Truncate
Видео:Программирование макросов на VBA в ExcelСкачать
3 Создание графических объектов
Видео:VBA для начинающих - Первые шаги - Новый курс VBA (2)Скачать
3.1 Задание координат точки
Создавая графические объекты на форме, часто приходится задавать координаты той или иной точки. Например, при создании линии или дуги необходимо указать расположение начальной и конечной точек, при построении многоугольника требуется задать координаты всех вершин.
Для задания координат точки предназначена структура Point. Она имеет конструкторы, которые позволяют создавать экземпляры класса либо по размеру объекта (sz), либо по координатам (x, y):
Sub New(ByVal sz As Size)
Sub New(ByVal x As Integer, ByVal y As Integer)
Структура Point имеет свойства, описанные в табл.2.
Таблица 2. Свойства структуры Point
Определяет, равны ли координаты нулю или нет. Если равны,то возвращает значение True, иначе — False
Возвращает или устанавливает целочисленную X -координату точки
Возвращает или устанавливает целочисленную Y -координату точки
Кроме того, из структуры PointF можно получить структуру Point , переместить точку и сравнить координаты двух точек. Для этого нужно воспользоваться одним из методов структуры Point (табл.3).
Таблица 3. Методы структуры Point
Позволяет получить новую точку из уже существующей pt путем прибавления размера sz.
Function Add(ByVal pt As Point, ByVal sz As Size) As Point
Позволяет из структуры PointF получить структуру Point . С этой целью округляется значение координат структуры value в бґольшую сторону. Function Ceiling(ByVal value As PointF) As Point
Сравнивает координаты точек и, если они равны, возвращает значение
True , иначе — False .
Function Equals(ByVal obj As Object) As Boolean
где obj — точка, с которой сравнивают данную точку
Смещает точку на величину dx по оси абсцисс и на величину dy по оси ординат. Данный метод используется только для структуры Point .
Sub Offset(ByVal dx As Integer, ByVal dy As Integer)
Позволяет перевести структуру PointF в целочисленную структуру Point , округляя значение координат структуры value по правилам округления.
Function Round(ByVal value As PointF) As Point
Позволяет получить новую точку из уже существующей pt путем вычитания размера sz .
Function Subtract(ByVal pt As Point, ByVal sz As Size) As Point
Округляет значения координат структуры PointF в меньшую сторону,тем самым переводя ее в новую структуру Point .
Function Truncate(ByVal value As PointF) As Point
Следующий код создает точку и перемещает ее:
Dim pntf As New PointF(10.5F, 25.5F)
Dim pnt As Point = Point.Truncate(pntf) pnt.Offset(5, -10)
Видео:Что такое вектора? | Сущность Линейной Алгебры, глава 1Скачать
3.2 Прямая линия
Для создания прямых линий предназначен метод DrawLine класса Graphics. Данный метод позволяет нарисовать отрезок по двум точкам и виду линии, используя один из следующих синтаксисов:
Sub DrawLine(ByVal pen As Pen, ByVal pt1 As Point, ByVal pt2 As Point)
Sub DrawLine(ByVal pen As Pen, ByVal x1 As Integer,
ByVal y1 As Integer, ByVal x2 As Integer,
ByVal y2 As Integer)
pen — перо, используемое для рисования линии. Определяет цвет, ширину и вид линии;
pt1, pt2 — начальная и конечная точки отрезка. Могут также являться структурами PointF ;
x1, y1, x2, y2 — координаты начальной и конечной точек отрезка. Данные параметры могут иметь тип Single .
Следующий пример позволяет создать расчерченную плоскость с осями, показанную на рис. 8.4:
Sub DrawLineExample(ByVal e As PaintEventArgs)
Dim g As Graphics = e.Graphics
Dim pnXY As New Pen(Color.Black, 3)
‘ Ширина и высота клетки
Dim width As Integer = 12, height As Integer = 10
‘ Число клеток по горизонтали и вертикали
Dim countX As Integer = 15, countY As Integer = 25
For i As Integer = 1 To countX
For j As Integer = 1 To countY
g.DrawLine(Pens.Black, width, height * i,width * countY, height * i)
g.DrawLine(Pens.Black, width * j, height,width * j, height * countX)
If i = Math.Ceiling(countX / 2) Then
g.DrawLine(pnXY, width, height * i,
width * (countY + 1), height * i)
If j = Math.Ceiling(countY / 2) Then
g.DrawLine(pnXY, width * j, height * countX,width * j, 0)
Рис.1. Создание расчерченной плоскости с осями
Видео:Vector en VBA excelСкачать
3.3 Эллипс
Пожалуй, ни один графический интерфейс не может обойтись без построения кругов и эллипсов. Интерфейс GDI + не исключение. Для этой цели существует метод DrawEllipse класса Graphics пространства имен System . Drawing .
Данный метод имеет следующий синтаксис:
Sub DrawEllipse(ByVal pen As Pen, ByVal rect As Rectangle)
Sub DrawEllipse(ByVal pen As Pen, ByVal x As Integer,
ByVal y As Integer, ByVal width As Integer, ByVal height As Integer)
pen – перо, используемое при рисовании эллипса. Определяет цвет, ширину и вид линии;
rect -структура Rectangle , задающая расположение, ширину и размер
эллипса. Данный параметр может являться также структурой RectangleF ;
x, y, width, height- расположение, ширина и высота эллипса. Данные параметры могут иметь тип Single .
Приведем простой пример использования метода DrawEllipse . Результат выполнения представлен на рис.2, а код программы имеет следующий вид:
Sub DrawEllipseExample(ByVal e As PaintEventArgs)
Dim g As Graphics = e.Graphics
Dim horizEllipse As New Rectangle(20, 20, 200, 100)
Dim vertEllipse As New Rectangle(20, 20, 200, 100)
Видео:0.1 Get your VBA code window quickly under 15 seconds #excel #vba #ytshorts #learnСкачать
Автоматизация рутины в Microsoft Excel при помощи VBA
В этом посте я расскажу, что такое 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.
Видео:VBA. УРОК 1: ЗНАКОМСТВО с VBA.Скачать
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Видео:VBA для начинающих - работа с ячейками и диапазонами (чтение и запись данных)Скачать
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Напишем 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 Function
Sub FormatPrice()
Dim s1 As String , s2 As String
s1 = «str1»
s2 = «str2»
If s1 s2 Then
foo «123» , «456» ‘ Скобки при вызове процедур запрещены
End If
Dim 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 i
Dim x As Double
x = Val( «1.234» ) ‘ Парсинг чисел
x = x + 10
MsgBox x
On Error Resume Next ‘ Обработка ошибок — игнорировать все ошибки
x = 5 / 0
MsgBox x
On Error GoTo Err ‘ При ошибке перейти к метке Err
x = 5 / 0
MsgBox «OK!»
GoTo ne
ne:
On Error GoTo 0 ‘ Отключаем обработку ошибок
‘ Циклы бывает, какие захотите
Do While True
Exit Do
Loop ‘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) = 8
Dim 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.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Видео:Функции в VBA - (Серия VBA 19 - Часть 1: Теоретический базис)Скачать
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets( «result» ).Cells.Clear
Sheets( «data» ).Activate
End Sub
Видео:Visual Basic (VBA) или Python - какой язык выбрать для автоматизации Excel в 2023 г.?Скачать
Работа с диапазонами ячеек
Вся работа в 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 Function
Function GetCellS(Sheet As String , Col As Integer , Row As Integer ) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End Function
Function 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 = xlCenter
Select 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) — тут скобки нужны постоянно.
💥 Видео
Вектор. Сложение и вычитание. 9 класс | МатематикаСкачать