Сообщество - MS, Libreoffice & Google docs
Добавить пост

MS, Libreoffice & Google docs

266 постов 10 285 подписчиков
58

Excel. Как заставить прибавлять в одну ячейку определенные значения по условию?

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


Пример:


Есть ячейка "итого"

Есть диапазон ячеек в которых установлены значения X, Y, Z (по одному в каждой ячейке случайным образом)

Если в ячейке из диапазона стоит X, то в ячейку "итого" прибавляется 2

Если в ячейке из диапазона стоит Y, то в ячейку "итого" прибавляется 3

Если в ячейке из диапазона стоит Z, то в ячейку "итого" прибавляется 0


Наш диапазон:

| X | Y | Z | X | Z | Z | Y | X | X | Y | Y | Z | X | Z | X | X |

В ячейке "итого" должно получиться 26


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


Главный вопрос это - "Как заставить прибавлять в одну ячейку определенные значения по условию"


Если ткнете носом в статью в интернете я буду счастлив.



UPD: Ответ комментарий

567

Excel: Как заполнить пустые ячейки снизу значениями

Иногда бывает, что получаешь данные в неполном виде, при котором повторяющиеся подписи элементов не показываются (см. таблица слева). Для того же, чтобы производить расчёты и особенно визуализацию данных, таблицы должны выглядеть следующим образом (см. таблицу справа):

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Поэтому, в этом посте я хочу рассказать, как быстро и просто привести подобную показанную слева неполную таблицу к требуемому полному виду исключительно с помощью стандартных инструментов Excel, не прибегая к использованию Power Query или VBA.


Итак, вот наша исходная таблица. Значения в первых двух столбцах нам нужно протянуть вниз:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Для этого первым шагом, нужно выбрать все пустые ячейки в этих столбцах. Естественно, делать это следует не вручную, а автоматизировано. Выбираем для этого целиком первый и второй столбец и затем используем комбинацию клавиш CTRL+F, для того чтобы открыть окно поиска значений:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Здесь, поле «Найти», оставляем пустым, мы же пустые ячейки ищем, и нажимаем на «Найти все». В нижнем поле окна поиска Excel выведет список всех найденных пустых ячеек в выделенном диапазоне:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Поскольку первая ячейка в списке уже выбрана (можно заметить это по синему выделению), воспользовавшись сразу комбинацией CTRL+A, мы можем выбрать все эти пустые ячейки:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

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


Следующим пунктом просто нажимаем на клавишу «Равно» на клавиатуре и у нас вставляется символ равенства в активной ячейке:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Теперь вводим ссылку на соседнюю сверху ячейку:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

… и вводим данную формулу во все пустые выбранные ячейки при помощи комбинации клавиш CTRL+Enter:

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

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

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Готово!

Excel: Как заполнить пустые ячейки снизу значениями Microsoft Excel, Лайфхак, Пособие, Видео, Длиннопост

Вот мы и рассмотрели простейший способ дополнения и протягивания значений в таблицах Excel без применения Power Query или VBA.


Вот в этом видео я еще более подробно и наглядно рассмотрел тему сегодняшнего поста, так что предлагаю тебе его также посмотреть:

Показать полностью 9 1
6545

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке)

В этом посте я хочу показать, как в Excel самым оптимальным образом можно произвести диагонально разделение ячейки, например, для таких случаев, когда в одну ячейку требуется поместить два заголовка. То есть вот таким образом:

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

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


Итак, для того чтобы сделать такое разделение ячейки, сперва вписываем в требуемую ячейку оба заголовка специальным образом. А именно таким:


1. [СИМВОЛ ПРОБЕЛА]

2. ЗАГОЛОВОК 1

3. [ПЕРЕХОД НА ВТОРУЮ СТРОКУ ALT+ENTER]

4. ЗАГОЛОВОК 2

5. [СИМВОЛ ПРОБЕЛА]

6. [ТОЧКА]


В рассматриваемом примере это выглядит в итоге вот так:

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

Подтвердив ввод значений и выбрав ячейку, переходим в режим её форматирования. Проще всего это сделать, использовав комбинацию клавиш CTRL+1. В открывшемся окне во вкладке «Граница» сперва выбираем внешнюю (1) и также диагональную границы (2):

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

Затем во вкладке «Выравнивание» выбираем в первом выпадающем списке «равномерно (отступ)» (3), а в поле ниже «по центру» (4). Подтверждаем настройки нажиманием на «ОК» (5):

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

Почти всё готово:

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

Теперь только выбираем точку внутри ячейки и перекрашиваем её в цвет заднего плана (в нашем примере это белый цвет):

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

Вот и всё, всё готово:

Excel: Диагональное разделение ячейки (два заголовка в одной ячейке) Microsoft Excel, Отчет, Видео, Длиннопост, Лайфхак, Пособие

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


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

Показать полностью 5 1
118

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения)

Если в Excel, LibreOffice, Google Sheets и т.д. нужно изменить отрицательные числа на положительные, то для этого можно использовать одну универсальную методику с применением вспомогательных столбцов.


Рассмотрим на примере следующей таблицы:

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

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

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

Поэтому формулу нужно поправить. Вписываем следующее:

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

Прописав эту формулу, протягиваем её на соответствующий таблице диапазон:

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

В этот раз, как видишь, пустые ячейки, как нам и нужно, остаются пустыми. Поэтому теперь копируем измененные значения, и щелкаем правой кнопкой мышки по верхней левой ячейки целевого диапазона. В появившемся контекстном окне выбираем вариант вставки «Значения»:

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

Всё готово. Вспомогательные временные столбцы после этого можно удалить.

Excel: Как изменить отрицательные числа на положительные и наоборот (минусовые на плюсовые значения) Microsoft Excel, Google sheets, Пособие, Видео, Длиннопост

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


В этом видео я также разобрал второй метод, специально для Эксель, который позволяет проделать тоже самое без использования вспомогательных столбцов. Предлагаю посмотреть это видео, так как там попутно также разбираются и другие интересные подтемы:

Показать полностью 4 1
59

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям

Для тех, кому надо сделать не только функционально, но и красиво читаемо и наглядно - в экселе (да и во всех табличных редакторах в принципе) придумано достаточно много всяких удобностей, но, готов спорить, многие их не используют. О самых простых, наверное, не будем, а вот как нарисовать солнышко выделить цветом/ форматированием строки, подходящие под какое-либо ваше условие - с удовольствием расскажу.
Для начала как это выглядит (строка 124, столбцы T ,V):

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

То есть, если есть какое-то условие (которое вы задаете сами) строка/столбец/любая выбранная (вами) область меняет форматирование (и тут тоже все можно настроить).


Теперь о том, как это сделать:

- Переходим на вкладку "Home" (тут прошу заранее извинить - русского Экселя под рукой нет и никогда не было, но, по логике - первая или вторая вкладка).

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

- Находим раздел Styles (картинка выше, самый правый), нажимаем на первый значок Conditional Formatting (что в вольном переводе "Условное форматирование"), видим вот такое выпадающее меню

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

- Видим набор функций, которые как раз таки и отвечают за визуальное форматирование таблицы согласно условиям. Если будет интересно - расскажу обо всех подробно, но сейчас переходим сразу к пункту Manage Rules (на русском, наверное, Редактировать правила, но не уверен). Почему сразу сюда? Создать новое правило можно и из раздела Редактирование, как и удалить тоже + вы увидите все правила форматирования, которые применены на вашей таблице. Открывается редактор правил, и вот тут начинается простор для творчества...

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Для начала - общие правила применения/ отображения (ДО таблицы, пункты Show formatting rules for / Change rule order)
Show formatting rules for  - выбор правил для заданой области. Показывает все правила форматирования для выбранной области. Для примера оставьте заданное значение, далее, опять же, будут вопросы - расскажу подробнее.

Change rule order - порядок применения правил. Правила применяются по очереди, по старшинству. То есть правило #1 будет применено ПОСЛЕДНИМ, поверх правил #2 и #3.


Теперь сам набор правил:

Первый столбец - само правило (опять-же, вариантов тьма, рассмотрим ТОЛЬКО правила на основе формул. Смотрим на первую формулу

=$I2<90

Разбираемся:
"=$I2" - указывает на расположение данных. В данном случае:
- столбец безусловно $I, оператором $ указываем на абсолютный стиль при выборе столбца (это важно)
- строка 2 (тут стиль ОТНОСИТЕЛЬНЫЙ, при этом условии Эксель будет перебирать значения построково, что нам собственно и нужно)
"<90" - менее заданного значения. Тут  опять-же ньюансы на отдельную статью... В двух словах - работает ТОЛЬКО если значение цифровое (то есть 89 - сработает, а вот 89i -  не сработает). Снова - будет интересно - углублюсь и объясню разницу.


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

Четвертый столбец - Применить только для первого подходящего условия. Поясню - Эксель отформатирует только первую строку, подходящую под условие, для дальнейших данное правило НЕ СРАБОТАЕТ.


Создадим новое правило.

Для начала - выберем условие. Допустим нам нужно выделить все строки, с условием - значение столбца J в строке N БОЛЬШЕ 1

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Переходим Home> Styles > Conditional Formatting > Manage Rules, снизу слева видим кнопку +, нажимаем - открывается интерфейс создание нового правила.

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Style - Classic, Use a formula to... (опять-же, об остальных вариантах - отдельный разговор)
В поле вводим формулу (напомню значение столбца J в строке N БОЛЬШЕ 1)

=$J2>1

В подменю Format wit - выбираем стиль. Можно сразу переходить к последнему пункту Customised Format и дать волю фантазии.

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Выбрали? Супер. Нажимаем OK, видим созданный стиль в меню управления стилями:

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Задаем область применения (в моем случае вот такую):

$A$2:$AP$2037

Нажимаем OK, еще раз открываем Manage Rules и.. в большинстве случаев ловим следующий "глюк" - значение поля Formula изменилось с =$J2>1 на =$J1048576>2. Нажимаем на формулу, исправляем на =$J2>1, нажимаем OK, и еще раз OK в редакторе правил, и получаем желаемый результат:

Поваренная книга Экселиста #3 - Визуальное форматирование согласно условиям Microsoft Excel, Таблица, Полезное, На заметку, Данные, Длиннопост

Естественно это очень поверхностно, иначе формат статьи перерос бы в формат учебника, но суть, я думаю, более чем понятна.
Если есть вопросы / пожелания / что-то непонятно / что-то описать подробнее - в комменты)

Показать полностью 7
125

Объявление переменных в VBA или одна неочевидная особенность языка, показывающая, читали ли вы манул или учились на практике

Всё, что написано ниже, относится к VBA, реализованному внутри Excel из комплекта Office 365 по состоянию на февраль 2021 года. Скорее всего, всё обстоит так же и в остальных версиях офиса, насколько помню - с 97.

Что такое переменные, зачем они нужны и прочие базовые принципы я пропущу, здесь всё достаточно очевидно(*) даже на уровне ощущений.
Но есть одна особенность, которая неочевидна, упомянута в мануле одной строкой, и в корне отличается от реализации в других диалектах VB - например, в .NET.

Во-первых, примем как должное, что код в VBA в любом (во всех!) модулях должен начинаться со строки

Option Explicit

Это не обязательное требование, но оно сродни требованию включать поворотник при любом манёвре и пристёгиваться до начала движения: однажды оно спасёт вам жизнь, а для этого должно стать - даже не привычкой - рефлексом.

https://docs.microsoft.com/ru-ru/office/vba/language/referen...

Use Option Explicit to avoid incorrectly typing the name of an existing variable or to avoid confusion in code where the scope of the variable is not clear.
Оператор позволяет избежать ошибок при написании имён переменных и устраняет неоднозначности при определении области видимости переменных.

Дока для .NET https://docs.microsoft.com/ru-ru/dotnet/visual-basic/languag... идёт дальше:

Setting Option Explicit to Off is generally not a good practice. You could misspell a variable name in one or more locations, which would cause unexpected results when the program is run.
Отключение является плохой практикой, вы можете неправильно написать имя переменной, что может вызвать привести к неожиданному результату при выполнении программы.
Ещё раз: это не обязательное требование, без этого оператора хороший код работает как задумано, но это одно из (немногих в VBA) средств, позволяющих писать сложный код.

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

Простейшая задача: объявить в одной строке две строковые переменные - вызывает лютое желание написать

Dim S1, S2 as String

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

Объявление переменных в VBA или одна неочевидная особенность языка, показывающая, читали ли вы манул или учились на практике Vba, Код, Истории из жизни, Длиннопост

Как видно, переменная S1 в начале выполнения кода вовсе не имеет типа (Empty), а потом меняет его несколько раз.
В то же время, S2 также принимает разные значения, при этом всегда оставаясь строковой. В её случае происходит неявное преобразование данных разных типов к строковому типу.
Данное поведение описано в документации по VBA https://docs.microsoft.com/ru-ru/office/vba/language/concept...

You can declare several variables in one statement. To specify a data type, you must include the data type for each variable.
Вы можете объявить несколько переменных в одном операторе. Для указания типа вы должны сделать это для каждой переменной.
Хотя кто будет читать документацию! Особенно с раздела "объявление переменных". Особенно, если уже имеешь опыт программирования вообще и на похожем языке в частности.

Данная особенность VBA неочевидна. Более того, в VB для .NET данная конструкция ведёт себя противоположным образом: https://docs.microsoft.com/ru-ru/dotnet/visual-basic/program...

You can declare several variables in one statement without having to repeat the data type.
Вы можете определить несколько переменных в одном операторе без необходимости повторять тип данных.

Резюмируя:
1. Option Explicit - желательна и рекомендуется.

2. При определении переменных нужно учитывать особенность VBA.

------------------------------------------------------------
(*)Читать документацию нужно с самого начала, даже если кажется, что всё это знаешь.

Показать полностью 1
241

КАК НАПИСАТЬ TELEGRAM BOT НА VBA?

ПРЕДЫСТОРИЯ

У моего заказчика случился один инцидент. Ну, как инцидент, обычная житейская история. У него в компании есть девушка (или женщина, все относительно), которая следит за днями рождений сотрудников, собирает деньги на подарок и т.д., короче, Шура – профсоюзная активистка из «Служебного романа» (помните?: «… если сегодня кто-нибудь еще родится или умрет, я останусь без обеда…»), только помоложе и без профсоюза.

И вот однажды подходит эта «Шура» к одному из сотрудников и просит его помочь ей поднять на этаж пиццу.

- Какую пиццу?

- У меня сегодня День рождения, я заказала на всех пиццу…

- (Ой-йо-мойо(!!???)) ну… это… я тебя поздравляю, пошли за пиццей… Коллеги! у «Шуры» сегодня День рождения!

Тут, конечно, началось… в спешке, пока «Шура» и «Шурик» исчезли в направлении пиццы, торопливые сборы ассигнаций, в ближайший цветочный ларёк направлялся гонец, и воздухе витала мысль: «Просрали полимеры день рождения девушки, которая о каждом из нас не забывала»…

Дабы не попадать в следующий раз впросак, заказчик попросил меня написать для их корпоративного Telegram чата некую программку, которая бы утром поздравляла тех, у кого день рождения (в компании около 200 человек), а за три дня до дня рождения персонально направляла каждому сотруднику группы/отдела, в котором работает будущий именинник, telegram-сообщение о грядущем событии.

«Деньги в руки – будут звуки». Что в результате получилось? Есть чат, в котором сотрудники обсуждают разные вопросы, в нем каждое утро в 9-00 появляется средних размеров сообщение на тему «10 знаменитых людей, родившихся в этот день». Если в «этот день» родился кто-то из компании заказчика, то этот кто-то оказывается в компании знаменитостей. Такой вот каламбур. Также индивидуально некоторые сотрудники получают сообщение от бота «Шура – профсоюзная активистка» о ДР за три дня до «грустного праздника».

Вот, такая преамбула.

Для реализации поставленной задачи я использовал API Telegram, c# и серверную инфраструктуру заказчика на платформе Microsoft.

ШАГ ЗА ШАГОМ

После создания заказной разработки на c# и .Net мне пришла в голову мысль: а можно ли запилить Telegram бот на VBA? На странице «Bot Code Examples» VBA среди множества языков нет, но ведь это не означает, что на нем нельзя написать бот для «телеги».

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


1) Для создания бота в Telegram найдите крестного отца всех telegram ботов - BotFather и дайте ему команду: «/newbot». В ответ отец всех telegram ботов попросит дать имя новому боту. Далее, нужно указать логин бота (username), заканчивающееся на bot. Вот бот готов. В доказательство свершившегося BotFather выдаст access token для доступа в Telegram API приблизительно такого вида: «1234567890:ABCDEFGabcdfgQWERTYUIOPasdfghjklZXC».

2) Нужно новорожденного бота пригласить в свою группу.

3) Все, бот может отправлять сообщения в эту группу.


Общая часть закончена. Теперь специфика Visual Basic for Application.

Попробуем отправить сообщение на VBA. Заранее прошу прощения за лубочный вид кодов. Как с помощью тега типа <VBA… раскрасить код на пикабу, мне неведомо, если такая возможность есть или недавно появилась – дайте знать. Если вы не хотите перебивать код с картинки, а хотите его просто скопировать, это можно сделать на странице моего сайта: https://www.quickwin.ru/Solutions/QandA :

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Конкретно этот код работает. Проблема возникнет, если вы попытаетесь отправить сообщение на русском языке. В этом случае от Telegram вы получите ответ: «Bad Request: strings must be encoded in UTF-8».

У VBA, к сожалению, нет встроенной функции перевода в требуемый формат (UTF-8). "Что же делать? Что же делать? Надо выпить".

Можно придумать свой собственный велосипед на тему: «URL Encoding», в соответствии с RFC-3986, можно найти на просторах интернета множество чужих велосипедов разной степени глючности и «доработать напильником», но я бы предложил велосипед не изобретать, а воспользоваться функцией JavaScript encodeURIComponent(), она заменяет «неправильные» символы процентными (escape-) последовательностями, представляющими кодировку символа UTF-8.

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Это окошко в возможности JavaScript меня уже неоднократно выручало.

Соответственно, функция SendAMessage2TheTelegram будет выглядеть так:

КАК НАПИСАТЬ TELEGRAM BOT НА VBA? Vba, Telegram, Telegram бот, Visual basic, Utf-8, Бот, Длиннопост

Теперь сообщения с русскими буквами прекрасно перевариваются Telegram API. Отдельный вопрос: как узнать id чата, если речь идет о группе или даже конкретной персоне, а не о канале?

Для этого нужно отправить какое-либо сообщение боту из чата, в который вы планируете отправлять сообщения бота.

Например, такое: «/myid @UserNameOfMybot».

После чего посмотреть на историю сообщений бота с помощью команды, которую можно отправить из, например, Google Chrome:

https://api.telegram.org/bot1234567890:AAAAAAAAAAAAAAAAAAAAA...

Посмотреть на последние строчки истории и найти собственное сообщение в структуре JSON. Там должен быть и такой фрагмент: "chat":{"id": 123456789. 123456789- на месте этих цифр должен быть ID чата для переменной ChatID.

Изначально я думал создать на c# com компонент для VBA, с большим набором функций по работе с Telegram. Но нужен ли такой com-компонент? – я пока не решил. Так что этот вопрос тоже можно обсудить.

Показать полностью 3
4718

Если вы все еще с калькулятором проверяете Excel...

Из диалога в комментах с @oplkill, @Pavelashmed

"с экселем может быть запара с точками и запятыми. Поэтому некоторые бухгалтера пересчитывают в ручную..."

Итак, проблема: Имеем набор данных, среди которых притаились подлые засланцы

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

Как видите, итог явно не сходится с тем, что должно быть. Даже в 5 значениях найти все - сложно. А если их сотни?

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

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

В открывшемся окне выбираем "все форматы", клацаем в произвольный и в строке "Тип:" рисуем следующее - 0,00;-0,00;0;[Красный]General

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

Жмакаем ОК, и видим:

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

Вот они, наши засланцы, которые эксель за числа не считает.

Есть чуть более простой метод (применять на небольших объемах чисел) - применить денежный формат - любой на выбор, но я рекомендую доллары или евро (т.к. их знак ПЕРЕД числом, т.е. более заметен)

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

Тогда наши данные примут такой вид (возле ошибок не будет символа валюты)

Если вы все еще с калькулятором проверяете Excel... Microsoft Excel, Hints, Длиннопост

Минус - на большом объеме так искать тяжело, т.к. нет выделения цветом.


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


P.S. А потом прогоняем числовые данные через CTRL-H (замена) . -> , ; З -> 3 и так далее, если ошибок много и лень править каждую ручками.

UPD #comment_191898784

Показать полностью 3
13

БД спортивной секции. Помогите идеями пожалуйста

Друзья, помогите идеей как реализовать следующую штуку с минимальными затратами. Задача следующая - есть беговая секция. Тренеру необходимо собрать некую базу данных по участникам. Ему надо в удобном формате (в единой таблице) видеть всю историю стартов каждого спортсмена, его личные рекорды на каждой дистанции, предстоящие старты. Отдельно где то хранить персональные данные (типа почты и телефона). Публиковать эту таблицу в общий доступ нежелательно, так как некоторые очень амбициозные бегуны к сожалению позволяют себе комментировать результаты менее успешных. Как организовать данную таблицу я более-менее представляю, есть вопрос как максимально упростить ввод в нее данных. Желательно чтобы каждый мог не только вводить новую информацию, но и иметь возможность откорректировать старую. Как вариант на каждого бегуна можно завести отдельный файл, а тренеру сделать макрос который будет сливать все в сводную таблицу. Но тогда вопрос  - как лучше организовать хранение этих файлов. Тренер попробовал через гуглдиск (каждому отдельный файлик создал) запарился права раздавать. Хотя пока такая структура кажется мне максимально практичной - по каждому файл из нескольких листов. Формат файла зафиксирован. На одном листе персональные данные, на втором прошедшие старты, на третьем будущие, на четвертом личники. Файлы называем по ФИО. Каждый заполняет и скидывает тренеру. Он их скидывает в одну папку и ему макросом собирается необходимый свод. Но это первичный сбор. А вот как дальше сделать красиво непонимаю. Буду благодарен идеям. Хотелось бы обойтись бесплатным софтом

71

Многоуровневая сортировка массивов в VBA: разбор примера

Для сортировки массивов в VBA можно писать собственные функции и процедуры основанные, например, на методах пузырьковой сортировки, сортировки подсчётом, сортировки Хоара и т.д. Тем не менее, подобные решения будут представлять из себя достаточно сложные макросы даже в том случае, если предназначаться они будут для сортировки лишь одномерных массивов.


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


Пример многоуровневой сортировки:

Многоуровневая сортировка массивов в VBA: разбор примера Vba, Microsoft Excel, Видео, Длиннопост

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


1. Экспорте значений из массива на рабочий лист

2. Многоуровневой сортировке значений на рабочем листе средствами Excel

3. Обратном импорте уже просортированных значений в массив


Поскольку всё это детально описывать в одном посте будет слишком сложно, предлагаю посмотреть видео, в котором я подробно объяснил, как можно написать подобное решение (в котором, при этом, благодаря умным таблицам, все указания диапазонов являются абсолютно динамичными):

Показать полностью 1 1
Мои подписки
Подписывайтесь на интересные вам теги, сообщества,
пользователей — и читайте персональное «Горячее».
Чтобы добавить подписку, нужно авторизоваться.
Отличная работа, все прочитано!