Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для вычисления значения в заданной ячейке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для вычисления значения в заданной ячейке (Макросы/Sub)
Макрос для вычисления значения в заданной ячейке
javzier987 Дата: Среда, 11.08.2021, 18:06 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

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

Какие исходные данные:

-Статичное число - указывается мной вручную. Для примера возьмём ячейку E5.
-Множитель, на который умножаем статичное число - указывается мной вручную. Для примера возьмём ячейку C9.
-Текущий результат - при активации макроса вычисляется числовое значение. Для примера возьмём ячейку E9.
-Предыдущий результат - при активации макроса сюда переносится предыдущее значение ячейки E9. Для примера возьмём ячейку D9.

Мне, нужно:

1) чтобы при активации макроса вычисления происходили в выделенной ячейке и к текущему результату ячейки прибавлялся (а не заменялся) результат вычислений (например, в момент активации макроса выделена ячейка E9. К числу, которое в ячейке E9, прибавляется 5000. При повторной активации макроса - ещё прибавляется 5000. В ячейку E9 должно скопироваться число, а не формула);

2) чтобы в ячейку со смещением на 1 столбец влево от выделенной ячейки вносилось предыдущее значение, которое было в выделенной ячейке до активации макроса (например, в момент активации макроса выделена ячейка E9. В ячейку D9 копируется результат, который был в ячейке E9 до активации макроса);

3) чтобы определенные параметры макроса были динамическими - чтобы значения в формуле менялись относительно выделенной ячейки (например, если выделена ячейка E9, то вычисления осуществляются по формуле "=D9+$E$5*C9". Если выделена ячейка E10 - по формуле "=D10+$E$5*C10". Если выделена ячейка E11 - по формуле "=D11+$E$5*C11". Т.е. положение ячейки "Множитель, на который умножаем статичное число" и "Предыдущий результат" меняется относительно выделенной ячейки, а "Статичное число" - нет).

С первым пунктом я справился, а со вторым и третьим - нет.

Пока что макрос выглядит следующим образом:

[vba]
Код
Sub Kucherov()
  With Range("E9")
    .Formula = "=D9+E5*C9"
    .Value = .Value
  End With
  Range("E9").Select
    Selection.Copy
    Range("D9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
[/vba]

Помогите пожалуйста с макросом. Какой макрос должен получиться в итоге?
К сообщению приложен файл: 3166625.xlsm (16.8 Kb)
 
Ответить
СообщениеДобрый день.
Я пытаюсь создать макрос. Суть: выбираешь ячейку, активируешь макрос, получаешь вычисление в выделенной ячейке.

Какие исходные данные:

-Статичное число - указывается мной вручную. Для примера возьмём ячейку E5.
-Множитель, на который умножаем статичное число - указывается мной вручную. Для примера возьмём ячейку C9.
-Текущий результат - при активации макроса вычисляется числовое значение. Для примера возьмём ячейку E9.
-Предыдущий результат - при активации макроса сюда переносится предыдущее значение ячейки E9. Для примера возьмём ячейку D9.

Мне, нужно:

1) чтобы при активации макроса вычисления происходили в выделенной ячейке и к текущему результату ячейки прибавлялся (а не заменялся) результат вычислений (например, в момент активации макроса выделена ячейка E9. К числу, которое в ячейке E9, прибавляется 5000. При повторной активации макроса - ещё прибавляется 5000. В ячейку E9 должно скопироваться число, а не формула);

2) чтобы в ячейку со смещением на 1 столбец влево от выделенной ячейки вносилось предыдущее значение, которое было в выделенной ячейке до активации макроса (например, в момент активации макроса выделена ячейка E9. В ячейку D9 копируется результат, который был в ячейке E9 до активации макроса);

3) чтобы определенные параметры макроса были динамическими - чтобы значения в формуле менялись относительно выделенной ячейки (например, если выделена ячейка E9, то вычисления осуществляются по формуле "=D9+$E$5*C9". Если выделена ячейка E10 - по формуле "=D10+$E$5*C10". Если выделена ячейка E11 - по формуле "=D11+$E$5*C11". Т.е. положение ячейки "Множитель, на который умножаем статичное число" и "Предыдущий результат" меняется относительно выделенной ячейки, а "Статичное число" - нет).

С первым пунктом я справился, а со вторым и третьим - нет.

Пока что макрос выглядит следующим образом:

[vba]
Код
Sub Kucherov()
  With Range("E9")
    .Formula = "=D9+E5*C9"
    .Value = .Value
  End With
  Range("E9").Select
    Selection.Copy
    Range("D9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
[/vba]

Помогите пожалуйста с макросом. Какой макрос должен получиться в итоге?

Автор - javzier987
Дата добавления - 11.08.2021 в 18:06
bmv98rus Дата: Среда, 11.08.2021, 18:32 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
[vba]
Код
Sub Kucherov()
For Each cell In Intersect(Selection, Range("E9:E13"))
With cell
.Offset(, -1) = .Value
.Value = .Offset(, -1) + .Offset(, -2) + Range("e5")
End With
Next
End Sub
[/vba]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение[vba]
Код
Sub Kucherov()
For Each cell In Intersect(Selection, Range("E9:E13"))
With cell
.Offset(, -1) = .Value
.Value = .Offset(, -1) + .Offset(, -2) + Range("e5")
End With
Next
End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 11.08.2021 в 18:32
javzier987 Дата: Среда, 11.08.2021, 18:55 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

bmv98rus, при такой формуле получается действие: D9+E5+C9.
А нужно, чтобы было: D9+E5*C9
К сообщению приложен файл: 0670142.png (26.8 Kb)
 
Ответить
Сообщениеbmv98rus, при такой формуле получается действие: D9+E5+C9.
А нужно, чтобы было: D9+E5*C9

Автор - javzier987
Дата добавления - 11.08.2021 в 18:55
bmv98rus Дата: Среда, 11.08.2021, 19:08 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
А нужно, чтобы было: D9+E5*C9
по слепоте не заметил звезду
ну переставить и/или изменить то могли и сами.
[vba]
Код
.Value = .Offset(, -1) + .Offset(, -2) * Range("e5")
[/vba]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
А нужно, чтобы было: D9+E5*C9
по слепоте не заметил звезду
ну переставить и/или изменить то могли и сами.
[vba]
Код
.Value = .Offset(, -1) + .Offset(, -2) * Range("e5")
[/vba]

Автор - bmv98rus
Дата добавления - 11.08.2021 в 19:08
javzier987 Дата: Среда, 11.08.2021, 19:12 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

bmv98rus, да, теперь всё работает. Спасибо большое!
 
Ответить
Сообщениеbmv98rus, да, теперь всё работает. Спасибо большое!

Автор - javzier987
Дата добавления - 11.08.2021 в 19:12
bmv98rus Дата: Четверг, 12.08.2021, 09:23 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
дополню. я немного напортачил. Если ни одна из ячеек нужного диапазона не выделена, то скрипт даст ошибку, два варианта или всеж опору делать на активную ячейку
[vba]
Код
Sub Kucherov()
    if Intersect(Activecell, Range("E9:E13")) is nothing then exit sub   
    With activecell
        .Offset(, -1) = .Value
        .Value = .Offset(, -1) + .Offset(, -2) * Range("e5")
    End With
End Sub
[/vba]

или обрабатывать все выделенные, но предварительно проверить
[vba]
Код
Sub Kucherov()
    If Intersect(Selection, Range("E9:E13")) Is Nothing Then  Exit Sub
    For Each cell In Intersect(Selection, Range("E9:E13"))
        With cell
            .Offset(, -1) = .Value
            .Value = .Offset(, -1) + .Offset(, -2) + Range("e5")
        End With
    Next
End Sub
[/vba]


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениедополню. я немного напортачил. Если ни одна из ячеек нужного диапазона не выделена, то скрипт даст ошибку, два варианта или всеж опору делать на активную ячейку
[vba]
Код
Sub Kucherov()
    if Intersect(Activecell, Range("E9:E13")) is nothing then exit sub   
    With activecell
        .Offset(, -1) = .Value
        .Value = .Offset(, -1) + .Offset(, -2) * Range("e5")
    End With
End Sub
[/vba]

или обрабатывать все выделенные, но предварительно проверить
[vba]
Код
Sub Kucherov()
    If Intersect(Selection, Range("E9:E13")) Is Nothing Then  Exit Sub
    For Each cell In Intersect(Selection, Range("E9:E13"))
        With cell
            .Offset(, -1) = .Value
            .Value = .Offset(, -1) + .Offset(, -2) + Range("e5")
        End With
    Next
End Sub
[/vba]

Автор - bmv98rus
Дата добавления - 12.08.2021 в 09:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для вычисления значения в заданной ячейке (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!