На чем написан excel
Ода Excel: 34 года волшебства
Примечание: статья была написана в 2019 году, а в этом Microsoft Excel отмечает уже 35-летний юбилей.
Чему инструмент, выдержавший проверку временем, может научить нас в эпоху «софта, который пожирает мир»? В статье я хочу показать вам, как фундаментальные принципы, стоящие в основе Excel, можно использовать в «непотопляемых» технологиях будущего.
2015: Я люблю тебя
2016: Я люблю тебя
2017: Я люблю тебя
2018: Я люблю тебя
2019: Я люблю тебя
По одной строчке за каждый год, что я влюблен в… Microsoft Excel.
Возможно, вас это удивит, но я далеко не первый человек, который признается в чувствах к Excel. Есть даже те, кто пишет любовные послания Excel в самом Excel или явно признается в «экселезависимости». Сегодня мне хотелось бы поговорить об инструменте, который прошел проверку временем.
Год в Excel
Как это часто бывает в отношениях, мы с Excel уже были знакомы какое-то время. Но «гром грянул» только в 2015 году. Я часто шучу, что это был год электронных таблиц — настолько много времени я тогда провел за ними.
Я работал бизнес-аналитиком и проводил расчеты для списка Fortune 500. Очень хорошо помню, как в первый рабочий день кто-то сказал мне: «обрати внимание, наши опытные сотрудники не притрагиваются к мыши, работая с таблицами». Привычка использовать сочетания ctrl+[клавиша] вошла в их мышечную память. Совсем скоро я стал одним из них.
Ранее мне казалось, что способность построить график тренда по нескольким точкам — это чуть ли не вершина мастерства. И только потом я познал настоящую мощь Excel. С его помощью мы строили сложные модели для предсказания чего угодно — от цен на нефть до уровня каннибализации в сфере недвижимости. И со всей сложностью и многогранностью нашей работы справлялась одна единственная программа.
Я проработал там 11 месяцев. Думаю, примерно 1500 часов из них я провел только за таблицами. Для сравнения — всего за тот период я «наработал» чуть меньше 6000 часов — и это с учетом времени на сон, еду и всякое прочее, не связанное с Excel. Да-да, можете быть уверены, эти подсчеты я тоже произвел с помощью таблицы. Хочу, чтобы вы понимали: я не жалею ни об одной минуте и просто хочу немного порефлексировать.
Сейчас, как только какая-то технология становится неотъемлемой частью нашей жизни, мы тут же бросаемся прославлять её создателей. Новым гаджетам и SaaS-компаниям пророчат, что они изменят ход истории. А венчурные капиталисты тем временем ищут, в кого бы еще вложить свои миллионы. Посмотрите сами: Маск, Цукерберг, Пейдж и Безос стали так же известны, как звезды шоу-бизнеса.
Но мне хотелось бы рассказать вам о Дэниеле Бриклине и Даге Кландере. И о программе, которая была изобретена более 30 лет назад, но до сих пор «живет» на сотнях миллионов персональных компьютеров. Десятилетия спустя я хочу поговорить об Excel.
Разговор о вездесущем
Excel — это один из самых успешных продуктов в истории программного обеспечения. — Энди Ли, Partner Software Development Engineer at Excel
Любите вы Excel или нет, глупо спорить с тем, что он уже много лет является жизненно важным инструментом для многих современных компаний. Что касается глубины проникновения на рынок, Microsoft заявляет, что Excel пользуется каждый пятый совершеннолетний человек на земле. Даже несмотря на успехи своих конкурентов (например, Google Sheets), на данный момент актуально около 1,2 миллиардов лицензий на Microsoft Office. И, чтобы вы до конца поняли ситуацию: в 2016 году MS Office «заработал» 13,8 млрд долларов, а GSuite — 1,3 млрд.
Но забавнее всего — мы сейчас говорим о ПО, которое было изобретено больше 30 лет назад. И несмотря на кучу обновлений и базу из 476 функций, оригинальная концепция Excel и даже некоторые кусочки оригинального кода дожили до современных релизов — к этому мы еще вернемся.
Думаете, там не осталось кода 15-20-30-летней давности? Его там полно! — Энди Ли, Partner Software Development Engineer at Excel
Microsoft Excel — это самое привычное, гибкое и распространенное бизнес-приложение в мире. Это стало возможным благодаря его умению адаптироваться к любому бизнес-процессу. — «История Microsoft Excel».
Сумасшедшая обратная совместимость (30+ лет!), плавная кривая обучения и практически идеальная «внедряемость» сделали Excel безоговорочным лидером рынка. Многие компании не могут даже мечтать о таком превосходстве над конкурентами. А еще Excel можно пользоваться прямо из коробки: ни зависимостей, ни настройки. Он просто работает.
И несмотря на то, что со дня появления Excel Microsoft выпустила сотни других приложений, CEO Сатья Наделла считает его экстраординарным явлением:
Представьте себе мир без Excel. Лично я не могу этого сделать. — Сатья Наделла
Изменяя ход истории
Я не знаю, как именно люди работают с Excel — потому что его можно использовать огромным количеством разных способов — Терренс Хуан, Partner Development Manager at Excel
YouTube-канал «Excel is Fun»
По сути, Excel решает — и всегда решал — очень важную задачу. Он просто берет то, с чем раньше могли работать только избранные — сложную аналитику и вычисления — и делает это доступным и даже увлекательным для целого мира.
Excel действительно изменил работу многих компаний, упростив процесс построения графиков, принятия решений и выполнения сложных вычислений. — Дерек Бёрни, Corp VP Data and BI, VP — Data and Business Intelligence
И хотя Excel сам по себе не «изобретал» формат электронной таблицы — об этом мы тоже поговорим чуть позже — он стал локомотивом, который сделал динамические вычисления мейнстримом. Цукерберг не изобретал социальные сети, Маск не был первым, кто предложил устраивать частные полеты в космос. Их заслуга в том, что они взяли эти идеи и раздвинули их до неизведанных границ, точно так же как Excel смог принести в большой мир концепцию электронных таблиц.
Появление MS Excel определило эпоху — он «создал тысячи стартапов и стимулировал миллионы увольнений». Благодаря этой программе появлялись совершенно новые отрасли промышленности. Только посмотрите, какое количество новых должностей появилось в мире бизнес-аналитики — даже та, на которой я проработал большую часть 2015-го. Этих профессий не существовало, пока Excel не подарил нам возможность обрабатывать и визуализировать данные — играть в «что будет, если…».
На серверах корпораций и организаций хранится много различных данных. Необходимо иметь возможность просматривать эти данные, изменять их, анализировать разными способами, чтобы в конечном итоге получить пользу. Excel играет огромную роль в мире бизнес-аналитики, потому что это программа для людей. Они её по-настоящему понимают. — Дерек Бёрни, Corp VP Data and BI, VP — Data and Business Intelligence
Целые компании выстроены на могучих плечах Excel. А там, где Excel не является жизненно необходимым компонентом, он просто важен и нужен. Но невероятнее всего то, что в 2019 году находятся компании, чьим главным «конкурентом» является Excel.
Появляется куча новых технологий. Компании зарабатывают на них миллионы, однако люди все еще тянутся к Excel. По данным Gartner от 2015 года, более половины IT-компаний «полностью» или «преимущественно» пользуются электронными таблицами для аналитики. Это доказывает, что [по крайней мере, тогда] Excel де-факто конкурирует с целой индустрией анализа данных, но при этом не ограничивает своих пользователей только одной сферой применения. Можно строить списки задач, вести учет тренировок, записывать покупки… Excel использовался своими собственными разработчиками для того, чтобы составить список гостей 30-летнего юбилея программы.
Таблицы используются для всего, от легковесных баз данных до личных расписаний. От сбора информации до её анализа. Даже для сложных бизнес-процессов. Это только основные примеры, далеко не полный список того, для чего используются электронные таблицы. — Хьялмар Гисласон
Представим себе мир без Excel
Я как-то летел на самолете и разговорился с попутчиком. Внезапно он схватил меня за футболку: «Так ты работаешь в Excel? Я без ума от Excel! — Джон ДеВаан, [ex] Sr. VP Windows Development
Люди вроде меня не просто работают в Excel. Они его действительн любят. Когда я собирал материалы для этой статьи, мне не давал покоя один вопрос: а чем бы мы пользовались, если бы Excel взял и исчез?
Конечно, базовым его функциям можно найти замену. Но что делать с его эксклюзивными возможностями, альтернатив которым запросто может не найтись? Мне правда интересно, сколько компаний по всему миру будут вынуждены сделать паузу, если одним прекрасным утром Наделла проснется и решит «зарезать» Excel. Сколько компаний не смогут нормально работать?
Существуют финансовые компании, которые используют Excel для обработки огромных объемов данных. Они проводят в нем симуляции, чтобы предсказать события в мире. Они не просто используют Excel в качестве инструмента для написания формул. Они фактически строят собственные решения поверх Excel. И многие из этих надстроек работают уже 10-15 лет. — Терренс Хуан, Partner Development Manager at Excel
Когда Хайтен Ша спросил у пользователей Twitter, без какого приложения или продукта они не смогут жить, старина Excel на голову опередил по количеству лайков стильный «молодняк» вроде Zoom, Slack, Notion, 1Pass и Webflow.
История Excel
34 года волшебства
История Excel мне нравится ничуть не меньше, чем сам продукт. Если вернуться на 34 года назад, окажется, что весь мир с тех пор сильно изменился. Но только не фундаментальные принципы этой программы.
Прежде чем вы начнете кидать в меня тапками, я хочу сказать: компания Microsoft НЕ изобретала электронные таблицы. А кто же тогда это сделал? Скажем за них спасибо Дэну Бриклину и Бобу Фрэнкстону.
Дэна часто называют «отцом электронных таблиц». Именно он вместе с Бобом Фрэнкстоном в 1979 году разработал первое подобное приложение: VisiCalc — Visible Calculator. Дэн первым привнес концепцию таблицы-сетки, которая до сих пор в неизменном виде присутствует во всех подобных приложениях. Если же забить в Google «Кто сделал Excel?», вы увидите имя Дэна, хотя он ни дня не работал на Microsoft.
Я представлял себе волшебную школьную доску, на которой, если стереть одно число и вписать другое, все пересчитается само собой. — Дэн Бриклин, TEDxBeaconStreet 2016
Изобретение электронных таблиц дало толчок всей индустрии персональных компьютеров. Стив Джобс однажды говорил, что именно VisiCalc’у Apple II обязан своим успехом.
На самом деле, было два «реальных взрыва», которые толкнули вперед всю индустрию. Первый произошел в 1977, и это были электронные таблицы — Стив Джобс
Это стало началом WYSIWYG, хотя мы давно привыкли принимать это как должное. Работа Бриклина и Фрэнкстона была замечена другой компанией, Lotus Software, которая в дальнейшем была куплена IBM. Новый продукт, основанный на идее VisiCalc, получил название Lotus 1-2-3 и вышел на рынок в 1983-м.
В то же самое время Microsoft уже разрабатывали предшественника Excel, программу Multiplan (под кодовым названием Electronic Paper). Ей пришлось как следует побороться с Lotus 1-2-3 за место на рынке. Джон ДеВаан, один из разработчиков Excel 1.0, вспоминал, что в 1984 году рынок электронных таблиц был на 100% занят Lotus 1-2-3, работавшим под MS-DOS.
Пересчитывай или умри
Microsoft решила вложиться в разработку нового продукта под кодовым именем Odyssey. Зная современное положение Microsoft, сложно представить себе её в роли аутсайдера, чей проект имел все шансы на провал. Команда, разрабатывавшая Excel, состояла всего из четырех человек: Майк Косс, Джейб Блюменталь, Даг Кландер и Джон ДеВаан. Также в команду входили Стив Хазлериг, Эд Рингнесс, Чарльз Симони и Джон Хоппер. Чтобы еще лучше понять дух той эпохи, подумайте вот о чем: с момента создания Microsoft Mouse прошло всего два года.
Поскольку (какая ирония!) Lotus 1-2-3 переиграл Microsoft на их же собственном поле — MS-DOS, скрепя сердце, Microsoft решила разрабатывать продукт для Mac. Там Lotus’а еще не было, а сама платформа обладала необходимыми мощностями. Решение было не из легких. Когда оно было окончательно принято, из команды ушел Даг Кландер.
Представьте себе: единственный человек, который имеет полное представление об одном из компонентов продукта, просто уходит. Ради того, чтобы работать на ферме [. ]. — Джейб Блюменталь
Когда я ушел посреди разработки, возникли некоторые проблемы. Вместо того, чтобы записать всё на бумаге, я провел трехдневную презентацию по архитектуре Excel… на всякий случай даже сделали видеозапись. — Даг Кландер
Я буквально жил в офисе, спал пару часов и сразу же возвращался за код. Помню, как сильно по ночам дуло из окна в офисе — Даг Кландер
Первые компьютеры не могли считать так же быстро, как современные машины. Изменение значения в одной ячейке могло «повесить» компьютер из-за необходимости провести кучу связанных с этим расчетов. — Даг Кландер
Excel 1.0 вышел 30 сентября 1985 года и с первого дня стал лидером рынка. В последующие годы Excel привнес в мир электронных таблиц еще много прорывных нововведений: возможность настраивать внешний вид таблицы, автозамену и интеллектуальное копирование ячеек.
Несмотря на то, что название Excel сейчас кажется нам идеальным, были и другие варианты: например, Master Plan и Mr. Spreadsheet. Можете себе представить оду Мистеру Табличкину?
Не забывайте: это были времена, когда Microsoft еще не вышла на IPO, и ко многим продуктам лично прикладывал руку Билл Гейтс. Я думаю, что Excel стал лидером во многом благодаря командному духу и идеалам, которых придерживались Билл и разработчики Excel. Например, Кландер говорит, что идею «умного пересчета» ему подал сам Билл. Гейтс возражает и утверждает, что Кландер сделал вовсе не то, что он имел в виду.
Билл Гейтс был великолепным технарем. Он понимал Variants и COM-объекты, и IDispatch, и чем Automation отличается от vtables, и почему это могло привести к двойному интерфейсу. Он беспокоился о функциях для работы с датами. Он не вмешивался в разработку, если доверял тем, кто пишет программу. Но провести его не было никакой возможности: он был программист. Настоящий, реальный программист. — My First BillG Review
Получилась история о команде, которая сделала долгосрочную ставку и разработала целую систему, которая есть и будет лидером рынка еще много десятилетий.
Microsoft Excel 1.5 для Mac (1985)
Когда задумываешься о «долгожительстве» Excel, дух захватывает. У нас было ощущение, что мы делаем нечто очень нужное и полезное. Вероятно, поэтому Excel до сих пор живет и развивается. — Джон ДеВаан, [ex] Sr. VP Windows Development
Конечно, много функций с тех пор добавилось. Но основа, сам принцип электронной таблицы, остался неизменным. И я все еще пользуюсь таблицами, которые я сделал 25-30 лет назад. — Даг Кландер
Кто на новенького?
На тот момент это действительно было очень важно: делать программы, понятные обычным пользователям, а не «докторские диссертации с пользовательским интерфейсом». — Джон ДеВаан, [ex] Sr. VP Windows Development
Концепция простого доступа [к чему либо, в т.ч., к информации] часто воспринимается пользователями как нечто обыкновенное. На самом деле ученые и программисты взращивали её десятилетиями. Да, Excel не был первопроходцем электронных таблиц. Но не нужно быть пионером, чтобы построить для всех «мостик доступности», который снимет с пользователей ограничения. В идеале — техническим путем, как Кландер, «научивший» даже маломощные компьютеры производить сложные вычисления.
Чтобы вы лучше понимали меня, приведу несколько современных примеров.
В разгар революции под девизом «без кода» Excel можно рассматривать в качестве отличного примера с похожей концепцией: построить «мост доступности» к чему-то ценному. Закономерно возникают вопросы. А что прямо сейчас находится в области, доступной только нескольким экспертам? Что может принести пользу более широкой аудитории? И что можно создать для этих людей? Это наша работа — увидеть что-то ценное, но недоступное для большинства людей, и сделать его доступным. Живи долго и процветай, Excel!
Примечание: к оригинальной статье есть комментарий от читателя с несколько иной точкой зрения, и мы не могли его проигнорировать.
Билл Джелен: Спасибо за публикацию отличной статьи, но Excel не «победил» 30 сентября 1985. Он был процентов на 400 медленнее Lotus 1-2-3, и всё это вылилось в тяжелую борьбу (у обоих продуктов были крутые новые «фичи»), продолжавшуюся до 1995 года.
Автоматизация рутины в 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.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Напишем Hello World:
Sub FormatPrice()
MsgBox «Hello World!»
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
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 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
Грабли-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, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer ) As String
GetCol = Chr(Asc( «A» ) + Col)
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
Теперь надо заполнить массив Groups:
На месте многоточия
И создать заголовки:
На месте многоточия в предыдущем куске
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
Теперь надо перенести всякую информацию в result
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets( «Result» ).Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
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) — тут скобки нужны постоянно.