Эксель выполнить макрос несколько раз
Кажется, что это очень аккуратный трюк. вы можете использовать git diff > file.diff (и зафиксировать файл), а затем восстановить изменения с помощью git apply file.diff (из любого места) для достижения того же результата.
Это объяснялось здесь здесь как хорошо.
2 ответа
Этот код должен сделать трюк. Код дает вам InputBox , в котором вы можете ввести количество раз, чтобы запустить код.
Сообщите мне, если у вас есть какие-либо вопросы о коде или если вы хотите, чтобы я объясните это далее:)
Код работает по назначению, InputBox - приятный штрих. Очень признателен! Хотя я виноват не в том, что не заявлял об этом, я действительно надеялся, что он будет выбирать только 3 ячейки в строке, а не всю строку. Но я исправил это сам :) Еще раз спасибо. – Alcomoney 13 July 2018 в 15:04Привет, я дам вам ответ, и я попытался прокомментировать его, чтобы сделать его максимально дружелюбным к новичкам, но правда в том, :
Я могу объяснить вам, как это делается, но вы никогда не поймете, почему это делается до тех пор, пока вы не поймете основные методологии программирования, такие как цикл, и это то, что вам и вам одному придется сесть и полностью понимаем
[Разрывы в логике:]
Вероятно, самая большая проблема заключается в том, что вы не указали, что происходит, когда ваши данные попадают в пустые ячейки (что Я имею в виду под этим) - если в вашем цикле вы были в строке 10 (7, M, N), у вас больше не было бы букв для добавления, так как следующие 2 строки (12) больше не содержат eny-данных.
Учитывая это, я изменил цикл, чтобы начать с n-2-й строки вместо этого, чтобы это не произошло (это означает, что в вашем примере это закончится (или начнет быть более точным) в 6.1, поскольку это последний строка, которая может извлекать данные)
В общем, я бы рекомендовал размещать не только изображение входных данных, но и изображение текущего результата в этом случае правильно объясненный ожидаемый результат был бы намного больше наша польза и понимание, и это спасло бы меня от многих догадок.
[Теоретическая часть вашего вопроса:]
- Если вы хотите повторить определенное действие, вы всегда должны использовать один из 2 (или 3 в зависимости от того, как вы их классифицируете) петли for и do (while/until)
- . Еще лучше, если вы хотите циклически повторять количество действий за повторное количество раз, вы должны использовать либо процедуру Sub , либо функцию Function , поэтому вы можете использовать аргументы, которые действуют как переменная для цикла.
- Как правило, при добавлении или удалении строк важно перебирать из нижнего в верхний (от последнего к первому). Зачем? Потому что если вы добавите дополнительную строку, это испортит ваш порядок строк.
Учитывая все это, сама процедура может выглядеть примерно так:
Вы можете использовать следующую процедуру каждый раз для указанного диапазона.
Например. в вашем случае вы можете запустить эту процедуру с помощью следующей команды:
Хотя само решение должно работать, в реальном мире возможно, более разумно не использовать определенный диапазон для вызова каждой процедуры. Особенно, если это означает, что использование должно смотреть на рабочий лист, проверить диапазон и подсчитать строки вручную.
Это одна из причин, по которым мы начали процедуру для начала. Таким образом, я создал еще одну процедуру, сродни main() на большинстве языков программирования, которая обнаруживает последнюю активную строку и применяет эту процедуру к вашему диапазону данных, автоматически определяя ее.
Итак, в конце концов, ваш взгляд должен выглядеть что-то вроде этого:
Теперь, когда вы будете запускать (манально) или Call процедуру run_data() , она автоматически определит диапазон и применит процедуру, которую мы ему определили.
[Ожидаемые результаты визуализации и закрытия слов:]
Мы начали с этого:
После выполните процедуру:
Теперь, я знаю, может показаться, что здесь есть много новых концепций, но правда в том, что все они довольно легко после того, как вы пристегнитесь и попытайтесь понять код по строкам. Большинство из них - простые математические операции.
Если у вас все еще есть проблемы с пониманием чего-либо здесь, сначала сделайте свое собственное исследование, а затем опубликуйте комментарий здесь или еще лучше, создайте новый вопрос (если он его оправдает).
Макрос в VBA, копирование строк указанное количество раз, и группировка
Добрый день, помогите пожалуйста с макросом, который при вводе в определенную ячейку, какой либо.
Запуск макроса в указанное время, Word
Я ещё не искал по этой теме ничего, т.к. есть др. задачи, которые я решаю очень медленно. Вопрос в.
Повторить цикл указанное количество раз
Пытаюсь написать цыкл который выполнится указанное количество раз, но со сменой одной переменной в.
Выполнить цикл while указанное количество раз
привет ,как сделать так чтобы цикл количество равное число. то есть while(3)< ну нужно.
Да последний вариат являеся наиболее оптимальным, воспользуюсь им. Спасибо.
Вывести звездочки и точки указанное количество раз
Решаю задачу: Напишите программу, использующую вложенные циклы, которая запрашивает у.
Выделить те символы, которые встречаются в исходной строке указанное количество раз
Необходимо выполнить с помощью ассемблерной вставки. Я очень-очень новичок в этом, получилось типа.
Отредактировать заданный текст, удалив из него слова, которые встречаются указанное количество раз
Отредактировать заданный текст, удалив из него слова, которые встречаются указанное количество раз.
Выполнение функции заданное количество раз
Добрый день. Вопрос, конечно, детский, но позволю его себе задать, так как изучаю jquery не с.
Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
-
Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.
Способ 2. Запись макросов макрорекордером
Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
- в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
- Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
- В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button) :
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
А то неохота несколько раз писать:
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlDown).Select
Selection.End(xlDown).SelectМожно ли это сократить это до одной строки?
могут помочь организовать циклы.
А вот что конкретно нужно сделать в Вашем случае, простите, не совсем понятно.
И еще посмотрите вот это Управляющие структуры VBA . Циклы "Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 Последний раз редактировалось VictorM; 17.09.2008 в 15:32 .Это часть кода.
Смысл в том, что на листе sheet1 в файле Sales необходимо операцию Selection.End(xlDown).Select выполнить 6 раз. Вопрос - можно ли эти 6 строк заменить одной?З.Ы. Ссылка битая.
Повторить любую операцию несколько раз можно, наример так
но честное слово не пойму для чего нужно 6 раз повторять Selection.End(xlDown).Select
p.s. да , а ссылка правда не отвечает, хотя адрес верный. мож сайт временно недоступен. жаль, хороший сайт.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499Спасибо огромное, я бы с удовольствием объяснил, но боюсь это будет слишком долго.
Еще раз спасибо.
а по поводу шесть раз xlDown:
А может Вам нужно просто найти последнюю занятую ячейку в столбце??
Это можно сделать без циклов.
например, так:
Прыгаем вверх до последней заполненной ячейки в нужном столбце:где col - номер нужного столбца.
и ещё - постарайтесь в макросах не использовать .Select .Activate без крайней на то необходимости!
поверьте найти нужную ячейку, скопировать диапазон можно и без того, чтобы делать эти ячейки выделенными.а по поводу шесть раз xlDown:
А может Вам нужно просто найти последнюю занятую ячейку в столбце??
Это можно сделать без циклов.
например, так:
Прыгаем вверх до последней заполненной ячейки в нужном столбце:где col - номер нужного столбца.
и ещё - постарайтесь в макросах не использовать .Select .Activate без крайней на то необходимости!
поверьте найти нужную ячейку, скопировать диапазон можно и без того, чтобы делать эти ячейки выделенными.Читайте также: