Помогите с макросом
Здравствуйте, дано: три ячейки с выпадающими списками, нужен макрос выбирающий первое значение в каждом
Здравствуйте, дано: три ячейки с выпадающими списками, нужен макрос выбирающий первое значение в каждом
Сам не программист, пробовал переиначить примеры с макросами из интернетов - не вышло. Гештальт не закрыт(
Наткнулся на лигу, подумал: почему нет?
Дано: книга excel с множеством листов. Пусть будет 50.
Начиная с 4 или 5 листа, в столбце B со строки 2 и ниже вписано 7-значное число (идентификатор). На всех листах числа разные. На одном листе есть список всех этих значений по возрастанию. При реализации поиска планировал его убрать или скрыть, это для себя.
Планировал на первой странице сделать окно поиска по всем листам книги с точным вводом значения - ввел значение, рядом в окошке отобразился результат и при нажатии на него происходил переход на эту ячейку. Как инструмент "Найти и заменить", только встроенный в первый лист книги.
Если такое возможно сделать, прошу помощи, как реализовать.
Методом тыка у меня подобное получилось, но с оговоркой - некоторые значения строк задублировались по всем листам книги. После экспериментов удалил свои вирши
Привет! Подскажите, возможно ли как-то сделать, чтоб ВПР подтягивала примечание из ячейки с отображением рисунка? Есть 2 листа в документе.
Вот первый:
Создал примечание, чтоб можно было быстрее просмотреть пропуск человека.
И мне надо, чтоб на второй лист, при регистрации прихода, ВПР-ом подтягивалось это примечание с изображением. Само примечание подтягивается, но изображение не видно =(
как-то так
Кто что может посоветовать? Или такое не возможно?
Добрый день!
Подскажите пожалуйста сообщество или ресурс, где можно заказать написание, как мне кажется (для опытных людей), простого макроса в xls.
Готов за это заплатить.
Здравствуйте, возникли проблемы с макросами. Выдает ошибку 5 "Invalid procedure call or argument". Помогите пожалуйста исправить ее
Я решил с двух ног ворваться в тему макросов.
Кто-то про них слышал, кто-то даже видел, отдельные сверхразумы их даже использовали. Сегодня будет ознакомительный пост: что это вообще такое и как с этим начать работать. Обратите внимание – этот пост тех, кто не знает, что такое макросы и никогда с ними не работал
Первым делом нужно включить вкладку «Разработчик». По умолчанию в 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 то макрос будет делать все в активном листе активного окна. Но макрос может идти и в другие листы, файлы, даже в другие приложения офиса, но об этом не сегодня.
После того, как макрос поработал с документом, не удастся кнопкой «назад» вернуть все изменения, так что, если данные важны, то сохраняйте их отдельно и макросом работайте с копией, макросы беспощадны.
Итак, на этом пока все. Надеюсь теперь те, кто никогда не видел макросов получат о них начальное представление. Дальше буду писать про более практичное применение.
Добрый день курителям экселя, имеется надстройка которая подставляет в ячейку число прописью. Делает она это замечательно, но только делает она это с копейками, а хотелось бы чтобы были только целые числа, может кто помочь исправить этот вопрос?