1039

Не только финансовая система может держаться на Excel

(Офисной оптимизации пост, точнее, об одном из инструментов этой самой оптимизации)


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

Не только финансовая система может держаться на Excel Microsoft Excel, Программирование, Офис, Оптимизация, Visual Basic, Макрос, Microsoft Word, Microsoft office, Длиннопост

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

Сами по себе формулы - очень мощный инструмент, на умении их использовать вывезло столько оптимизаторов, не владеющих программированием, что, думаю, нет еще офиса, где какой-нибудь местный Кулибин в обеденный перерыв не замутил еще какую-нибудь узкоспециализированную считалку для отдела. Но, работая с большими массивами возникает ряд проблем в использовании формул: относительность (ты получаешь не строку информации в базе данных, а динамичный результат вычисления) и оптимизация. Да, оптимизация на нескольких тысячах строк с десятком колонок и, допустим, парой связанных таблиц, это беда. Такая связка на i3 4гб оперативы просто будет повергать бедный офисный комп в ужас, заставляя его терять сознание при каждом пересчете и вылетать, если ты нарушил священный ритуал пятиминутного сохранения (знал я одного мужика, у него была такая формульная портянка, что сохранял базу он лишь два раза в день, перед обедом и уходя домой, ибо на сохранение уходило минут 20, ненавидели мы его все, ибо, уходя в отпуск, он оставлял это чудище кому-то из нас). Специфика работы была такова, что интернета у нас не было, а стороннее ПО нельзя - пользуйтесь чем дали. Окей, но автоматика же нужна, без неё никуда, потому пришлось использовать то, что есть и открывается это:

Не только финансовая система может держаться на Excel Microsoft Excel, Программирование, Офис, Оптимизация, Visual Basic, Макрос, Microsoft Word, Microsoft office, Длиннопост

Разработчикам показалось мало создать мощный инструмент формул, они решили впаять в и так могущественное ПО целый язык программирования (точнее его диалект) VBA (Visual Basic for Application), возможность подключать модули с других языков, использовать API (хоть и работает это ИМХО через жопу) и встроенную среду разработки (а это означает, что вообще ничего не надо качать, если у Вас есть офис, значит все что нужно, чтобы стать мамкиным программистом уже есть). Но что нам это даёт? Огромные (ну это как посмотреть) возможности для разработки ПО, преимущественно узкоспециализированного, без использования чего-либо кроме Excel; базы данных? О чём речь, Excel - это и есть БД (то ещё извращение, но для утонченных можно связать с Access или Sql), возможность проводить расчёты (циклы, тонкие переборы, фильтрация) над большими массивами информации в кустарных условиях, использовать встроенные библиотеки для работы с другими приложениями (самое важное - MS Word), возможность наконец применить Visual Basic, который ты учил лет 20 назад, а он нигде так и не пригодился, ну и самое главное, научиться основам программирования, если ты что-то шаришь, но твои лучшие успехи - верстка шаблонов сайтов на HTML, CSS с вкраплениями PHP. Также это нам даёт возможность кодить на ведре (прям совсем ведре-ведре). VB хоть и относится к ООП, но де-факто работа в нём редко сводится к пользовательским классам, всяким тонкостям и т.д., в основном он ощущается как скриптовый язык, работа приходит к чему:

Не только финансовая система может держаться на Excel Microsoft Excel, Программирование, Офис, Оптимизация, Visual Basic, Макрос, Microsoft Word, Microsoft office, Длиннопост

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

Не только финансовая система может держаться на Excel Microsoft Excel, Программирование, Офис, Оптимизация, Visual Basic, Макрос, Microsoft Word, Microsoft office, Длиннопост

Немного возни и у нас есть пользовательская форма со списком сотрудников и полями, которые надо заполнить, на выходе по нажатию кнопки мы получаем готовую вордовскую справку. Для этого нужен лист с данными сотрудников, лист список справок и шаблон MS Word. Готово, вы бог офисной оптимизации. И так можно многое: отчёты, справки, товарные чеки, письма, документы разные, приказы целые, любые действия с информацией.

Сразу предупрежу всех, кто уже нацелился писать "на кой хрен ты раскопал этот старый кусок говна на заре 30го десятилетия 21го века". Пост чисто информативный, это не гайд, не самоучитель, может кому интересно, на прорыв в IT сфере ни разу не претендует, это раз, есть в нашей стране места, где развитие этой сферы отстаёт как раз на эти 20 лет, это два, ну и просто, может кому понадобится, может кто-то захочет на работе чему-то подучиться.
Какие минусы? Оптимизация всё равно сосёт бибу (но не такую, как формулы), безопасность тоже, чисто теоретически можно использовать криптографическое шифрование БД и расшифрование в ходе работы, но я не проверял, можно ли легко вскрыть защиту самого VBA проекта, да и оптимизация пососёт ещё большую бибу (да и вообще, кому это надо, ребят, это же Excel), ну а стандартную Excel защиту листов можно вскрыть обычным архивом и блокнотом. Также, недостатком я считаю ряд ограничений среды, по типу того, что без API не работает прокрутка колёсиком мыши, стабильность - excel иногда любит чудить. Совместимость - отдельные танцы с бубном для x64 и x32 (но это если используете сторонние API, модули). Ну и объяснять людям, как разрешить запуск макросов :D.
Спасибо, если дочитал этот длинный (и наверное скучный) пост до конца, если вдруг кому стало интересно могу написать ещё много чего, например, как написать сапёр на Excel, как сделать различные простенькие, но очень нужные офисные программки, как научиться этому (но.. зачем?), как использовать макрорекордер и много чего ещё, связанного с Excel. А ведь это всё ещё цветочки, есть люди, которые целые стратегические пошаговые игры в ячейках писали на том же VBA.

P.S. Если ты профи, знаешь больше и лучше меня, и видишь, что я в чём-то неправ - поправь, буду рад.

MS, Libreoffice & Google docs

761 пост15K подписчик

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

1. Не нарушать правила Пикабу

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

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

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

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


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

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

21
Автор поста оценил этот комментарий

А вот про оптимизацию

1. сортировать упорядычивать и обрабатывать массивы намного быстрее чем ячейки

2. загнать функцию в библиотеку и прикрутить к проекту будет ещё быстрее(минус в том, что ты должен прикручивать каждый раз когда копируешь файлик с чудо-программой)

3.отключить обновление листа и включить после выполнения макроса программно.

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

5. Если хранить данные отдельно от файла (в ТХТ, в бд или ещё SQL), то файл будет миниатюрным и не будет открываться по 20 минут и сохранять данные по 20 минут.

6. если даже формулы делают файл тяжёлым, то можно ими заполнять лист при открытии через VBA. (одна строчка в коде, против сотни тысяч внутри листа)

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

раскрыть ветку (1)
19
Автор поста оценил этот комментарий

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

4
Автор поста оценил этот комментарий
"ну а стандартную Excel защиту листов можно вскрыть обычным архивом и блокнотом." - об этом можно поподробнее?
раскрыть ветку (1)
16
Автор поста оценил этот комментарий

В гугле полно, с первого попавшегося сайта взял

1. Меняем расширение файла XLSX в ZIP

2. Файл архива открываем проводником.

3. Находим XML файл листа книги по пути «file.xlsx\xl\worksheets\sheet1.xml», где: «file.xlsx» имя вашего файла.

4. Файл xml открываем текстовым редактором.

5. В поиске ищем текст «sheetProtection».

6. Если не находим то защиты в этом листе нет, открываем следующий файл xml ищем также текст «sheetProtection». Когда найдена такая строка, следовательно лист содержит защиту. Удаляем весь блок в тегах, на пример:

sheetProtection password="CF7ACF7A" sheet="1" objects="1" scenarios="0" selectLockedCells="1" selectUnlockedCells="1". ( от «<» до «>» включая сами скобки)

7. Файл сохраняем.

8. Расширение файла меняем расширение файла

9. C помощью Excel открываем файл.

показать ответы
12
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
7
Автор поста оценил этот комментарий

Согласен, но может подойти для ситуаций когда ты кадровик/финансист/просто планктон в какой-нибудь государственной организации, где уровень IT развития отстаёт лет на 20 и никакое ПО тебе не светит, а какие-нибудь справки/чеки/накладные подзаебало вручную делать, то для таких кустарных условий сгодится, тем более там объемы информации не будут превышать несколько тысяч строк в год (примерно).

показать ответы
1
Автор поста оценил этот комментарий
Это для версий до 2013, к 13 и выше не подходит. Или что-то не правильно проверял.
раскрыть ветку (1)
4
Автор поста оценил этот комментарий

На 2013 и выше система шифрования сложнее, но как я понял, ломается (сам работаю на 2010)

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий
Тридцатое десятилетие двадцать первого века???
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Да, туповато вышло, подглючил под утро, но смысл понятен :D

0
Автор поста оценил этот комментарий

Изначально интересовал вывод на форму, но также  мне понравилась идея, описанная в этом посте, вывода в Вордовский шаблон! Я не знаю как будет лучше и проще, поэтому полностью доверяю Вам!)

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Хорошо постараюсь (но не обещаю) завтра-послезавтра сделать пост на примере графика отпусков, простой универсальный и с VBA.

показать ответы
1
Автор поста оценил этот комментарий
Сейчас пишу ВКР, в которой эксель займёт главное место. Если Вы подробно расскажите как создавать формы с вводом/выводом данных и графиков, буду весьма признателен.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

А подробнее? Интересует вывод конкретно на форме? Возможности конечно есть, но велосипед я изобретать не стал, когда нужно было выводить диаграммы после подсчёта скриптом данных (график отпусков, заносятся дата начала и количество суток, скрипт просчитывал нагрузку на каждый день на каждый отдел в процентах и душах, а потом подставлял данные в экселевский график на листе, с возможностью выбора данных из выпадающего списка) просто использовал эти цифры с стандартном графике, могу описать этот вариант (получается ввод в форме или листе, просчёт в коде VBA, вывод на листе с использованием ActiveX), а можно рассмотреть отрисовку графика прямо в форме, но там уже математика и не так "презентабельно" выглядит.

показать ответы
0
Автор поста оценил этот комментарий

А где, собственно, про оптимизацию?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Описывается инструмент для оптимизации о котором не каждый знает, по самой оптимизации готов расписать, если будут вопросы

показать ответы
10
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

Дядь, а запили пост как из формы, показанной в посте, сразу вывести в шаблон Word? Подпишусь даже ради такого

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Без б, закину в очередь

0
Автор поста оценил этот комментарий

Я уже попросил модератора, вам придёт уведомление

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Принял!

показать ответы
0
Автор поста оценил этот комментарий

Если вам интересна тематика сообщества, вы можете публиковать обучающие посты, у вас это хорошо получается)) думаю подписчикам будет интересно узнать о новых приёмах или фишках Excel

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А перенести посты как?

показать ответы
0
Автор поста оценил этот комментарий

@Ray97, здравствуйте я администратор сообщества MS, Libreoffice & Google docs ваш пост содержательный и интересный, предлагаю перенести его в наше сообщество, а также присоединиться к нам, ваш опыт будет полезен пользователям

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Без проблем, только скажите как)

показать ответы
0
Автор поста оценил этот комментарий

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

Ссылка на изображение: https://ibb.co/pfp1LMs

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

предлагаю на почту написать, может подсказать смогу что libmods@yandex.ru

0
Автор поста оценил этот комментарий

Уважаемый @Ray97, очень понравилась Ваша статья. Как раз на работе необходимо сделать нечто подобное, готовы даже финансово простимулировать ваш труд))

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
3
Автор поста оценил этот комментарий
Блин, где можно нормально научиться vba? Пробовал искать уроки в интернете, так там в основном "Часть 1 - что как называется ... Часть 3 - напишите сами три страницы кода"
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Самому гуглить интересующие вопросы отдельно. Пробежаться по операторам и функциям, посмотреть, как обращаться к ячейкам (thisworkbook.worksheet("Лист1").cells(x,y)), узнать про условия if else, селекторы select case, циклы Do Loop (бесконечные) и For Next (с заранее обозначенной границей). Всё, это самое главное, рисовать форму, или создавать модуль и уже в нём идти к выполнению задачи. Можно попробовать калькулятор простой сделать. Набросать на форму кнопок, названия выставить, текстбокс и лейбл вставить и поиграться с обработчиком событий при нажатии кнопки вычислить. Как раз практика.

0
Автор поста оценил этот комментарий

В 1994 году я была МНС в НИИ 26 лет, дочери 6, зарплату не платили и повезло попасть в одну контору на подмену уходящей в декрет секретарши. И там я увидела "персоналку" с нортоном и увидела то, о чём много слышала в ВУЗе и в НИИ - программы ворд и ексель. Это было счастье, я почитала книжку, разобралась, сделала базу данных всех работ, находила ошибки в бухгалтерских ведомостях за 1 минут - это дико их бесило, они считали на калькуляторах.

За это меня не любили и подговаривали директора меня уволить.

Но директорская жена готовилась сдавать на права, а я сделала ей билеты в екселе, там был текст и 4 варианта, если нажимал правильно светилось зелёным, а если не правильно красным.

Я пустила её за комп и директора потрясло, что вот бабы что-то нажимают.

А я ему говорила - ну это же не печатная машинка, это ЭВМ.

А они до того использовали компы только как печатные машинки.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

До сих пор используют, сам видел

0
DELETED
Автор поста оценил этот комментарий

с каких источников начать изучать йэксэлль замотивированному овощу?

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

Естественно, все это я учел. Макрос запускается по хоткею. Так вот, хоткей я нажимаю в одном окне, а макрос запускается в другом.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Есть такая беда, я просто для каждой базы свой хоткей биндил

показать ответы