Excel макрос увеличить значение ячейки на 1

Обновлено: 06.07.2024

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

Обращение к конкретной ячейке

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

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

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале "." (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат "14 марта 2001 г.". Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат "Денежный" с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка "Type mismatch". Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Я написал макрос, который увеличивает значение ячейки А на 1 при изменении ячейки В, но почему то значение изменяется четко на 86. Я конечно сделал в ячейке С деление на 86, но все же мне интересно почему так происходит.
Код внизу:

Добавлено через 8 минут
Также вслед предыдущему посту. Макрос очень медленно работает. Хотя макрос привязан к листу а не к книге. Как можно ускорить работу макроса? __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

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

Изменить значение ячейки при изменении другой (DBGrid,AdoTable)
Помогите пожалуйста. Как изменить значение ячейки при изменении другой? То есть я щелкаю допустим.

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

При изменении формата ячейки с даты на текст значение меняется неверно
Добрый день! Я написал программку для пасинга из экселя дней рождения сотрудников и выводу.

gisli79, ваш макрос не должен работать - If . Then есть, а End If где? Для начала почитайте про условные операторы. И слава богу, что ваш макрос короткий. А то был бы строк 100 да ещё две пустых строки на одну непустую .

Добрый день, Pashulka.

Спасибо. Очень выручили.Без лишних слов.

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

При пересчёте формул придётся использовать другое событие, а именно :

Если изменение значений приводит к пересчёту формул, то необходимо раскомментировать две строки.

Спасибо большое. Помогло. Реализую мат.модель микросхемы счетчик ИЕ7 и других . С помощью формул в ячейке не получается т.к. счет идет по перепаду сигнала CLK, поэтому пытаюсь реализовать с помощью VBA (до этого никогда не пользовался). С Вашей помощью получилось.

При добавлении второго макроса, связанного с кнопкой сильно падает скорость выполнения макроса.
Если задать значение counter=10 т.е. подать 10 импульсов на вход счетчика 133ИЕ5, то выполнение
занимает время секунд 30. Не совсем понятно с чем связано такое падение скорости выполнения макроса.

Можете попробовать так, хотя сильно сомневаюсь, что это может.

gisli79, в дополнение к pashulka,
1. Application.ScreenUpdating = False / True может сократить время в несколько раз;
2. Для сокращения числа обращения к ячейке можно использовать

Большое спасибо за Ваши ответы.

Добавлено через 1 минуту
Application.ScreenUpdating = False / True может сократить время в несколько раз;

Это в качестве альтернативы строчкам: Application.EnableEvents = False/True?

Добавлено через 19 минут
Вопрос снимается
"
Application.ScreenUpdating = False / True может сократить время в несколько раз;

Это в качестве альтернативы строчкам: Application.EnableEvents = False/True? "

Возникла проблема. Макрос, который отлично работал при создании и отладке, перестал работать как положено.

Проблемная часть макроса, приведена внизу.

При выставлении [CLK_IE7] в 0 макрос вычислял значение по формуле и помещал значение в ячейку [COUNTER_IE7].
Когда же данные в ячейку [CLK_IE7] стали поступать из ячейки, которая находится ниже то [CLK_IE7] изменяется как положено, а вычисление и помещение значения в ячейку [COUNTER_IE7] не происходит. Не могу понять в чем дело.

Добавлено через 16 минут
Когда же данные в ячейку [CLK_IE7] стали поступать из ячейки(значение в этой ячейке вычисляется автоматически по формуле), которая находится ниже то [CLK_IE7] изменяется как положено, а вычисление и помещение значения в ячейку [COUNTER_IE7] не происходит. Не могу понять в чем дело.

Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:

Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.

Присваивается переменной диапазон ячеек с помощью оператора Set:

В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.

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

Адресация ячеек в диапазоне

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

Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:

Многие люди боятся использовать макросы в Excel, потому что считают их довольно сложными для понимания. Все потому, что они связаны с программированием. Но на практике все оказывается значительно проще, чем может показаться на первый взгляд. В программировании важно научиться строить алгоритмы. И если человек умеет кодить хотя бы на одном языке, ему значительно проще усвоить все остальные.

Мы приведем некоторые примеры макросов Excel, которые станут верными помощниками в выполнении наиболее частых задач.

Понятие макроса

Термин «Макрос» слышало множество людей. Нередко при запуске таблицы появляется предупреждение: “Этот документ использует макросы, способные навредить данному компьютеру, поэтому они отключены с целью защиты от вредоносных действий”.

Макрос – действенный способ автоматизировать самые частые действия, которые нужно выполнять в электронных таблицах. Макросы – это разновидность программирования. Разработка этих подпрограмм осуществляется с помощью языка VBA. Впрочем, некоторые виды макросов не требуют навыков программирования. Ведь существует еще такое понятие, как макрорекордер. Достаточно его включить и совершить некоторые действия, как далее они будут повторяться по нажатию одной кнопки.

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

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

Значительно проще объяснить, зачем нужны макросы, на реальном примере. Например, необходимо каждый день удалять из электронной таблицы несколько столбцов, а потом добавлять новые строки. Это невероятно утомительное занятие, отнимающее много времени. Если же воспользоваться макросами, есть реальная возможность значительно его сэкономить.

Макросы можно запускать по нажатию определенной комбинации клавиш. Например, если нажать Ctrl+J, можно запустить подпрограмму.

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

Если же нужно давать компьютеру сложные инструкции, можно воспользоваться редактором Visual Basic, примеры кода в котором мы и рассмотрим немного позже.

Когда какой тип записи макросов использовать?

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

Пример использования макросов №1

Сперва этот пример кода использовался для демонстрации комментариев кода, написанного на VBA. Но поскольку он включает и иные возможности языка, он может применяться для демонстрации следующих функций:

  1. Объявление переменных.
  2. Указание ссылок на ячейки Excel.
  3. Применение цикла типа For.
  4. Применение условного оператора.
  5. Отображение оповещения.

Sub Find_String(sFindText As String)

iRowNumber = 0

For i = 1 To 100

If Cells(i, 1).Value = sFindText Then

iRowNumber = i

If iRowNumber = 0 Then

Пример 2

Эта процедура перечисляет все значения числовой последовательности Фибоначчи, вплоть до 1000. В этом примере приводятся следующие возможности макросов Excel:

  1. Объявление переменных.
  2. Цикл Do While.
  3. Ссылки на ячейки текущего листа Excel.
  4. Условный оператор.

Sub Fibonacci()

iFib_Next = 0

Do While iFib_Next < 1000

If i = 1 Then

iStep = iFib

iFib = iFib_Next

Cells(i, 1).Value = iFib

iFib_Next = iFib + iStep

Пример 3

Следующий пример подпрограммы читает значения с ячейки в колонке A активного листа, пока не найдет пустую ячейку. Вся полученная информация сохраняется в массиве. Это простой пример макросов в электронных таблицах, который показывает:

  1. Как объявлять переменные.
  2. Работу динамического массива.
  3. Цикл Do Until.
  4. Ссылки на ячейки в текущем листе Excel.
  5. Встроенную функцию Ubound, которая предназначена для определения размера массива.

Sub GetCellValues()

ReDim dCellValues(1 To 10)

Do Until IsEmpty(Cells(iRow, 1))

If UBound(dCellValues) < iRow Then

ReDim Preserve dCellValues(1 To iRow + 9)

dCellValues(iRow) = Cells(iRow, 1).Value

iRow = iRow + 1

Пример 4

Следующая процедура «Sub» читает содержимое ячеек из колонки А другого листа, имеющего название «Sheet2» и с этими значениями осуществляет арифметические операции. Результат вычислений пишется в колонке А текущего листа.

Этот пример показывает:

  1. Как объявлять переменные.
  2. Объекты Excel.
  3. Цикл Do Until.
  4. Доступ к листам электронных таблиц и диапазонам ячеек с текущей книги.

Sub Transfer_ColA()

Dim i As Integer

Dim Col As Range

Dim dVal As Double

Do Until IsEmpty(Col.Cells(i))

Cells(i, 1) = dVal

Пример 5

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then

Пример 6

Следующая подпрограмма демонстрирует, как обрабатывать ошибки с помощью операторов OnError и Resume. Также в этом коде описывается, как открывать и читать данные с файла.

Sub Set_Values(Val1 As Double, Val2 As Double)

Dim DataWorkbook As Workbook

On Error GoTo ErrorHandling

DataWorkbook.Close

ErrorHandling:

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

Рекомендации по использованию макросов

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

  1. Перед тем, как записывать макрос с помощью рекордера, следует заранее продумать все свои действия, поскольку автоматизироваться будут все действия (в том числе, и ошибочные).
  2. Не стоит торопиться, поскольку паузы при записи макросов не учитываются. Вполне можно начать продумывать по ходу какие-то действия. А все записанные операции будут обработаны в один момент.
  3. Обязательно необходимо научиться использовать режим отладки макроса. Если возникают какие-то ошибки, он поможет обнаружить, в чем причина неполадки. На первых порах без ошибок не обойтись, потому что в реальной программе будет все не так идеально, как может показаться на первый взгляд.
  4. Перед использованием макросов, сделанных другими людьми, нужно настроить антивирусную программу на их обнаружение. Как правило, эта опция установлена по умолчанию.
  5. Если загружаются документы из сомнительных источников, следует выбрать опцию «Отключить макросы» при их открытии. И не рекомендуется менять настройки, которые выставлены по умолчанию в настройках безопасности Excel.

Выводы

Таким образом, макросы – это эффективный инструмент автоматизации рабочих процессов в Excel. Он позволяет автоматизировать даже самые сложные последовательности действий. Если необходимо сделать простую программку, то достаточно воспользоваться встроенной функцией для записи макросов. Для более сложных необходимо освоить язык VBA, который является простым для изучения и очень гибким.

Если используются сторонние макросы, обязательно нужно побеспокоиться о безопасности их использования.

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

Создание макросов

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

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

Метод 1: Записываем макрос в автоматическом режиме

Чтобы иметь возможность записать макросы автоматически, для начала нужно их активировать в параметрах Эксель.

Узнать, как это можно сделать, можно в нашей статье – “Как включать и отключать макросы в Excel”.

После того, как макросы включены, можно перейти к нашей основной задаче.

Запись макроса в Эксель

  1. Переключаемся во вкладку “Разработчик”. В группе инструментов “Код” щелкаем по значку “Записать макрос”.
  2. На экране появится окошко, в котором мы можем выполнить настройки записи. Здесь указывается:
  3. имя макроса – любое, но должно начинаться с буквы (не с цифры), не допускаются пробелы.
  4. комбинация клавиш, которая будет использоваться для запуска макроса. Обязательной является Ctrl, а вторую мы можем назначить в специальном поле. Допустим, пусть это будет клавиша “r”. Если нужно использовать заглавную букву, нужно зажать клавишу Shift, которая будет добавлена в сочетание клавиш.

Запускаем выполнение макроса

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

Корректируем макрос

Созданный макрос можно изменить. Самая распространенная причина, которая приводит к такой необходимости – сделанные при записи ошибки. Вот как можно отредактировать макрос:

Метод 2: создание макроса вручную

Опытные пользователи Эксель в некоторых случаях предпочитают создавать макросы от начала до конца полностью вручную . План действий следующий:

Заключение

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

Читайте также: