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

Вход

Регистрация

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

 

= Мир MS Excel/Подстановка значения из одной ячейки в другую - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подстановка значения из одной ячейки в другую (Макросы/Sub)
Подстановка значения из одной ячейки в другую
DimaS Дата: Среда, 23.12.2020, 14:13 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Всем привет,
Только начал пробовать использовать VBA (не буду объяснять свои чуства, но прошу снисхождения...)
Понимаю, что задача для большинства из вас крайне элементарна, но таки прошу помочь (подобного на форуме не нашел).
[b]Необходимо, чтоб при изменении значения в одной ячейке (А2) менялось значение в другой ячейке (А1).
Должно это работать постоянно, без необходимости запуска.
К сообщению приложен файл: Test.xlsm (9.5 Kb)
 
Ответить
СообщениеВсем привет,
Только начал пробовать использовать VBA (не буду объяснять свои чуства, но прошу снисхождения...)
Понимаю, что задача для большинства из вас крайне элементарна, но таки прошу помочь (подобного на форуме не нашел).
[b]Необходимо, чтоб при изменении значения в одной ячейке (А2) менялось значение в другой ячейке (А1).
Должно это работать постоянно, без необходимости запуска.

Автор - DimaS
Дата добавления - 23.12.2020 в 14:13
китин Дата: Среда, 23.12.2020, 14:35 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7015
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
ну так, на коленке один из вариантов
в модуль листа
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    tt_ = Target.Value
        If Target <> "" Then Target.Offset(-1, 0) = Target.Value + 1
        End If
End Sub
[/vba]


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
Сообщениену так, на коленке один из вариантов
в модуль листа
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A2")) Is Nothing Then
    tt_ = Target.Value
        If Target <> "" Then Target.Offset(-1, 0) = Target.Value + 1
        End If
End Sub
[/vba]

Автор - китин
Дата добавления - 23.12.2020 в 14:35
DimaS Дата: Среда, 23.12.2020, 16:12 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

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

Пример ниже и в прилагаемом файле:
Ячейка С4 - вносим данные вручную;
Ячейка С3 - считается по формуле (например просто С3=С4)
Ячейка С2 - должна заполниться автоматически (VBA) - взять знаяение ячейки С3 (ну и это должно работать постоянно, без необходимости запуска).
К сообщению приложен файл: 8682682.xlsm (13.2 Kb)


Сообщение отредактировал DimaS - Среда, 23.12.2020, 16:22
 
Ответить
СообщениеИгорь, спасибо за ответ,
Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER.
Но моя задача оказалась сложнее...

Пример ниже и в прилагаемом файле:
Ячейка С4 - вносим данные вручную;
Ячейка С3 - считается по формуле (например просто С3=С4)
Ячейка С2 - должна заполниться автоматически (VBA) - взять знаяение ячейки С3 (ну и это должно работать постоянно, без необходимости запуска).

Автор - DimaS
Дата добавления - 23.12.2020 в 16:12
Kuzmich Дата: Среда, 23.12.2020, 20:23 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
Но моя задача оказалась сложнее...

Ячейка С4 - вносим данные вручную
[[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C4")) Is Nothing Then
    tt_ = Target.Value
        If Target <> "" Then Target.Offset(-2, 0) = Target.Value + 0
        End If
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
Но моя задача оказалась сложнее...

Ячейка С4 - вносим данные вручную
[[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C4")) Is Nothing Then
    tt_ = Target.Value
        If Target <> "" Then Target.Offset(-2, 0) = Target.Value + 0
        End If
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 23.12.2020 в 20:23
DimaS Дата: Четверг, 24.12.2020, 08:42 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Также спасибо, Kuzmich,
Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER.
Мне же необходимо, чтоб при ручном изменении значения в ячейке С4, по формуле рассчитались значение С3 и потом, при помощи VBA значение из С3 попало в С2.
Добиться этого не получается.
Очень прошу помочь!
 
Ответить
СообщениеТакже спасибо, Kuzmich,
Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER.
Мне же необходимо, чтоб при ручном изменении значения в ячейке С4, по формуле рассчитались значение С3 и потом, при помощи VBA значение из С3 попало в С2.
Добиться этого не получается.
Очень прошу помочь!

Автор - DimaS
Дата добавления - 24.12.2020 в 08:42
Pelena Дата: Четверг, 24.12.2020, 09:25 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
DimaS, поясните тогда, что Вы понимаете под "ручным изменением", если не нажатие Enter?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеDimaS, поясните тогда, что Вы понимаете под "ручным изменением", если не нажатие Enter?

Автор - Pelena
Дата добавления - 24.12.2020 в 09:25
DimaS Дата: Четверг, 24.12.2020, 16:39 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Ручное изменение ячейки С4 с нажатием Enter.
После чего в соответствии с формулой, изменяется значение в ячейке С3.
А вот значение в ячейке С2 (для которой записан указанный выше код VBA, не меняется.
Точнее измениться, если войду в ячейку С3 с формулой и нажму Enter.
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA).
Надеюсь это вообще возможно...
 
Ответить
СообщениеРучное изменение ячейки С4 с нажатием Enter.
После чего в соответствии с формулой, изменяется значение в ячейке С3.
А вот значение в ячейке С2 (для которой записан указанный выше код VBA, не меняется.
Точнее измениться, если войду в ячейку С3 с формулой и нажму Enter.
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA).
Надеюсь это вообще возможно...

Автор - DimaS
Дата добавления - 24.12.2020 в 16:39
RAN Дата: Четверг, 24.12.2020, 18:11 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA).
Надеюсь это вообще возможно...

Легко
[vba]
Код
Private Sub Worksheet_Calculate()
[c2] = [c3] ' или [c4]
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA).
Надеюсь это вообще возможно...

Легко
[vba]
Код
Private Sub Worksheet_Calculate()
[c2] = [c3] ' или [c4]
End Sub
[/vba]

Автор - RAN
Дата добавления - 24.12.2020 в 18:11
Kuzmich Дата: Четверг, 24.12.2020, 19:59 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter......

А в макросе, что я привел в сообщении #4, разве не так?
 
Ответить
Сообщение
Цитата
чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter......

А в макросе, что я привел в сообщении #4, разве не так?

Автор - Kuzmich
Дата добавления - 24.12.2020 в 19:59
Pelena Дата: Четверг, 24.12.2020, 22:42 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
DimaS, подозреваю, что у Вас отключены автовычисления


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеDimaS, подозреваю, что у Вас отключены автовычисления

Автор - Pelena
Дата добавления - 24.12.2020 в 22:42
DimaS Дата: Пятница, 25.12.2020, 16:27 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Всем большое спасибо за участие в решении задачи, надеюсь получится довести до конца )
Проверил - Автовычисление включено.
но ..., к сожалению:
1. Вариант предложеyный Igor и Kuzmich - не до конца срабатывает.
При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом. А вот если после этого зайти в С3 (ячейка с формулой) и просто нажать Enter, то С2 изменяется в соответствии с VBA алгоритмом.
2. Вариант предложенный RAN - срабатывает так, как необходимо, но только один раз, после чего получаю ошибку out of stack space
К сожалению, не знаю почему ((


Сообщение отредактировал DimaS - Пятница, 25.12.2020, 16:38
 
Ответить
СообщениеВсем большое спасибо за участие в решении задачи, надеюсь получится довести до конца )
Проверил - Автовычисление включено.
но ..., к сожалению:
1. Вариант предложеyный Igor и Kuzmich - не до конца срабатывает.
При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом. А вот если после этого зайти в С3 (ячейка с формулой) и просто нажать Enter, то С2 изменяется в соответствии с VBA алгоритмом.
2. Вариант предложенный RAN - срабатывает так, как необходимо, но только один раз, после чего получаю ошибку out of stack space
К сожалению, не знаю почему ((

Автор - DimaS
Дата добавления - 25.12.2020 в 16:27
Kuzmich Дата: Пятница, 25.12.2020, 16:55 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом

Не верю.
В макросе, что я привел в сообщении #4, изменяется С2.
Вы только макрос вставьте в модуль листа вместо своего
 
Ответить
Сообщение
Цитата
При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом

Не верю.
В макросе, что я привел в сообщении #4, изменяется С2.
Вы только макрос вставьте в модуль листа вместо своего

Автор - Kuzmich
Дата добавления - 25.12.2020 в 16:55
DimaS Дата: Пятница, 25.12.2020, 17:10 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Да, Kuzmich, работает, но берет информацию с С4 и ставит в С2, без участия С3.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C4")) Is Nothing Then
tt_ = Target.Value
If Target <> "" Then Target.Offset(-2, 0) = Target.Value + 0
End If
End Sub
[/vba]
Если в алгоритме меняю С4 на С3 и Target.Offset на (-1, 0) , то уже не срабатывает


Сообщение отредактировал DimaS - Пятница, 25.12.2020, 17:12
 
Ответить
СообщениеДа, Kuzmich, работает, но берет информацию с С4 и ставит в С2, без участия С3.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C4")) Is Nothing Then
tt_ = Target.Value
If Target <> "" Then Target.Offset(-2, 0) = Target.Value + 0
End If
End Sub
[/vba]
Если в алгоритме меняю С4 на С3 и Target.Offset на (-1, 0) , то уже не срабатывает

Автор - DimaS
Дата добавления - 25.12.2020 в 17:10
Kuzmich Дата: Пятница, 25.12.2020, 17:21 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
Если в алгоритме меняю С4 на С3 и Target.Offset на (-1, 0) , то уже не срабатывает

Тогда будет срабатывать на изменение ячейки С3
 
Ответить
Сообщение
Цитата
Если в алгоритме меняю С4 на С3 и Target.Offset на (-1, 0) , то уже не срабатывает

Тогда будет срабатывать на изменение ячейки С3

Автор - Kuzmich
Дата добавления - 25.12.2020 в 17:21
DimaS Дата: Пятница, 25.12.2020, 17:30 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

В том то и вопрос, Kuzmich, срабатывает (C2 = C3), но только при ручном изменении С3 с нажатием клавиши Enter.
А если C3 является формулой (например С3=С4+1), то С3 изменяется при изменении С4, а С2 не меняется (хотя в соответствии с VBA кодом С2=С3).


Сообщение отредактировал DimaS - Пятница, 25.12.2020, 17:32
 
Ответить
СообщениеВ том то и вопрос, Kuzmich, срабатывает (C2 = C3), но только при ручном изменении С3 с нажатием клавиши Enter.
А если C3 является формулой (например С3=С4+1), то С3 изменяется при изменении С4, а С2 не меняется (хотя в соответствии с VBA кодом С2=С3).

Автор - DimaS
Дата добавления - 25.12.2020 в 17:30
Kuzmich Дата: Пятница, 25.12.2020, 17:47 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Если C2 = C3 и С3=С4+1, то при изменении ячейки С4 будет меняться и С3 и С2
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C4")) Is Nothing Then
    End If
End Sub
[/vba]
 
Ответить
СообщениеЕсли C2 = C3 и С3=С4+1, то при изменении ячейки С4 будет меняться и С3 и С2
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("C4")) Is Nothing Then
    End If
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 25.12.2020 в 17:47
DimaS Дата: Пятница, 25.12.2020, 18:14 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Если C2 = C3 и С3=С4+1, то при изменении ячейки С4 будет меняться и С3 и С2

Условие и ожидаемый результат сформулированы идеально.
Но С2 меняется только тогда, когда захожу в С3 и нажимаю Enter, а при изменении С4 меняется только С3 (потом если зайду в С3 и нажму Enter, то изменится C2)
 
Ответить
Сообщение
Если C2 = C3 и С3=С4+1, то при изменении ячейки С4 будет меняться и С3 и С2

Условие и ожидаемый результат сформулированы идеально.
Но С2 меняется только тогда, когда захожу в С3 и нажимаю Enter, а при изменении С4 меняется только С3 (потом если зайду в С3 и нажму Enter, то изменится C2)

Автор - DimaS
Дата добавления - 25.12.2020 в 18:14
Kuzmich Дата: Пятница, 25.12.2020, 18:22 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Меняйте С4 и смотрите на С2
К сообщению приложен файл: Test_10-46565-1.xls (37.0 Kb)
 
Ответить
СообщениеМеняйте С4 и смотрите на С2

Автор - Kuzmich
Дата добавления - 25.12.2020 в 18:22
DimaS Дата: Пятница, 25.12.2020, 19:16 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Но в приложенном файле в ячейке С2 присутствует формула C2=C3 и код VBA в этом случае не нужен.
Изначально не указал, что ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBA


Сообщение отредактировал DimaS - Пятница, 25.12.2020, 19:17
 
Ответить
СообщениеНо в приложенном файле в ячейке С2 присутствует формула C2=C3 и код VBA в этом случае не нужен.
Изначально не указал, что ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBA

Автор - DimaS
Дата добавления - 25.12.2020 в 19:16
Kuzmich Дата: Пятница, 25.12.2020, 19:37 | Сообщение № 20
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBA
Цитата

Не могу понять, что вы хотите?
Макрос из сообщения #4 как раз это и делает при изменении значения в С4
 
Ответить
Сообщение
Цитата
ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBA
Цитата

Не могу понять, что вы хотите?
Макрос из сообщения #4 как раз это и делает при изменении значения в С4

Автор - Kuzmich
Дата добавления - 25.12.2020 в 19:37
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подстановка значения из одной ячейки в другую (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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