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

 

Fireman

Пользователь

Сообщений: 50
Регистрация: 07.02.2013

#1

08.04.2013 09:30:08

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

Код
Dim x As Integer
x = Range("B2" ;) 
x = x + 1
End Sub

Через Function () пробовал то же не идет.

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Пример с кнопкой приложите

Согласие есть продукт при полном непротивлении сторон.

 

Fireman

Пользователь

Сообщений: 50
Регистрация: 07.02.2013

Вот

Прикрепленные файлы

  • 1.xlsm (18.12 КБ)

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

#4

08.04.2013 09:39:27

Код
Range("B2") =  Range("B2") +1

There is no knowledge that is not power

 

MerZ@vcheG

Пользователь

Сообщений: 98
Регистрация: 23.12.2012

#5

08.04.2013 09:40:08

Код
Function lll()
x = Range("B1").Value
x = x + 1
Range("B1").Value = x
End Function

Современные языки программирования обязаны иметь встроенный метод ChuckNorris(),
который возвращает нужные тебе данные из любого объекта, даже если их там нет…

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Или вот. Для Кнопки1

Прикрепленные файлы

  • 1.xlsm (18.61 КБ)

Согласие есть продукт при полном непротивлении сторон.

 

Fireman

Пользователь

Сообщений: 50
Регистрация: 07.02.2013

Спасибо братва большое вы помогаете прогеру который делает супрр софтик

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

#8

09.01.2019 22:41:02

Всем привет. Очень интересует данная тема но с датой.

Код
Range("D4").Value = Range("D4").Value + 1

Что добавить в скрипт для того, чтобы в ячейку D4 прибавлялся при нажатии календарный день с нужным количеством дней в месяце?
Заранее спасибо

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#9

09.01.2019 22:43:43

Цитата
JARED написал:
прибавлялся при нажатии календарный день с нужным количеством дней в месяце

это как понять?

По вопросам из тем форума, личку не читаю.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#10

09.01.2019 22:44:41

Цитата
JARED написал:
прибавлялся при нажатии календарный день с нужным количеством дней

это что за календарный день такой с нужным количеством дней? и как отличить нужное количество дней от не нужного?

Изменено: Ігор Гончаренко09.01.2019 22:45:18

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Михаил С.

Пользователь

Сообщений: 10514
Регистрация: 21.12.2012

#11

09.01.2019 22:45:39

Цитата
JARED написал:
Что добавить в скрипт

ничего. Сначала нужно просто попробовать.

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

Есть ячейка в которой пишется в ручную каждый день дата изменения файла. Как сделать так, чтобы при активации макроса в этой ячейке добавлялся бы новый день по календарю, допустим сегодня 31 января, в ячейке указано 31 и при срабатывании макроса там уже было бы 1, 1 февраля и т.д. а не 32

Изменено: JARED09.01.2019 22:47:32

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

JARED, если прибавить к 31 января единицу, то получится целое число, которое при форматировании в дату даст 1 Февраля. Так что скрипт вам полностью подходит.

По вопросам из тем форума, личку не читаю.

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

Нашел это

DateAdd

но как использовать и оно ли это

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

32 и не будет )) Вы попробуйте.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#16

09.01.2019 22:54:49

так вот же, в Д4 все работает

Код
Sub P_1()
 [d4] = [d4] + 1
End Sub

Прикрепленные файлы

  • D4.xlsm (15.94 КБ)

Изменено: Ігор Гончаренко09.01.2019 23:07:34

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

Спасибо. Очевидное и не заметил :)  

Изменено: JARED09.01.2019 23:01:39

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#18

09.01.2019 22:59:33

Цитата
Михаил С. написал:
Сначала нужно просто попробовать.
Цитата
Юрий М написал:
Вы попробуйте.
Цитата
Ігор Гончаренко написал:
так вот же, в Д4 все работает

Интересно, сколько еще раз надо написать?   :-)

По вопросам из тем форума, личку не читаю.

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

Так это форум, я напишу и читаю, пробую, потом обновил а тут уже :) Извиняюсь я привыкну

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Интересно, а как вопрос соотносится с назваением темы? Увидели знакомое слово и решили, что вопрос по датам тоже сюда?

 

JARED

Пользователь

Сообщений: 87
Регистрация: 16.12.2018

Я увидел прибавление +1 и поскольку думая, что вопрос более глубокий и отталкиваясь от заданной темы хотел ее развить. Суть не изменена вроде, нет?

Изменено: JARED09.01.2019 23:06:25

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Ну да, увеличить значение на единицу и прибавление к дате периода — совсем одно  то же…
Если Вы мужина, а Вас назовут девушкой — нормально? Ведь оба «человеки» :)

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#24

09.01.2019 23:07:10

Виктор, у меня код VBA:

Код
 [d4] = [d4]+1

правда увлекся и написал еше один код с минус 1. виноват.. сейчас исправлю

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#25

09.01.2019 23:09:19

Игорь, твй код опросов не вызывает. Но это:

Цитата
JARED написал: чтобы в ячейку D4 прибавлялся при нажатии календарный день с нужным количеством дней в месяце?
 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Вить, не придирайся )) Тема — прибавить единичку. А прибавить к обычному числу, или к дате — разницы не вижу.
Про «нужное количество дней» — это просто хромает формулировка: автор боялся, что Excel не разберётся и выведет 32 января ))

 

как прибавить 1 — прошли
и тут….
тема получила неожиданное продолжение, «а как прибавить 1 день?» и сурово задумались сибирские парни: «в самом деле, как?»
оказалось — нужно к предыдущему дню прибавлять единичку, ни больше и не меньше

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

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

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

#29

09.01.2019 23:27:02

Тормознул, уже всё написано :)

Изменено: Hugo09.01.2019 23:42:57

Макрос для увеличения и уменьшения значения ячейки

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:13 |
Сообщение № 1

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Уважаемые господа!

Помогите, пожалуйста. Нужен макрос, который бы просто прибавлял в указанной ячейке указанное в нем число, и аналогичный, чтобы отнимал.
На всякий случай приложил пример. В строке 3 написаны значения, которые должны прибавляться/отниматься при нажатии на значки из строки 4. Итог должен быть в строке 5.

 

Ответить

Матраскин

Дата: Вторник, 30.07.2013, 10:35 |
Сообщение № 2

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

ArkaIIIa, сделал для 1ого числа, для остальных точно так же ;)

К сообщению приложен файл:

7131461.xlsm
(15.4 Kb)


в интернете опять кто-то не прав

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:38 |
Сообщение № 3

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Pelena
Дико извиняюсь, но, действительно, нужны макросы на плюс и минус) В дальнейшем буду более внятно формулировать тему)

Матраскин
Благодарю!

 

Ответить

Матраскин

Дата: Вторник, 30.07.2013, 10:40 |
Сообщение № 4

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

ArkaIIIa, но вот это….это всё ерунда, можно было использовать счётчик, постаить шаг какой надо и ничего не надо было бы придумывать

хотя.. там нет отрицательных чисел, не знал


в интернете опять кто-то не прав

Сообщение отредактировал МатраскинВторник, 30.07.2013, 10:44

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:44 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

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

Сообщение отредактировал ArkaIIIaВторник, 30.07.2013, 10:44

 

Ответить

Serge_007

Дата: Вторник, 30.07.2013, 10:48 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

в скаченном архиве не нахожу экселевских файлов

ArkaIIIa, а свой собственный файл ( 7131461.xlsx) из топика у Вас как скачивается? Тоже как архив?


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Матраскин

Дата: Вторник, 30.07.2013, 10:49 |
Сообщение № 7

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

ArkaIIIa,

К сообщению приложен файл:

1948853.xlsx
(13.1 Kb)


в интернете опять кто-то не прав

Сообщение отредактировал МатраскинВторник, 30.07.2013, 10:49

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:49 |
Сообщение № 8

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Serge_007
Нет, свой нормально скачивается. Как экселевский файл.

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:51 |
Сообщение № 9

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Матраскин
Спасибо, очень здорово. А при помощи какого функционала Вы сделали счетчик?

2Серж
Последний файл от Матраскина скачивается корректно.

Сообщение отредактировал ArkaIIIaВторник, 30.07.2013, 10:52

 

Ответить

_Boroda_

Дата: Вторник, 30.07.2013, 10:54 |
Сообщение № 10

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Посмтрите еще такой вариант


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Матраскин

Дата: Вторник, 30.07.2013, 10:58 |
Сообщение № 11

Группа: Друзья

Ранг: Обитатель

Сообщений: 375


Репутация:

81

±

Замечаний:
0% ±


20xx

ArkaIIIa, компонент Счётчик :D
Находится во вкладке разработчик->вставить->счётчик


в интернете опять кто-то не прав

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:58 |
Сообщение № 12

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

Матраскин
Разобрался вроде, нужно было активировать опцию «Разработчик».

 

Ответить

ArkaIIIa

Дата: Вторник, 30.07.2013, 10:59 |
Сообщение № 13

Группа: Проверенные

Ранг: Ветеран

Сообщений: 894


Репутация:

115

±

Замечаний:
0% ±


2010

_Boroda_
К сожалению Ваш файл тоже скачивается в форме архива :(

 

Ответить

Serge_007

Дата: Вторник, 30.07.2013, 11:03 |
Сообщение № 14

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

ArkaIIIa, у Вас windows какой и браузер?


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Hugo

Дата: Вторник, 30.07.2013, 11:41 |
Сообщение № 15

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3140


Репутация:

670

±

Замечаний:
0% ±


2010, теперь уже с PQ

Добрый день.
Ещё можно заменить эти +/- на стандартный элемент SpinButton.
Тогда например для B его код может быть такоим:

[vba]

Код

Private Sub SpinButton1_SpinDown()
     [b5] = [b5] — [b3]
End Sub

Private Sub SpinButton1_SpinUp()
     [b5] = [b5] + [b3]
End Sub

[/vba]

Либо без макросов ставьте аналогичный Spinner. Его завязать например на C1 (для C), и тогда в результирующую ячейку формулу

Отрицательных не будет, но они и не нужны.


excel@nxt.ru
webmoney: R418926282008 Z422237915069

 

Ответить

demonizkrg

Дата: Среда, 19.08.2015, 08:41 |
Сообщение № 16

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Матраскин, добрый день. Воспользовался вашим макросом. Всё здорово, но есть одна проблема.

Создал таблицу, что бы менеджеру было удобно изменять кол-во товаров на полке. Для этого вставил макрос «+/-» убрать, добавить товар. Всё работает, но! Когда фильтруешь столбцы по алфавиту, например, то кнопки макросов остаются на местах и связь со строками пропадает.

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

Спасибо заранее!

Ниже есть скриншот!
[moder]Тема здесь
http://www.excelworld.ru/forum/2-18873-154769-16-1439962986
Эта тема закрыта.

Сообщение отредактировал _Boroda_Среда, 19.08.2015, 09:18

 

Ответить

Есть макрос для excel, привязываю его к фигуре, фигура находится в определенной ячейке. В данном случае в B6, как сделать так, чтобы мне не приходилось менять вручную адрес ячейки, а получать его в зависимости от места расположения фигуры? Например, фигура расположена в ячейке B9, соответственно получаю адрес ячейки из расположения фигуры и делаю уже инкремент.

Sub mac1()
    With Range("B6")
    If IsNumeric(.Value) Then
    Application.EnableEvents = False
    .Value = .Value + 1
    Application.EnableEvents = True
    End If
    End With
End Sub

vikttur_Stop_RU_war_in_UA's user avatar

задан 23 июн 2020 в 12:38

daniel's user avatar

4

Событие выделения ячейки (ЛКМ) не сосовсем удобно в данном случае.

Вариант: при ПКМ +1. Если ошиблись, отнять единичку — DoubleClick

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Range("B2:B100"), Target) Is Nothing Then
        Cancel = True
        Target.Value = Target.Value + 1
    End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Range("B2:B100"), Target) Is Nothing Then
        Cancel = True
        Target.Value = Target.Value - 1
    End If
End Sub

Код разместить в модуле листа

ответ дан 23 июн 2020 в 13:25

vikttur_Stop_RU_war_in_UA's user avatar

16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

1

Прибавить значение ячейки

18.03.2015, 09:34. Показов 11767. Ответов 14


Студворк — интернет-сервис помощи студентам

Здравствуйте, ситуация в следующем, нужно прибавить в ячейку допустим А1 значение А2, но при этом в А1 значение может меняться. В excel не силён может подскажите что почитать и куда смотреть, ну или пример



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 09:57

2

т.е. пишем в ячейку А2 значение и оно автоматом прибавляется к существующему значению в ячейке А1 и в тоже время мы можем менять значение в ячейке А1. Если да то только макросом.



0



16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

18.03.2015, 10:16

 [ТС]

3

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



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 10:26

4

Цитата
Сообщение от Glin
Посмотреть сообщение

Сейчас буду изучать макросы

как бы код макроса не сложный.
обратите внимание на событие Worksheet_Change



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 10:32

5

жмем ПКМ (правая кнопка мыши) по ярлыку лист1 — Исходный код. Изучаем.



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

18.03.2015, 11:00

6

Цитата
Сообщение от Vlad999
Посмотреть сообщение

код макроса не сложный

Пара советов:
1. Не забывайте запрещать обработку событий перед тем, как менять что-либо на листе, иначе есть шанс получить бесконечную рекурсию (не в этом конкретном случае, а вообще). И разрешать обработку событий после.
2. Примите меры к тому, чтобы команда разрешения обработки событий выполнилась в любом случае, например в случае ошибки (в данном примере — если в А2 введено нечисловое значение).

Visual Basic
1
2
3
4
5
6
7
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$2" Then Exit Sub
On Error Resume Next '2
Application.EnableEvents = False '1
[A1] = [A1] + [A2]
Application.EnableEvents = True '1
End Sub



1



16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

18.03.2015, 11:14

 [ТС]

7

спасибо разобрался хорошо описано вот тут

Кликните здесь для просмотра всего текста

Добавлено через 7 минут
И ещё вопрос, тоже самое для ячеек B1 и B2, просто дописываю их в цикле, или заново писать весь макрос?



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 11:28

8

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_Change(ByVal Target As Range)
'если изменено больше одной ячейки то выход, или писать другой подход.
If Target.Count > 1 Then Exit Sub
'если измененная ячейка не принадлежит диапазону "A2:B2" то выход
If Intersect(Range("A2:B2"), Target) Is Nothing Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
Cells(1, Target.Column) = Cells(1, Target.Column) + Target.Value
Application.EnableEvents = True
End Sub



1



16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

18.03.2015, 12:56

 [ТС]

9

Спасибо

Добавлено через 1 час 27 минут
Извините за наглость, а в данный макрос можно добавить тоже самое, но для А3 А4 и В3 В4? (или нужно создать новый макрос, изучаю не давно поэтому много вопросов)



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 13:12

10

Лучший ответ Сообщение было отмечено Glin как решение

Решение

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



0



Glin

16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

18.03.2015, 14:18

 [ТС]

11

Всё разобрался, реализовал может не по госту, но работает

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     If Not Intersect(Target, Range("D105:K105")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
          Target.Offset(-4, 0).Value = Target.Offset(-4, 0).Value + Target.Value
            Application.EnableEvents = True
        End If
    End If
    If Not Intersect(Target, Range("D106:K106")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
          Target.Offset(-4, 0).Value = Target.Offset(-4, 0).Value + Target.Value
            Application.EnableEvents = True
        End If
    End If



0



Vlad999

3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

18.03.2015, 14:24

12

Лучший ответ Сообщение было отмечено Glin как решение

Решение

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

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
     If Not Intersect(Target, Range("D105:K106")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
            Target.Offset(-4, 0).Value = Target.Offset(-4, 0).Value + Target.Value
            Application.EnableEvents = True
        End If
    End If
End sub



0



16 / 16 / 5

Регистрация: 26.05.2014

Сообщений: 122

18.03.2015, 17:52

 [ТС]

13

а у меня так не работало , копирую ваш код и работает, где-то ошибку делал



0



0 / 0 / 0

Регистрация: 26.02.2015

Сообщений: 26

18.03.2015, 21:55

14

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

Цитата
Сообщение от Vlad999
Посмотреть сообщение

Cells(1, Target.Column) = Cells(1, Target.Column) + Target.Value

Cells(cicle, Target.Column), например?



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,928

19.03.2015, 10:38

15

tragladit, Создавайте свою тему и озвучивайте свою конкретную проблему. А мы посмотрим, что можно сделать.

Добавлено через 22 минуты
tragladit, Тема с ссылками на книги по VBA



1



I have tried this code which works fine for a cell that only contain number:

Sub IncreaseCellValue()
    'Add 1 to the existing cell value
    Range("A1").Value = Range("A1") + 1
End Sub

How can I do something similar if the cell has text and a number. For example, I have «Apple 1» and I want to «increase» the cell text to «Apple 2» and next time I run the macro I want «Apple 3».

asked Sep 22, 2017 at 12:27

Wizhi's user avatar

Here’s another way you could solve this problem:

Sub IncreaseCellValue()
    Dim value As Variant

    'Add 1 to the existing cell value

    If IsNumeric(Range("A1").value) Then
       Range("A1").value = Range("A1") + 1
    Else
       value = Split(Range("A1").value, " ")
       Range("A1").value = value(0) & " " & (CInt(value(1)) + 1)
    End If
End Sub

It will cover the 2 cases you presented in your question but not every scenario you could throw at it.

answered Sep 22, 2017 at 12:56

Brian M Stafford's user avatar

Brian M StaffordBrian M Stafford

8,3182 gold badges19 silver badges25 bronze badges

1

Try using the following function

Sub IncreaseCellValue()
    'Add 1 to the existing cell value
    Range("A1").Value = Replace(Range("A1").Value2, CleanString(Range("A1")), vbNullString) & CInt(CleanString(Range("A1").Value2)) + 1
End Sub

Function CleanString(strIn As String) As String
    Dim objRegex
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
     .Global = True
     .Pattern = "[^d]+"
    CleanString = .Replace(strIn, vbNullString)
    End With
End Function

answered Sep 22, 2017 at 12:34

Tom's user avatar

TomTom

9,6873 gold badges31 silver badges48 bronze badges

please check:

Option Explicit


Sub IncreaseCellValue()
    'Add 1 to the existing cell value

    Dim rg As Range

    Set rg = Cells(Rows.Count, "A").End(xlUp)



  Range("A1" & ":" & rg.Address).AutoFill Destination:=Range("A1" & ":" & rg.Offset(1, 0).Address), Type:=xlFillDefault

End Sub

answered Sep 22, 2017 at 13:12

Nikolaos Polygenis's user avatar

Or you may try something like this…

Function GetNumber(ByVal rng As Range) As Long
Dim i As Long
For i = Len(rng.Value) To 1 Step -1
    If IsNumeric(Mid(rng.Value, i, 1)) Then
        GetNumber = GetNumber & Mid(rng.Value, i, 1)
    Else
        Exit For
    End If
Next i
End Function

Sub IncrementNumber()
Dim num As Long
num = GetNumber(Range("A1"))
Range("A1").Value = Replace(Range("A1").Value, num, num + 1)
End Sub

answered Sep 22, 2017 at 13:13

Subodh Tiwari sktneer's user avatar

Понравилась статья? Поделить с друзьями:
  • Excel макрос только для определенного листа
  • Excel макрос текущая ячейка
  • Excel макрос текущая строка
  • Excel макрос текущая дата в ячейку
  • Excel макрос текст по столбцам в excel