Сообщество - MS, Libreoffice & Google docs

MS, Libreoffice & Google docs

765 постов 14 915 подписчиков

Популярные теги в сообществе:

62

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

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

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


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

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

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

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

Для начала - общие правила применения/ отображения (ДО таблицы, пункты 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

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

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

=$J2>1

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

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

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

$A$2:$AP$2037

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

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

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

Объявление переменных в 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 или одна неочевидная особенность языка, показывающая, читали ли вы манул или учились на практике

Как видно, переменная 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
12

Дата изменения ячейки

Прошу прощения, если вопрос покажется наивным и простым.

В столбец A в реальном времени вносятся данные. Нужно в столбец B занести дату и время изменения соответствующей ячейки из столбца A. Как?

6590

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

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

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


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


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

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

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

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

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

6. [ТОЧКА]


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

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

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

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

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

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

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


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

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

Надеюсь на Силу Пикабу в помощи с google таблицами

Всем добрый день!
Нужна помощь с таблицами (Google), а точнее с правильным составлением формулы.
Имеется 3 столба со значениями, необходимо создать формулу при которой будет считаться количество значений из столба “A”, если в столбах «В» и «С» ничего нет.

Заранее большое спасибо!

Надеюсь на Силу Пикабу в помощи с google таблицами
11

Макрос для Excel

Пикабушники, доброй ночи.
Помогите, пожалуйста, с макросом, гугл молчит((
Есть общий файл с организациями и их сотрудниками, то есть несколько подряд одинаковых ИНН, но разные сотрудники, нужно
-копировать все строки одной организации в новую книгу (файл), включая шапку;
-сохранить и закрыть файл.
Название новой книги должно быть вида «ИНН Название компании». Файлы https://yadi.sk/d/ZWZ5I4TP87rLkA Заранее спасибо.

249

КАК НАПИСАТЬ 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 вы получите ответ: «Bad Request: strings must be encoded in UTF-8».

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

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

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

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

Теперь сообщения с русскими буквами прекрасно перевариваются 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
21

Заполнение пустых ячеек в Excel

Имеется ячейка с числом, например 11. Ниже несколько ячеек пустые, потом 12 ну и так далее. Как сделать заполнение пустых ячеек числом, которое выше? Например, в первой ячейке 11, вторая пустая. Значит ставим туда 11. Третья тоже пустая, опять ставим 11. В четвертой ячейке стоит 12, значит в пятую тоже ставим 12. Ну и ограничить число строк, например чтоб заполнило так 10000 ячеек и стоп. Спасибо

Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества