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

MS, Libreoffice & Google docs

762 поста 14 934 подписчика

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

2935

Правила работы в Excel1

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

1438

EXCEL - ЭТИ СТРАШНЫЕ МАКРОСЫ – НАЧАЛО

Я решил с двух ног ворваться в тему макросов.

Кто-то про них слышал, кто-то даже видел, отдельные сверхразумы их даже использовали. Сегодня будет ознакомительный пост: что это вообще такое и как с этим начать работать. Обратите внимание – этот пост тех, кто не знает, что такое макросы и никогда с ними не работал

Первым делом нужно включить вкладку «Разработчик». По умолчанию в Excel ее спрятали, чтобы не взорвать мозг юзерам. Идем в Параметры -> Настройка ленты -> Основные вкладки -> Разработчик (поставить галочку).

Теперь идем в эту вкладку, нажимаем «Записать макрос» выбираем имя жмакаем «ок». Все, теперь любые действия в Excel надежным образом записываются.

Давайте теперь что-то сделаем. На пример поменяем заливку ячейки А1, в ячейку A2 напишем значение «Мама, я программист», а в ячейке А3 пропишем формулу текущей даты «=Сегодня()»

Останавливаем запись макроса. Нажимаем иконку «Макросы», выбираем наш макрос как мы его обозвали, нажимаем кнопку «изменить».

Появляется окно Microsoft Visual Basic for Applications. Кстати оно также вызывается комбинацией клавиш (Alt + F11) У меня почему-то вызывается только левым Altом, а правым нет, видимо намекая на то что для написания макросов лучше иметь 2 руки (хотя я и одной нажать могу). Появился редактор языка VBA – это язык, который написан специально под офис чтобы на нем писать макросы. В основном окне видим саму эту запись, которую автоматически сделал Excel.

Sub Макрос2()
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A2").Select
ActiveCell.FormulaR1C1 = "Мама, я программист"
Range("A3").Select
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("A4").Select
End Sub

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

Теперь давайте разбираться что делает этот макрос

Sub Макрос2()
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With

(Весь этот кусок от начала говорит нам о том, что с тем элементом что был выделен ранее происходит некоторое дерьмо, в том числе изменение цвета. Вот там, где Color = 255. Все остальное это параметры заливки, которые по итогу не менялись, но макрорекордер решил их тоже записать, на всякий. Это связано с внутренними особенностями работы excel как я понял. Вообще привыкайте к тому что макрорекордер пишет много того что потом вообще можно удалить. Конструкция With – End With позволяет делать несколько действий с одним объектом, на пример выше берется объект Selection.Interior, то есть фон выбранной области и ряду параметров этой заливки назначаются конкретные значения. То есть With нужен для облегчения записи кода, чтобы Selection.Interior не писать вначале каждой строчки.

Range("A2").Select –выделяем ячейку «A2»
ActiveCell.FormulaR1C1 = "Мама, я программист" – пишем в ячейку значение
Range("A3").Select – выделяем ячейку «А3»
ActiveCell.FormulaR1C1 = "=TODAY()" –пишем в ячейку формулу
Range("A4").Select – зачем то выделяем ячейку А4.
End Sub

Теперь при создании нового листа и запуске этого макроса он будет делать все то же самое.

Тут стоит понимать, что половину того что записал макрос можно опустить, так как нам важен результат, а не путь по которому к этому результату пришли, а макрорекордер записывает именно путь. На пример вместо всей конструкции With можно записать

Range("A1").Interior.Color = 255

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

Range(“A2”).Value = ”Мама, я программист”

или писать формулу как в третей ячейке

Range(“A3”).FormulaR1C1 = ”=TODAY()”

С формулами и значениями лично мне не понятно, как excel их интерпретирует, но в макрорекордре он записывает любой ввод в ячейку как ввод формулы. Благо лично у меня при написании макросов не возникает необходимости писать формулы в ячейки. На пример вместо вставки формулы как это было выше можно написать Range(“A3”).Value = Date(), тогда макрос вставит сразу текущую дату в ячейку как значение.

Опытные макроделы пишут макросы сразу без их записи макрорекордером, но это полезный инструмент для самостоятельного изучения при написании макросов: если не знаешь, что как делается в VBА то запускаешь и делаешь, потом смотришь что он там написал.

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

Sub Colorization()
'начало нашего макроса и его название
Dim x As Integer
'объявляем переменную х типа интеджер, это тип для целых чисел от -32 768 до 32 767 (2 байта),
'она нам нужна для перебора ячеек
For x = 1 To ActiveSheet.UsedRange.Rows.Count
'перебираем х от 1 до конца использованной части листа, то есть не весь лист, а там где есть данные.
'Тут цикл For повторяется от этой строки до строки Next x, которая прописана ниже
If Cells(x, 1).Value = "красный" Then Cells(x, 1).Interior.Color = RGB(255, 0, 0)
'если значение в ячейке равно "красный" то закрашиваем ячейку в красный цвет. Функция If выполняет часть
'после Then если условие между If и Then верно. Так как у нас необходимое действие занимает одну
'строку можно писать в таком виде, если же действий несколько применяется конструкция:
'If … Then
'…
'…
'End If
If Cells(x, 1).Value = "зеленый" Then Cells(x, 1).Interior.Color = RGB(0, 255, 0)
'как выше только в зеленый цвет
If Cells(x, 1).Value = "синий" Then Cells(x, 1).Interior.Color = RGB(0, 0, 255)
'в синий цвет
Next x 'берем следующее значение х, конец цикла For, который мы начали выше
End Sub 'конец макроса
Как работает этот макрос: берет первый столбец, сначала 1 ячейку, смотрит что в ней написано, и если это равно «красный», «зеленый» или «синий», то красит фон ячейки в этот цвет, если нет по пропускает. Потом берет вторую и т. д. до конца активной части текущего листа.
Для проверки работы макроса нам нужен лист, где в первом столбце будут случайным образом прописаны цвета «красный», «зеленый», «синий». Запускаем макрос – когда он отработает ячейки будут раскрашены:

Некоторые пояснения: если не писать просто Cells то макрос будет делать все в активном листе активного окна. Но макрос может идти и в другие листы, файлы, даже в другие приложения офиса, но об этом не сегодня.

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

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

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

Удаление строк, если значение не совпадает с значением из списка

Есть таблица с телефонными номерами, примерно 150 шт. Из них нужно выбрать 70 тлф согласно списка. Ненужные строки удалить. Можно конечно и фильтром, но это очень геморно. Спасибо

678

Если б мишки были пчёлами… условия в Excel

Решил попробовать формат коротких постов по Excel

Дети, сегодня я расскажу вам о такой удобной функции в Excel как ЕСЛИ.

В общем виде выглядит так:

ЕСЛИ (условие; результат если условие верное; результат если условие не верное)

Я буду писать формулу, а на картинке будет результат этой формулы в 5 столбце

=ЕСЛИ(A2="овощи";"да";"нет")

При множественных условиях иногда удобно применять функции И, и ИЛИ, которые позволяют соединять несколько условий

=ЕСЛИ(И(A2="овощи";D2>50);"дорогой овощ";"либо не дорогой, либо не овощ")

Не забываем, что можно комбинировать несколько ЕСЛИ Главное не запутаться в скобках и точках с запятыми.

=ЕСЛИ(A2="фрукты";ЕСЛИ(D2>100;"дорогой фрукт";"не дорогой");"не фрукт")

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

А на этом сегодня все, пойду дальше писать про макросы…

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

Поиск максимального

Ребяты, нужна помощь. Никак не могу понять, как провернуть такую штуку:

Есть несколько блоков данных на разных страницах (для примера, используем вот такую)

Поиск максимального

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

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

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

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

Помощь с макросом

Дамы и господа, добрый день.

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

Помощь с макросом
19

Работа гугл документов

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

Работа гугл документов

Т.е. разбивает текст на блоки, которые непонятно как убрать, а это ооочень сильно мешает. Может, кто знает как -

1. Отключить это в гугл документах, чтобы он не дробил текст так.

2. Может, есть настройка в ворде, которая убирает такое дробление.

15

Сводные таблицы Google, функция ЕСЛИ(IF)

День добрый!

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

Для 1-й если поле 'Причина отказа' не имеет значение, то суммируем полю 'Сумма сделки', иначе 0:

=IF(ISBLANK('Причина отказа');SUM('Сумма сделки');0)


Для 2-й суммируем наоборот, если есть значение, сумму выводим:

=IF(ISBLANK('Причина отказа');0;SUM('Сумма сделки'))


И собственно не могу понять почему значения заполняет в обеих сводных таблицах, 'Причина отказа' в общей таблице заполнено и по логике в 1-ю таблицу не должно подтягивать, только во 2-ю. Что не так сделал?

Показать полностью 2
Отличная работа, все прочитано!