На чем написан эксель

Автоматизация рутины в 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) — тут скобки нужны постоянно.

Источник

О пользе продвинутого знания Ёкселя и о программировании

Надо внести в онлайновую базу, по работе, 180 записей. Каждая из 15 полей. Обычно мы это делали через CTRL+C/CTRL+V из Ёкселя, куда данные вбивались заранее. Т.к. обычно вносилась одна запись в неделю-две, редко больше.- А тут целых 180, причём надо, как обычно, «вчера».

— В базе имеется возможность импорта (через офлайновый конвертер в XML), но только из CSV и по очень строгим правилам: регистр, разделители, дополнительные поля с UUID, разными для разных случаев, которых нет в нашем исходном файле, плюс порядок столбцов совершенно другой и куча дополнительных полей (пустых или с константами).

Где-то минут за 40 неспешной и творческой работы наваял простенький конвертер, не выходя из Ёкселя:

— страница с настройками и константами

— страница, куда копипастится блок из рабочего файла Ёкселя, который надо экспортнуть

— страница с результатами, которая тупо сохраняется в CSV.

Затем за пару прогонов через утилиту перегнал в XML, подписал ЭЦП и загнал на сайт. Ошибок: 0.

— Это заняло у меня ещё минут 15, вместе с проверкой исходных данных и результата, подписью ЭЦП и проверки, что всё успешно залилось и открывается онлайн.

Стал считать, сколько набивал бы вручную. Я работаю практически только с клавы, поэтому на копипаст 1 поля уходит, пускай, 1 секунда.

— Т.е. CTRL+C ALT+TAB CTRL-V TAB ALT-TAB Right. и так много раз подряд.

— Это 15*180=2700 секунд или 45 минут непрерывной, неотрывной работы.

— Это без учёта необходимости кликнуть в браузере «Добавить запись» и в конце «Сохранить» и промотать колонки в Ёкселе, т.к. их порядок не совпадает с порядком полей на сайте.

— И без учёта возможных косяков при копипащении.

— И часть полей на сайте выбираются из списка и, разумеется, только мышкой. И делать это приходится внимательно, т.к. значения очень похожие внешне.

Ну и да, я НЕНАВИЖУ монотонную работу. Для меня и 10 записей подряд внести напряжно. Так что сидел бы я пару рабочих дней точно.

Потом прикинул, сколько времени это заняло бы у секретаря, которая вобще-то и должна набивать эту базу.

— И которая из клавиатурных комбинаций знает, видимо, только ESC, да и то не уверен. И копировать/вставлять/переключать окна умеет только мышкой.

Мораль простая. По возможности, изучайте программирование в целом и формулы MS Excel в частности.

— Это реально ОЧЕНЬ помогает в работе.

— И ОЧЕНЬ экономит нервы.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

MS, Libreoffice & Google docs

474 поста 12.8K подписчиков

Правила сообщества

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях

Господа гусары, молчать!

Не говорите ему про VBA.

Мухахаха. Решили шефы цмр внедрить. Выбор пал на Scoro, мол, не дорого и обещали всё настроить и обучить.

До этого база по клиентам(холодные звонки) была в Экселе.

Я попросила на обучении, чтобы показали как импортировать. Шеф сказала, что не будем на это время тратить, они сказали сами всё красиво сделают. По всем странам и фирмам.. Народ, что пришёл от Scoro радостно кивал.

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

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

торговая марка/страна/чей номер/и дальше блаблабла

«Ёксель» очень сильно режет глаз. Возможно, вы в своем окружении его так называете, но вы же не для своих друзей/коллег пишете? Старайтесь использовать поменьше жаргонизмов при написании публичных материалов, если это не юмор.

Уволят тебя к херам, сидела бы она пару дней и работала, и чувствовала бы себя нужной, а чем ей вот теперь заниматься?!

Лучше день потерять, зато потом за пять минут долететь.

Где-то минут за 40 неспешной и творческой работы наваял простенький конвертер, не выходя из Ёкселя
.
Это 15*180=2700 секунд или 45 минут непрерывной, неотрывной работы.

P.S. Я все равно за автоматизацию

Пфф, обещание супер отзыва и 100 рублей на каком-нить фрилансерском сайте решают проблему, ща насоветуешь какие-то глупости изучать

многие хотят, но не всем дано

А можно было бы просто наваять простенький импортер/экспортер на каком нибудь C# с использованием EPPlus за 10-15 минут в VScode и особо не париться 😌

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

VBA для создания прайс-листа с изображениями

Доброго времени суток!

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

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

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Вообще это мой первый макрос. С Excel’ем я давно на «ты», и давно «облизывалась» на макросы, но все к случаю не приходилось. Все эти If’ы и Then’ы повергали меня в ужас. Ну серьёзно, проще формулой.

Но тут подвернулась работа, в которой моих знаний стало явно не хватать, нужен макрос. Пришлось осваивать. И вот, спустя две недели ночных свиданий с ноутом, макрос готов и все пожелания заказчика учтены.

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

Пы.Сы. Фотографировала на бессонницу, уж не обессудьте)

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Отправка писем через Gmail, ЯндексПочта и @mail из Excel

Создать интеграцию Microsoft Excel с Outlook, легко, средствами VBA. Можно ли отправлять письма другими почтовыми сервисами? Например, через Gmail, самый популярный в мире почтовый сервис, от Google.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Ответ можно, используя настройки SMTP, IMAP, POP.

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

CDO является библиотекой объектов, которая предоставляет интерфейс Messaging Application Programming Interface (MAPI), позволяет отправлять и получать сообщения.

Решение для MS Office без Outlook.

Алгоритм настройки макросов

Копируйте код в Личную книгу макросов или в файл своей надстройки;

Добавьте в код адрес нужной почты и пароль:

.Item(msConfigURL & «/sendusername») = «ДОБАВЬТЕ ВАШУ ПОЧТУ»

.Item(msConfigURL & «/sendpassword») = «ДОБАВЬТЕ ПАРОЛЬ»

.From = «ДОБАВЬТЕ ВАШУ ПОЧТУ» ‘ От кого = username почты

Подключите в редакторе VBA (Alt+F11) библиотеку Microsoft CDO для Windows 2000:

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Код макроса на GitHub

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

Особенности настройки почты

Если вы используете двухэтапную проверку, следуйте инструкции:

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

А как же наши дорогие Яндекс.Почта и @mail?

Чтобы их использовать, удалите или закомментируйте в коде макроса строки .Item(msConfigURL & «/smtpserver») кроме:

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

В заключение, удобный макрос для открытия почты Gmail из Excel при помощи Send Keys:

Чтобы сразу открывалось окно нового сообщения, в настройках включите Быстрые клавиши.

Спасибо, что дочитали до конца!

Было полезно? Ставьте лайк, пишите, что думаете в комментариях и подписывайтесь на канал, если еще не сделали этого.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Вывод списка файлов в папке на лист Excel

Перед вами стоит задача вывести списком содержимое папки? Этот пост для вас.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Вывести cписок файлов в папке можно макросом:

Копируйте код и сохраните его в Личной книге макросов.

Открыть редактор VBA Alt +F11, вызвать меню для выполнения или изменения макросов Alt + F8.

Источник

Автоматизация Excel с помощью Python

Часть 1

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Начну пожалуй свою самую долгожданную серию статей про автоматизацию Excel с помощью Python. Долгожданная, потому что сейчас Excel повсеместно. Ну, и потому что я долго тянула 🙈

Уверенное владение Excel уже принято за норму, чем за исключение. И бизнес зачастую просто ни в каких других программах не работает с цифрами. Открыть excel-файл на телефоне в чате или гугл таблицах (тоже, кстати, отлично работает) намного проще, чем думать как запустить тетрадку jupyter notebook или целую программу на python.

(думается мне, после того как я разберусь с excel, напишу еще и про google sheets)

Ну, jupyter notebook это не та программа для телефона, скажете вы. Да, и вы правы, только наш бизнес сейчас весь на телефонах и совещаниях. Начальнику нужно быстренько взять открыть файл, сделать скрин и так далее.

И вот проходя множество курсов по анализу данных вы вряд ли найдете помимо экскурса в Python и SQL еще и Excel — все так стремительно хотят от него уйти, будто вы и так в нём хорошо работали.

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

Excel сейчас — это стандартная программа, которая ставится в комплекте Microsoft Office и есть на каждом ноутбуке (если её нет, найдется Libre, но смысл останется).

Там удобно посмотреть данные сразу, прокрутить, вставить один раз формулу и “протянуть” дальше. Построить быстренько несложные диаграммы из самостоятельно выбранных данных.

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

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

Но бывает и такое, что ты сидишь и думаешь “это можно сделать проще”, но, увы, не знаешь как.

Все эти “можно сделать проще” возможны с помощью макросов или power query, но это может быть слишком сложно или наоборот долго, ну, и я зачем мы владеем python? 😃

Прежде чем мы перейдем к конкретной задаче, расскажу, что в Python с excel-документами можно и нужно работать с помощью pandas, openpyxl, xlrd, xlutils и pyexcel.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

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

Объединение нескольких excel-файлов

Да, эту задачу можно решить ручками или power query, где несколько таблиц передаете в запрос и объединяете.

Например, на работе вы можете работать с ежемесячными отчётами о продажах, и с 90% вероятностью вы будете заниматься консолидацией региональных отчётов. Однажды вас попросят подготовить не только сконсолидированный отчёт, но и найти/подсчитать общее количество продаж по всем этим отчетам — и всё как можно быстрее.

Вариант номер 1, описан выше. Excel, Power Query, добавляете отчёты, объединяете, открываете, смотрите.

Вариант номер 2. Excel, несколько таблиц, переносим вкладки в один документ, создаете еще одну вкладку с шаблоном, делаете подсчёты с помощью формул. Смотрите.

А можно Вариант номер 3. Объединить все excel-файлы в python, используя библиотеку pandas (да-да, pandas).

Устанавливаем pandas используя pip или conda в терминале:

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

И рассмотрим вариант работы с отчетом, который сделан по одному шаблону (например, придумаем самый простеньких отчёт о продажах фруктов).

Давайте посмотрим на то, что мы сделали здесь:

Получение значений нескольких файлов

Давайте посмотрим на другой пример.

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

А теперь посмотрим код и что он выполняет:

Если вы хотите выполнить код ниже, то запускайте код после сохранения файлов, сохраните файлы по ссылкам выше на свой компьютер.

Давайте разберем это шаг за шагом, сначала мы:

— используем [‘Sheet1’] и [‘F5’] для ссылки на имя листа, так и на ссылки на ячейки таблицы (на нужном нам листе в рабочей книге)

Применение формул в книгах

В каждом из excel-файлов у нас есть итоги по строкам, но это не общая сумма продаж. Опять же, мы можем открыть каждую книгу и добавить формулу ручками, или мы можем использовать python, чтобы сделать это для нас.

Заставьте летать

А теперь я дополню эту связку, вот таким вот открытием — автоматизировать Excel, и по сути заменить VBA (в моём понимании) можно библиотекой xlwings.

Автор xlwings говорит, что библиотека “Make Excel Fly!”. Вы можете использовать xlwings + Python для следующих задач:

Попробуем установить и рассмотреть несложный первый пункт. Пункты 2 и 3 рассмотрим в следующей серии.

Установка xlwings

Существует две части для установки xlwings: библиотека Python и надстройка Excel. Давайте начнем с установки библиотеки Python через командную строку:

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Затем загрузите надстройку Excel из официального репозитория xlwings на Github. Это xlwings.xlam файл на странице (если вы вдруг будете читать эту статью через год, берите последнюю версию)

Положите xlwings.xlam-файл в папку надстройки Excel, которая является:

Xxxx — это ваше собственное имя пользователя на вашем компьютере.

У меня получилось так, что я могу сейчас показать как это работает в английской и в русской версии Excel.

На чем написан эксель. Смотреть фото На чем написан эксель. Смотреть картинку На чем написан эксель. Картинка про На чем написан эксель. Фото На чем написан эксель

Когда появится окно надстроек, нажмите на кнопку “Обзор” (Browse..).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *