Excel это язык программирования или нет

Обновлено: 06.07.2024

Надо внести в онлайновую базу, по работе, 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, да и то не уверен. И копировать/вставлять/переключать окна умеет только мышкой.

- Попробовал смоделировать её скорость работы (мышкой) - получилось секунд 10 на одно поле. Т.е. 7.5 часов, опять же - непрерывной, - работы.

- Сколько в процессе будет косяков в базе и сколько данных из других ячеек будет "случайно" вставлено в Ёксель - тут я просто до судорог боюсь представить, со своей педантичностью.

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

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

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


MS, Libreoffice & Google docs

466 постов 12.8K подписчиков

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

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

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

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

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

Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

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

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

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

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

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

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

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

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

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

Довольная, что за выходные смогла, блядь, всё это свести, и что эти дебилы на выходные точно нихрена не испортят, отослала.

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

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

Собственно САБЖ. Просто часто в последнее время начал слышать такую связку "программирование в экселе", вот и хотелось узнать, является ли это Программированием.

Например, функция пользователя конвертирования десятичного числа в двоичное
Function Conv10_2(X_Decimal As Integer) As String
Conv10_2 = X_Decimal Mod 2
While X_Decimal > 1
X_Decimal = X_Decimal \ 2
Conv10_2 = X_Decimal Mod 2 & Conv10_2
Wend
End Function
Есть программа на VBA, выполняющая некоторый алгоритм. Стало быть создание такой функции есть программирование.
Формула
=СУММПРОИЗВ (ОКРВНИЗ (ОСТАТ (A1/2^(СТРОКА ($1:$10)-1);2);1)*10^(СТРОКА ($1:$10)-1))
для преобразования десятичного числа в двоичное выполняет точно такой же алгоритм, как и функция.
Так вот вопрос. Создание такой формулы программирование или нет?

ну vba в exel - это все же бейсик хоть и кастрированный

В экселе делаете программу на VBA? Если да, то это программирование алгоритма программы :)
Программа потом может запускаться при запуске файла екселя и делать что-то.

Нет. Это просто работа с конкретной программой. Работа с медиаплеером является программированием?) ) Просто "программисты" пошли такие, что х** пишут с мягким знаком, для них "пуск" нажать-уже "программирование"))

Ну я все-таки не согласен, тогда выходит что написание чего либо на bash batch perl php lua какие там еще интерпритаторные языки. Тоже не программирование

и какая же параллель должна, по-вашему, прослеживаться между воспроизведением медиаконтента и возможностью внедрять в книги excel модули vba?

В некотором роде, так как навыки те же. Вы попробуйте в VBA (Visual Basic for Applications) написать user-defined функцию по автоматизации расчетов и все будет понятно.
ИМХО, это больше программирование, чем HTML - разметка, хотя многие считают знание HTML программированием ))).

хтмл язык разметки, он никак не язык программирования. я пхп программированием с трудом называю

=Serge= Просветленный (35871) Я с вами согласен,но хороший пхп все же надо отнести к языкам программирования.

Программирование. Все, где используется условный оператор - программирование.

If сегодня получка=да Then
кошелек=кошелек+x*10^y ' x*10^y - это зарплата
if купить пиво =да Then
иду в магазин
If. If. If. Iffffffff
else
сижу за ПК отвечаю на вопросы по Exlel
end if
else
кошелек=кошелек
end if

Excel для аналитика как одна из любимых удочек для рыбака. В арсенале практикующих аналитиков таких удочек конечно несколько ( здесь я писала об этом подробнее), но excel всегда будет в наборе "на выход".

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

1. Первое знакомство с excel . У меня оно произошло на 1 курсе института. Открывая интерфейс, проходя по ленте и вводя первые простые формулы я удивлялась "а где же он был раньше, когда я училась в школе". Этот этап достаточно короткий, но очень красочный, каждая кнопка и вкладка знакомит тебя с мощнейшим функционалом этой чудо - программы.

2. ВПР и простейшие диаграммы . До сих пор помню ощущение от знакомства с ВПР. Казалось "ну теперь я точно могу горы свернуть". Как наивна я была. Но это очень важный этап, когда ты понимаешь, что простейшие операции и диаграммки в excel - это лишь верхушка айсберга. Ты начинаешь подозревать, что от тебя скрыто еще слишком много. На этом этапе обычно ты знакомишься с первыми книгами и форумами по excel и формируешь свой список того, что еще надо изучить.

3. Сводные таблицы и сложные формулы . На этом этапе я почувствовала реальный скачек в изучении excel. Сводные таблицы - это один из самых эффективных способов расчета и форматирования данных. А написание сложных формул (таких как, например, ИНДЕКС ПОИСКПОЗ или использование массивов данных) позволяет выполнять трудоемкие расчеты за несколько минут.

На этом этапе я бы посоветовала приобрести книгу "Сводные таблицы в Microsoft Excel 2013" авторов Билла Джелен и Майкла Александер. В ней подробно отражены нюансы работы со сводными таблицами, которые не до конца раскрываются в статьях на просторах интернета и на форумах.

4. Power Query и Power Pivot. До этого этапа обычно доходят те, кому приходится работать с выгрузками > 50 000 строк или с данными из различных источников. Мощные инструменты для работы с данными. Здесь я поняла, что возможности excel практически безграничны :).

5. VBA . Ну а это уже уровень hard, для тех, кто пошел по пути погружения на 100%. :) Язык программирования логичный, достаточно просто организованный. Для его изучения понадобится немалое время, но это окупится сторицей, результаты не заставят себя ждать.

А на каком этапе сейчас находитесь вы?

✔ Ищите ответы на свои вопросы в статье Фишки excel - подборка статей . Там я перечислила все свои статьи по разбору работы функций excel.

✔ Вот здесь есть подборка видео о том, как строить необычные диаграммы - Фишки Excel - подборка видеороликов .

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

Эта заметка более подробно раскрывает всем известный тезис: Под конкретную задачу надо выбирать наиболее подходящий инструмент применимо к офисной автоматизации.

VBA и Python

VBA (Visual Basic for Applications) , де-факто, самый популярный язык для автоматизации Microsoft Office. Доступен из коробки, помимо Excel, работает в PowerPoint, Outlook, Access, Project и других приложениях.

Если задать вопрос: «Какой язык программирования выбрать первым», то где-то в 90% всех случаев будет предложен Python . На практике здесь может быть и любой другой язык, но, исходя из популярности языка и своего опыта, буду сравнивать с ним.

В общем виде можно описать ситуацию через подобный график:

Детального сравнения не будет, рассмотрим основные killer-фичи, в ситуации, когда junior-программист/офисный сотрудник хочет автоматизировать что-либо, связанное с MS Office, и у него есть возможность выбора между языками.

Если в силу разных причин возможности выбора нет, то и сравнивать нечего.

В пользу VBA

  • Отличная работа с объектной моделью Excel и других приложений MS Office . Написание кода на VBA для большинства внутренних операций тривиально. У Python, в сравнении с VBA, поддержка объектной модели Office очень слабая.
  • Поддержка разных форматов MS Office. Самая большая проблема для внешних языков - это работа с разными форматами файлов MS Office. Например, xls, xlsx, xlsm файлы могут требовать разных библиотек, так как каждая хорошо работает только со своим форматом файла. Для VBA - это все “файл Excel”, работа с которыми в целом одинаково хороша.
  • Работа с MS Exchange. Если необходимо обеспечить работу с корпоративной почтой/календарем на Exchange, то далеко не каждом языке есть нормальная библиотека для работы протоколом Exchange. В VBA это решается относительно просто через использование в макросе объектной модели MS Outlook.
  • Легкая установка и дистрибуция. К уже установленному офису не надо ничего устанавливать. Чтобы коллега мог воспользоваться программой, достаточно передать ему файл с макросом. Легко сделать надстройку, которая позволит “установить” модель макроса в фон офиса.
  • Интерактивность внутри приложений MS Office. Внутри офисных программ можно как просто поставить кнопки запуска макросов, так и (чуть сложнее) сделать целый отдельный UI. Сюда же относится написание своих формул в Excel и то, что макросы могут воздействовать на объекты внутри документов Office в реальном времени.
  • Запись макросов. Удобный инструмент, который позволяет записать действия человека в готовый код, для последующего редактирования использования.

В пользу Python (и других внешних языков программирования)

  • Приятный синтаксис и синтаксический сахар. Если коротко, то VBA не отличается выразительностью и удобством. Это вопрос личного вкуса, но для меня Python намного удобнее.
  • Богатая экосистема библиотек. Огромный выбор готовых библиотек для работы с внешним миром. Пытаться сделать на VBA программу, взаимодействующую с каким-нибудь внешним API, та еще боль. Занимательно, что как раз для работы с файлами Office библиотеки того же Python - откровенно “на троечку”.
  • Хорошие средства разработки. Можно выбрать из огромного выбор программ, которые облегчают процесс разработки. Стандартный редактор VBA из Office предлагает очень бедный функционал и, в сравнении с альтернативами из мира Python, откровенно неудобен. Писать код VBA в внешнем редакторе, а потом копировать внутрь офиса для отладки - тоже неудобно.
  • Скорость работы. Не проверял скорость однопоточной работы, но, предположу, что в случае однопоточной работы преимущество будет за Python. В любом случае, достаточно тривиально организуется многопоточная обработка данных/файлов, что позволяет говорить в большей достижимой скорости.

Кейсы

Далее приведены конкретные задачи, которые я сам решал или автоматизировал, и когда мне надо было выбрать стек: VBA или Python. Для каждой задачи указан выбранный стек и даны пояснения почему:

  • Мой выбор: VBA . Причины: простота работы с разными форматами файлов Excel и отсутствие внешних взаимодействий.

Задача: Сервис, который должен был позволить пользователю с мобильного устройства конвертировать файлы PowerPoint в PDF для просмотра

  • Сервис был реализован как почтовый бот, на адрес которого пользователь может переслать файлы Office, а в ответ пользователю по почте приходит ответ с файлами PDF.
  • Мой выбор: Логика VBA + Python для мониторинга
  • Во-первых, внутренние функции гарантированно сохраняли PDF, аутентичный файлу PowerPoint (внешние библиотеки плохо справляются с рендером PowerPoint).
  • Во-вторых, реализация почтового бота, как макроса в MS Outlook решала проблемы работы с корпоративной Exchange почтой. Так, в Python нет нормальной библиотеки для работы с MS Exchange.
  • Python использовался для организации мониторинга работы сервиса и нотификации о возможных проблемах
  • Мой выбор: VBA . Задача решалась через конвертацию двух файлов в PDF и их объединением с Riffle Shuffle. Так как важно качество конвертации в PDF, то использовались встроенные функции офиса для экспорта в PDF.

Задача: Дана база данных по предприятиям отрасли в виде карточек-отдельных файлов html, которые надо отфильтровать и объединить в 1 файл Excel для расчета ряда показателей.

  • Мой выбор: Python .
  • Чтобы вытаскивать из html карточек данные пригодилась библиотека для парсинга html BeautifulSoup.
  • Excel-файл создает программа, поэтому мы сами можем решать, какую аналитику рассчитывать уже в нем, а какую еще на стадии подготовки данных в Python.

Задача: Перевести весь текст в презентации PowerPoint на другой язык машинным переводчиком

  • Мой выбор: VBA . Важно было аккуратно работать с текстом во внутренних объектах файла PowerPoint. Для перевода использовался API от Яндекса, так как он бесплатен для небольших объемов и прост в подклюении. Например, API переводчика Bing я так и не смог заставить работать в VBA, так как там для работы нужен OAuth со своими заморочками. Если бы пришлось работать с Bing, то, наверное, я бы делал сервис-посредник на Python.

Задача: По заданным биржевым тикерам брать данные из API с финансовыми показателями (API выдает сформированный по запросу CSV файл) и считать на их основе ряд бенчмарков для анализа

  • Мой выбор: Python . Хотя API - простой (не требует какой-либо подписи запросов или авторизации) и выдает данные в CSV, выбран Python, так как нет причин выбирать VBA, а на Python писать удобнее.

Задача: Ведение базы поручений, рассылка уведомлений исполнителям, генерация отчета для печати

Здесь я выбирал очень долго, так как есть много альтернатив:

  • Сторонняя готовая система поручений
  • База данных с каким-то обработчиком
  • Access
  • Excel

Мой выбор: VBA

  • Во-первых, Excel сам по себе является готовым UI для работы
  • Во-вторых, VBA решает задачу работы с корпоративным Exchange через подключение MS Outlook
  • В-третьих, это решение делалось с прицелом на коллег, которым Excel был более понятен, чем что-либо совсем новое

Заключение

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

Читайте также: