Всем привет, Только начал пробовать использовать VBA (не буду объяснять свои чуства, но прошу снисхождения...) Понимаю, что задача для большинства из вас крайне элементарна, но таки прошу помочь (подобного на форуме не нашел). [b]Необходимо, чтоб при изменении значения в одной ячейке (А2) менялось значение в другой ячейке (А1). Должно это работать постоянно, без необходимости запуска.
Всем привет, Только начал пробовать использовать VBA (не буду объяснять свои чуства, но прошу снисхождения...) Понимаю, что задача для большинства из вас крайне элементарна, но таки прошу помочь (подобного на форуме не нашел). [b]Необходимо, чтоб при изменении значения в одной ячейке (А2) менялось значение в другой ячейке (А1). Должно это работать постоянно, без необходимости запуска.DimaS
ну так, на коленке один из вариантов в модуль листа [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]
ну так, на коленке один из вариантов в модуль листа [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
Игорь, спасибо за ответ, Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER. Но моя задача оказалась сложнее...
Пример ниже и в прилагаемом файле: Ячейка С4 - вносим данные вручную; Ячейка С3 - считается по формуле (например просто С3=С4) Ячейка С2 - должна заполниться автоматически (VBA) - взять знаяение ячейки С3 (ну и это должно работать постоянно, без необходимости запуска).
Игорь, спасибо за ответ, Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER. Но моя задача оказалась сложнее...
Пример ниже и в прилагаемом файле: Ячейка С4 - вносим данные вручную; Ячейка С3 - считается по формуле (например просто С3=С4) Ячейка С2 - должна заполниться автоматически (VBA) - взять знаяение ячейки С3 (ну и это должно работать постоянно, без необходимости запуска).DimaS
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
Также спасибо, Kuzmich, Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER. Мне же необходимо, чтоб при ручном изменении значения в ячейке С4, по формуле рассчитались значение С3 и потом, при помощи VBA значение из С3 попало в С2. Добиться этого не получается. Очень прошу помочь!
Также спасибо, Kuzmich, Написанное выше, срабатывает только в случае изменения значения ячейки и нажатии клавиши ENTER. Мне же необходимо, чтоб при ручном изменении значения в ячейке С4, по формуле рассчитались значение С3 и потом, при помощи VBA значение из С3 попало в С2. Добиться этого не получается. Очень прошу помочь!DimaS
Ручное изменение ячейки С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
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA). Надеюсь это вообще возможно...
Легко [vba]
Код
Private Sub Worksheet_Calculate() [c2] = [c3] ' или [c4] End Sub
А необходимо, чтоб после изменения значения в ячейке С4 и нажатия только тут клавиши Enter, изменились значения в ячейках С3 (в соответствии с формулой) и автоматически в ячейке С2 (по процедуре VBA). Надеюсь это вообще возможно...
Легко [vba]
Код
Private Sub Worksheet_Calculate() [c2] = [c3] ' или [c4] End Sub
Всем большое спасибо за участие в решении задачи, надеюсь получится довести до конца ) Проверил - Автовычисление включено. но ..., к сожалению: 1. Вариант предложеyный Igor и Kuzmich - не до конца срабатывает. При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом. А вот если после этого зайти в С3 (ячейка с формулой) и просто нажать Enter, то С2 изменяется в соответствии с VBA алгоритмом. 2. Вариант предложенный RAN - срабатывает так, как необходимо, но только один раз, после чего получаю ошибку out of stack space К сожалению, не знаю почему ((
Всем большое спасибо за участие в решении задачи, надеюсь получится довести до конца ) Проверил - Автовычисление включено. но ..., к сожалению: 1. Вариант предложеyный Igor и Kuzmich - не до конца срабатывает. При внесении числа в С4 рассчитывается по формуле С3, но не изменяется С2 в соответствии с приведенным выше алгоритмом. А вот если после этого зайти в С3 (ячейка с формулой) и просто нажать Enter, то С2 изменяется в соответствии с VBA алгоритмом. 2. Вариант предложенный RAN - срабатывает так, как необходимо, но только один раз, после чего получаю ошибку out of stack space К сожалению, не знаю почему ((DimaS
Сообщение отредактировал DimaS - Пятница, 25.12.2020, 16:38
Да, 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) , то уже не срабатывает
Да, 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
Сообщение отредактировал DimaS - Пятница, 25.12.2020, 17:12
В том то и вопрос, Kuzmich, срабатывает (C2 = C3), но только при ручном изменении С3 с нажатием клавиши Enter. А если C3 является формулой (например С3=С4+1), то С3 изменяется при изменении С4, а С2 не меняется (хотя в соответствии с VBA кодом С2=С3).
В том то и вопрос, Kuzmich, срабатывает (C2 = C3), но только при ручном изменении С3 с нажатием клавиши Enter. А если C3 является формулой (например С3=С4+1), то С3 изменяется при изменении С4, а С2 не меняется (хотя в соответствии с VBA кодом С2=С3).DimaS
Сообщение отредактировал DimaS - Пятница, 25.12.2020, 17:32
Если 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
Если 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
Но в приложенном файле в ячейке С2 присутствует формула C2=C3 и код VBA в этом случае не нужен. Изначально не указал, что ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBA
Но в приложенном файле в ячейке С2 присутствует формула C2=C3 и код VBA в этом случае не нужен. Изначально не указал, что ячейка С2 должна быть изначально пуста (или не иметь формулы) и должна заполняться только благодаря процедуре VBADimaS
Сообщение отредактировал DimaS - Пятница, 25.12.2020, 19:17