Visual basic excel 2007 скачать

Versions

  • Excel 2016: Microsoft Visual Basic for Applications 7.1
  • Excel 2013: Microsoft Visual Basic for Applications 7.1
  • Excel 2010: Microsoft Visual Basic for Applications 7.0 (introduced the 64-bit version)
  • Excel 2007: Microsoft Visual Basic 6.5
  • Excel 2003: Microsoft Visual Basic 6.5

Compiler directives

Code written in VBA 7 may not be backward compatible. To conditionally compile selected blocks of Visual Basic code, use the #If...Then...#Else compiler directive. Syntax — code 1, and example code 2.

Code 1: SYNTAX: #If...Then...#Else Directive conditionally compile

'' #If Vba7 Then 
'' 		statements 
'' #Else 
''     [elsestatements] 
'' #EndIf

Conditionally compile the UDF ArgumentDescriptions parameter which was introduced in VBA 7. Code 2 —  line 26. The compiler directive is distinguished from a normal If...Then...Else statement bur the use of the # symbol  line 16,  line 21, and  line 27. Link to GetCF function

Code 2: Sub GetCFDescribeFunction compiler directive

'' Code location - [ThisWorkbook (code)] module
Private Sub GetCFDescribeFunction()

   Dim FuncName As String
   Dim FuncDesc As String
   Dim FuncCategory As String
   Dim FuncArgDesc(1 To 2) As String

   FuncName = "GetCF"
   FuncDesc = "Returns information about the reference cell"
   FuncCategory = 9 '' Information category
   FuncArgDesc(1) = "is the cell that you want information about."
   FuncArgDesc(2) = "Optional. If 0 or omitted - returns Address and Format; If 1 - returns Address, Format, and Value; If 2 - returns 1, with comments; " & _
                "If 3 returns Address, Format, Text, and Value, with comments "

#If VBA6 Then
    Application.MacroOptions _
      Macro:=FuncName, _
      Description:=FuncDesc, _
      Category:=FuncCategory
#ElseIf VBA7 Then
   Application.MacroOptions _
      Macro:=FuncName, _
      Description:=FuncDesc, _
      Category:=FuncCategory, _
      ArgumentDescriptions:=FuncArgDesc
#End If

End Sub					
  • This example was developed in Excel 2013 with VBA 7.1
  • Published: 9th October 2016
  • Revised: Saturday 25th of February 2023 — 09:37 AM, [Australian Eastern Standard Time (EST)]

Надстройка для Excel - Надстройка VBA-Excel 2.1.00

Надстройка для Excel содержит большой набор полезных функций, с помощью которых вы значительно сократите время и увеличите скорость работы с программой. После установки надстройки на ленту Excel добавится новая вкладка — VBA-Excel. Цель данной программы — расширить стандартные возможности Excel, добавив в него дополнительное количество функций и команд, сократить время выполнения однотипных действий и автоматизировать рутинную работу. На любую команду вы сможете назначить горячую клавишу чтобы быстро ей пользоваться.

Системные требования:
Windows XP | Vista | 7 | 8.1 | 10
Excel 2007 | 2010 | 2013 | 2016 |2019

Торрент Надстройка для Excel — Надстройка VBA-Excel 2.1.00 подробно:
Состав надстройки:
На сегодняшний день надстройка Excel содержит более 80 пользовательских функций, и более 25 макросов.

Ячейки и диапазоны

Макросы

Работа с файлами

Текстовые функции

Логические функции

Финансовые функции

Функции даты и времени

Математические функции

Ссылки и массивы

Статистические функции

Информационные функции

Что нового в версии:
Версия: 2100 от 26.08.2018

+Написали собственную функцию для склонения произвольных фраз — СКЛОНЕНИЕ_ФРАЗ.
До этого вы использовали функцию СКЛОНЕНИЕ, которая работала от вэб сервиса Морфер.ру и имела ограничение на количество использований. Старая функция также будет поддерживаться. Будем рады отзывам и комментариям работы новой функции чтобы сделать ее лучше.

Версия: 2064 от 06.08.2018
-Исправлена ошибка открытия файлов

Версия: 2063 от 02.08.2018
+Усовершенствовали функционал объединения листов
+Добавили возможность импортирования листов из файлов CSV с сохранением столбцов
-Исправили ошибки функционала Применить формулу
-Восстановлена работа функции КУРС
+Мелкие улучшения и оптимизация

Версия: 2062 от 20.11.2017
+Сделали отдельную функцию для склонения фамилий СКЛОНЕНИЕ_ФИО
-Скорректировали работу функции СУММАПРОПИСЬЮ
-Исправили ошибки функционала Применить формулу
-Скорректировали работу функции КУРС
-Скорректировли функционал вставки даты из календаря

Версия: 2061 от 07.10.2017
-Мы переехали на новый сайт Micro-Solution.ru
-Для корректной работы всех функций просьба обновить программу до последней версии.

Версия: 2060 от 03.10.2017
+Добавили возможность редактировать API ключ сервиса Яндекс.Перевод

Версия: 2059 от 26.09.2017
Небольшое обновление
-Скорректировали работу функции СУММАПРОПИСЬЮ.

Версия: 2058 от 13.09.2017
-Скорректировали работу функции СКЛОНЕНИЕ.
-Спасибо, что относитесь с пониманием. Велик и могуч наш русский язык.
Функция будет работать в связке со сторонним сервисом Морфер.ру для подстраховки нашей функции. Поэтому возможно достижение ограничения на 1000 запросов в сутки с 1 компьютера.

Версия: 2057 от 11.09.2017
+Сделали собственную функцию СКЛОНЕНИЕ. Теперь нет ограничений по ее использованию. Пишите об ошибках или исключениях из правил, будем совершенствовать.
+Улучшили функцию СУММАПРОПИСЬЮ
-Поправили календарь и функционал вставки даты
-Починили игру Цветовое зрение
-Исправили мелкие ошибки

Установка:
1.Запустите Excel, перейдите в настройки безопасности, в параметрах макросов установите галочки: «Включить макросы» и «Доверять доступ к объектной модели проектов VBA»
2.Откройте в Excel файл VBA-Excel_Install_2.1.0.xlsm
3.Нажмите кнопку «Установить / обновить»
4.Заполните окно регистрации любыми данными (можно просто поставить нули), отметьте чекбокс «Я гуру Excel, мне это не интересно»
5.Нажмите «Установить»

Процедура лечения:
Лекарство создано пользователем Shamaneix с известного трекера, великая ему благодарность за великолепный труд.
Реакция антивирусов на кейген
Процедура лечения описана автором лекарства в текстовом файле в раздаче. Подробнее здесь.
После установки надстройки
(или до установки, но после открытия файла установки надстройки)
Нажимаем на кнопку с информацией — Справка — Активация.


Появляется окно активации с номером, сгенерированным конкретно для вашей копии офиса.

Копируем этот номер и закрываем окно активации.
Открываем через программу файл Keygen.xlsm, нажимаем на кнопку Keygen, в открывшемся поле в верхнюю ячейку вставляем скопированный номер и нажимаем Generate Key. Копируем из нижней ячейки сгенерированный номер.

Закрываем все открытые копии Excel.
Открываем блокнотом reg-файл VBA-Excel.reg и вместо XXXX-XXXX-XXXX-XXXX вставляем номер, сохраняем файл.

Запускаем рег файл и соглашаемся на внесение изменений в реестр.
 
Открываем Excel, переходим на закладку VBA-Excel, нажимаем на кнопку информации —Справка —Активация, убеждаемся, что надстройка активирована, закрываем и наслаждаемся новыми возможностями.

ВНИМАНИЕ!!! На официальном сайте лежит исправленная редакция этой же версии надстройки,
она не принимает данный метод активации. Не пытайтесь обновить.

Скриншоты Надстройка для Excel — Надстройка VBA-Excel 2.1.00 торрент:

Скачать Надстройка для Excel — Надстройка VBA-Excel 2.1.00 через торрент:

excel vba examples free download

companies

AutoMacro has been used by employees of these organizations. These organizations do not endorse, approve, sponsor, or otherwise have any affiliation with this website, Spreadsheet Boot Camp LLC, or ToolFive Software LLC.

About the Add-in

Our free VBA add-in installs directly into the VBA Editor (see above).

It contains 150 ready-to-use VBA Macro code examples for Excel. Simply click your desired code example and it will insert directly into your module:

vba add-in code examples

Download

Click the download button to download our free VBA add-in for Excel!

Important! Read the Walkthrough below. It contains important information.

Walkthrough

The macro code examples add-in was designed entirely with VBA. This can be convenient because you don’t need to install anything, but VBA has limitations. As a result of these limitations, the add-in will stop functioning periodically (note: this happens when VBA «loses focus», often as a result of code errors).

To help, we built in a «reset» button:

vba excel download

To activate the reset, go to Excel and click the AutomateExcel.com Ribbon > Restore VBA Add-in.

If you find the add-in useful, you’ll love our premium VBA add-in (more information below). The premium add-in is not built with VBA and doesn’t require any resets. It has many more (better organized) code fragments, VBA code generators, the ability to save your own code, and much more….

Installation

1. Download the file above

2. Follow these directions to install an Excel Add-in.

3. If you encounter an error «Trust access to the VBA project object model is disabled» then you must update the following settings

VBA Add-in FAQs

How to download VBA For Excel?

All versions of Excel already come with VBA installed. Use shortcut ALT + F11 to open the VBA Editor.

How to install Excel Add-ins?

Make sure the Developer Ribbon is installed. Then go to Developer > Excel Add-ins > Browse to select and install your add-in.

What is the VBA Code Examples Add-in?

The VBA Code examples add-in is a free add-in for Excel / VBA that comes with 150+ ready-to-use VBA code examples & macros.

AutoMacro — The Ultimate VBA Add-in

AutoMacro is an add-in that installs directly into the Visual Basic Editor:

excel vba add ins download

The add-in comes loaded with code generators, hundreds of macro code examples, the ability to create your own code library, and other time-saving tools.

Join the Hundreds of Professionals Who Use AutoMacro

«I use it almost every day. A great tool for getting things done, but also a great tool for learning how to do things! This is one purchase this year I have no regrets about.»

Galen — USA

AutoMacro Features

Code Generators

Code Generators build code from scratch via visual interfaces!

vba code builder

vba code library builder

Code Library

300 Ready-to-use code examples & VBA macros.

Save your own frequently used code and share with team members.

Coding Tools

VBA Coding tools to improve the out of date Visual Basic Editor.

Speed up your workflow with tools to navigate, debug, format and more.

vba code tools

vba interactive tutorial

VBA Tutorial

Our premium VBA add-in contains a free VBA tutorial.

Just download AutoMacro and you’ll have access to the tutorial.

Beginner

1 User — 1 PC

  • Interactive VBA Tutorial
  • 100+ ready-to-use code examples
  • Procedure, Loops, & Copy Paste Builders
  • All other code generators
  • Coding tools
  • Create your own code library
  • Transfer Activations to other PCs
  • Access to new features & updates

One-time fee

Click for Alternative Payment Options

Money back guaranteed
TrustSpot Verified

Upgrade Anytime!

Developer

1 User — 3 PCs

  • Interactive VBA Tutorial
  • Hundreds of ready-to-use code examples
  • Procedure, Loops, & Copy Paste Builders
  • All other code generators
  • Coding tools
  • Create your own code library
  • Transfer Activations to other PCs
  • Access to new features & updates

One-time fee

Click for Alternative Payment Options

Money back guaranteed
TrustSpot Verified

Upgrade Anytime!

Developer+

1 User — 3 Transferable PCs & Updates

  • Interactive VBA Tutorial
  • Hundreds of ready-to-use code examples
  • Procedure, Loops, & Copy Paste Builders
  • All other code generators
  • Coding tools
  • Create your own code library
  • Transfer activations to other PCs
  • Access to new features & updates

One-time fee + $20 Annual

Click for Alternative Payment Options

Money back guaranteed
TrustSpot Verified

Customer Reviews

FAQ and Other Information

What is your refund policy?

We have a 30-day, no-questions-asked, 100% money-back guarantee. If you’re unsatisfied for any reason, let us know and we will refund your order!

Can I try AutoMacro before I buy?

Can I install AutoMacro on my Work Computer?

Yes! AutoMacro works in many corporate environments. It was designed to be as unobtrusive as possible and should install without the need for «admin privileges».

Will AutoMacro work on my system?

AutoMacro is compatible with all versions of Microsoft Office for PCs.

32-bit or 64-bit
Office 2003, 2007, 2010, 2013, 2016, 2019, Office 365, etc.
All Versions of Windows
Surface Pro
AutoMacro is not compatible with Mac operating systems. However, some Mac users running Windows OS are able to use AutoMacro.

If you have doubts, please try the download link above to check.

AutoMacro is not compatible with Citrix environments.

Can I deduct this purchase on my taxes?

See this page from the IRS on Employee Business Expenses.

Can I use on more than one computer?

The Beginner version entitles you to a single-use license code valid for 1 computer. The Developer version is valid for 3 computers. The Developer+ allows you to transfer activations between PCs, so that AutoMacro can be activated on any 3 PCs at one time.

Does AutoMacro work with PowerPoint, Word, or Access?

Yes! AutoMacro functions in any program with the Visual Basic Editor.

Specific code examples were developed for Excel, Access, Outlook, Word, and PowerPoint.

Visit AutoMacro’s FAQ Page

Join the Hundreds of Professionals Who Use AutoMacro

«Great product, haven’t stopped using it since I purchased it. It doesn’t just write your code, it teaches as you go!»

Tony D — United Kingdom

Steve Rynearson:
Creator of AutoMacro

Over the years, I’ve spent countless hours searching online for example code and adapting that code to my needs.

I often found myself clicking the same links and copying the same code. I thought there has to be a better way!

AutoMacro is the ultimate VBA Code Helper! It eliminates much of the need to search online for code. Instead simply use the menus to select pre-built code or use the builders to generate code for your exact needs.

Additionally, the coding tools will save you time and help you develop more professional looking code.

For anyone coding VBA, AutoMacro is a life-saver. You’ll code much faster, develop more professional code, and learn VBA much faster (if you’re not already an expert).

Каждый из нас хоть раз работал в программе Excel из пакета Microsoft Office. Изначально, особенно при первичном знакомстве, утилита Excel может показаться очень сложной, с массой каких-то нюансов и тонкостей. Но стоит хоть немного в ней разобраться, то мгновенно убеждаешься в том, что лучшего помощника для любых математических операций не найти! Никакие калькуляторы или специализированные программы для просчетов не смогут переплюнуть Excel, т.к. они узконаправлены, а Эксель охватывает все виды вычислений! Кроме того, любые вычислительные приложения основаны на зависимости значений в ячейках, а круче Excel в этом никто не разбирается! А если установить себе пакет надстроек VBA Excel, то вы сможете выполнять все вычислительные действия быстро и эффективно!

Надстройка VBA-Excel для MicrosoftНадстройка VBA-Excel для Microsoft

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

Скачать пакет надстроек VBA Excel на русском

Скачать надстройки Excel VBA вы сможете пакетом с нашего сайте по ссылке в конце статьи. Этот пакет распространяется совершенно бесплатно и устанавливается без труда на любую версию Excel. На сегодняшний день пакет VBA надстроек содержит в себе более 80 функций, а также более 25 макросов! Теперь-то вы точно найдете именно ту надстроечку, которая поможет вам сократить время работы до минимума, максимально подняв эффективность и производительность работы в документах Excel!

Надстройка VBA-Excel на русскомНадстройка VBA-Excel на русском

Надстройка VBA-Excel скачатьНадстройка VBA-Excel скачать

Надстройка VBA-Excel установитьНадстройка VBA-Excel установить

Время на прочтение
7 мин

Количество просмотров 312K

Приветствую всех.

В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.

VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.

Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.

Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.

Поэтому, увы, будем учить Visual Basic.

Чуть-чуть подготовки и постановка задачи

Итак, поехали. Открываем Excel.

Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.

Появилась вкладка.

Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):

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

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

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

Кодим

Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».

И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».

Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:

Sub FormatPrice()End Sub

Напишем Hello World:

Sub FormatPrice()
    MsgBox "Hello World!"
End Sub

И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.

Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.

Примеры синтаксиса

' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
    ' Exit Sub ' Это значит "выйти из процедуры"
    MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As IntegerAs Integer
    ' Exit Function
    LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
    Dim s1 As String, s2 As String
    s1 = "str1"
    s2 = "str2"
    If s1 <> s2 Then
        foo "123""456" ' Скобки при вызове процедур запрещены
    End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
    Dim i As Integer
    ' Цикл всегда состоит из нескольких строк
    For i = 1 To 10
        res = res + CStr(i) ' Конвертация чего угодно в String
        If i = 5 Then Exit For
    Next iDim x As Double
    x = Val("1.234"' Парсинг чисел
    x = x + 10
    MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
    x = 5 / 0
    MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
    x = 5 / 0
    MsgBox "OK!"
    GoTo ne

Err:
    MsgBox 

"Err!"

ne:

On Error GoTo 0 ' Отключаем обработку ошибок

    ' Циклы бывает, какие захотите
    Do While True
        Exit DoLoop 'While True
    Do 'Until False
        Exit Do
    Loop Until False
    ' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
    ' Val также умеет возвращать Integer
    Select Case LengthSqr(Len("abc"), Val("4"))
    Case 24
        MsgBox "0"
    Case 25
        MsgBox "1"
    Case 26
        MsgBox "2"
    End Select' Двухмерный массив.
    ' Можно также менять размеры командой ReDim (Preserve) - см. google
    Dim arr(1 to 10, 5 to 6) As Integer
    arr(1, 6) = 8Dim coll As New Collection
    Dim coll2 As Collection
    coll.Add "item""key"
    Set coll2 = coll ' Все присваивания объектов должны производится командой Set
    MsgBox coll2("key")
    Set coll2 = New Collection
    MsgBox coll2.Count
End Sub

Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.

Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.

Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.

Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.

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

Кодим много и под Excel

В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.

Sub FormatPrice()
    Sheets("result").Cells.Clear
    Sheets("data").Activate
End Sub

Работа с диапазонами ячеек

Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.

Примеры работы с Range

Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"

Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As IntegerAs String
    GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As IntegerAs Range
    Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function

Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».

Глобальные переменные

Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3

FormatPrice

Sub FormatPrice()
    Dim I As Integer ' строка в data
    CurRow = 1
    Dim Groups(1 To GroupsCount) As String
    Dim PrGroups(1 To GroupsCount) As String

    Sheets(

"data").Activate
    I = 2
    Do While True
        If GetCell(0, I).Value = "" Then Exit Do
        ' ...
        I = I + 1
    Loop
End Sub

Теперь надо заполнить массив Groups:

На месте многоточия

Dim I2 As Integer
For I2 = 1 To GroupsCount
    Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
    PrGroups(I2) = Groups(I2)
Next I2
I =  I + 1

И создать заголовки:

На месте многоточия в предыдущем куске

For I2 = 1 To GroupsCount
    If Groups(I2) <> PrGroups(I2) Then
        Dim I3 As Integer
        For I3 = I2 To GroupsCount
            AddHeader I3, Groups(I3)
        Next I3
        Exit For
    End If
Next I2

Не забудем про процедуру AddHeader:

Перед FormatPrice

Sub AddHeader(Ty As Integer, Name As String)
    GetCellS("result", 1, CurRow).Value = Name
    CurRow = CurRow + 1
End Sub

Теперь надо перенести всякую информацию в result

For I2 = 0 To DataCount - 1
    GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2

Подогнать столбцы по ширине и выбрать лист result для показа результата

После цикла в конце FormatPrice

Sheets("Result").Activate
Columns.AutoFit

Всё. Можно любоваться первой версией.

Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:

Sub AddHeader(Ty As Integer, Name As String)
    Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
    ' Чтобы не заводить переменную и не писать каждый раз длинный вызов
    ' можно воспользоваться блоком With
    With GetCellS("result", 0, CurRow)
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        Select Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
        Case 2 ' Производитель
            .Font.Size = 12
        End Select
        .HorizontalAlignment = xlCenter
    End With
    CurRow = CurRow + 1
End Sub

Уже лучше:

Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:

Поэтому чуть-чуть меняем код с добавлением стиля границ:

Sub AddHeader(Ty As Integer, Name As String)
    With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
        .Merge
        .Value = Name
        .Font.Italic = True
        .Font.Name = "Cambria"
        .HorizontalAlignment = xlCenterSelect Case Ty
        Case 1 ' Тип
            .Font.Bold = True
            .Font.Size = 16
            .Borders(xlTop).Weight = xlThick
        Case 2 ' Производитель
            .Font.Size = 12
            .Borders(xlTop).Weight = xlMedium
        End Select
        .Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
    End With
    CurRow = CurRow + 1
End Sub

Осталось лишь добится пропусков перед началом новой группы. Это легко:

В начале FormatPrice

Dim I As Integer ' строка в  data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String

В цикле расстановки заголовков

If Groups(I2) <> PrGroups(I2) Then
    CurRow = CurRow + 1
    Dim I3 As Integer

В точности то, что и хотели.

Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.

Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.

Спасибо за внимание.

Буду рад конструктивной критике в комментариях.

UPD: Перезалил пример на Dropbox и min.us.

UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.

Like this post? Please share to your friends:
  • Visual basic button excel
  • Visual basic applications excel 2013
  • Visual basic application for excel 2013
  • Visual basic and application excel
  • Visual basic 2010 excel 2007