Здравствуйте. Очень нужна помощь. Есть 3 ячейки с формулами и значение каждой зависит от 2-х других. Если вводим значение в A1, то В1=А1*20 и С1=В1*10 (это условно). Нужен макрос, который в зависимости от того в какую ячейку из трех вносятся данные в двух других прописывал бы формулы.
Здравствуйте. Очень нужна помощь. Есть 3 ячейки с формулами и значение каждой зависит от 2-х других. Если вводим значение в A1, то В1=А1*20 и С1=В1*10 (это условно). Нужен макрос, который в зависимости от того в какую ячейку из трех вносятся данные в двух других прописывал бы формулы.Marisa
Здравствуйте. Вставьте это в модуль листа. Это вставляет формулы. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Range("B1").FormulaR1C1 = "=RC[-1]*20" Range("C1").FormulaR1C1 = "=RC[-1]*10" End If End Sub
[/vba] Это считает без формул [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Target(1, 2) = Target * 20 Target(1, 3) = Target * 200 End If End Sub
[/vba]
Здравствуйте. Вставьте это в модуль листа. Это вставляет формулы. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Range("B1").FormulaR1C1 = "=RC[-1]*20" Range("C1").FormulaR1C1 = "=RC[-1]*10" End If End Sub
[/vba] Это считает без формул [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("A1").Address Then Target(1, 2) = Target * 20 Target(1, 3) = Target * 200 End If End Sub
Спасибо за отклик! Я наверно слишком упростила условия (думала дальше сама допилю), но не получается. Хотелось бы чтобы то что я дописала работало. Помогите, пожалуйста. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("B2").Address Then Target(1, 3) = [B2] * 20 Target(1, 5) = [B2] * 30 End If If Target.Address = Range("D2").Address Then Target(1, 3) = [D2] * 20 Target(1, -1) = [D2] * 30 End If If Target.Address = Range("F2").Address Then Target(1, -3) = [F2] * 20 Target(1, -5) = [F2] * 30 End If End Sub
[/vba]
Спасибо за отклик! Я наверно слишком упростила условия (думала дальше сама допилю), но не получается. Хотелось бы чтобы то что я дописала работало. Помогите, пожалуйста. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("B2").Address Then Target(1, 3) = [B2] * 20 Target(1, 5) = [B2] * 30 End If If Target.Address = Range("D2").Address Then Target(1, 3) = [D2] * 20 Target(1, -1) = [D2] * 30 End If If Target.Address = Range("F2").Address Then Target(1, -3) = [F2] * 20 Target(1, -5) = [F2] * 30 End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim i&, j& If Target.Count > 1 Then Exit Sub If Target.Address(0, 0) = "B2" Then i = 4 j = 6 ElseIf Target.Address(0, 0) = "D2" Then i = 2 j = 6 ElseIf Target.Address(0, 0) = "F2" Then i = 2 j = 4 Else Exit Sub End If Application.EnableEvents = False Cells(2, i).Formula = "=" & Target.Address(0, 0) & "*20" Cells(2, j).Formula = "=" & Target.Address(0, 0) & "*30" Application.EnableEvents = True End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim i&, j& If Target.Count > 1 Then Exit Sub If Target.Address(0, 0) = "B2" Then i = 4 j = 6 ElseIf Target.Address(0, 0) = "D2" Then i = 2 j = 6 ElseIf Target.Address(0, 0) = "F2" Then i = 2 j = 4 Else Exit Sub End If Application.EnableEvents = False Cells(2, i).Formula = "=" & Target.Address(0, 0) & "*20" Cells(2, j).Formula = "=" & Target.Address(0, 0) & "*30" Application.EnableEvents = True End Sub
Всем спасибо за помощь! Все получилось! Надеюсь что и я когда-нибудь буду отвечать на этом форуме, а не спрашивать (я этого очень хочу) Всем удачи!
Всем спасибо за помощь! Все получилось! Надеюсь что и я когда-нибудь буду отвечать на этом форуме, а не спрашивать (я этого очень хочу) Всем удачи!Marisa
Pelena, скажите пожалуйста, вы создали этот файл в Mac Excel 15.14? Не может ли быть причина в том какой именно Excel установлен на компьютере с Mac OC?
Pelena, скажите пожалуйста, вы создали этот файл в Mac Excel 15.14? Не может ли быть причина в том какой именно Excel установлен на компьютере с Mac OC?Marisa
Pelena, Я никогда не работала на Mac, помогла человеку, написала пару макросов, один простой: стереть, копировать - работает, а этот, как он говорит, не работает, хотя на Windows он работает. Хотелось бы выяснить, если есть у кого-то на Mac ОС Excel 15.14, проверьте, пожалуйста.
Pelena, Я никогда не работала на Mac, помогла человеку, написала пару макросов, один простой: стереть, копировать - работает, а этот, как он говорит, не работает, хотя на Windows он работает. Хотелось бы выяснить, если есть у кого-то на Mac ОС Excel 15.14, проверьте, пожалуйста.Marisa
Marisa, на будущее (видел я Ваш файл ) ActiveSheet- в модуле листа писать не обязательно. При этом убрать точки перед ссылками.
Чтобы код не реагировал на все ячейки, добавить проверяемый диапазон. Вернее, код срабатывает, но не отключает события и не доходит до Select Case , если это не нужно. Проверять можно не адрес, а столбец [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("B2,D2,F2,K6,N6"), Target) Is Nothing Then Application.EnableEvents = False
Select Case Target.Column Case 2, 11 ........................ Case 4 ........................ Case 6 ........................ Case 14 ........................ End Select
Application.EnableEvents = True End If End Sub
[/vba]
Макрос - мало, нужно было добавить проверку данных в ячейках или обойти ошибки в макросе. Например, вписали в ячейку B2 букву вместо числа. Код начинает работать, отключает события листа: Application.EnableEvents = False После этого - ошибка при математической операции с текстом. Имеем открытый Excel с отключенными событиями. Для продолжения работы - закрыть и открыть. Маленькая "свинья" пользователю.
Marisa, на будущее (видел я Ваш файл ) ActiveSheet- в модуле листа писать не обязательно. При этом убрать точки перед ссылками.
Чтобы код не реагировал на все ячейки, добавить проверяемый диапазон. Вернее, код срабатывает, но не отключает события и не доходит до Select Case , если это не нужно. Проверять можно не адрес, а столбец [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("B2,D2,F2,K6,N6"), Target) Is Nothing Then Application.EnableEvents = False
Select Case Target.Column Case 2, 11 ........................ Case 4 ........................ Case 6 ........................ Case 14 ........................ End Select
Application.EnableEvents = True End If End Sub
[/vba]
Макрос - мало, нужно было добавить проверку данных в ячейках или обойти ошибки в макросе. Например, вписали в ячейку B2 букву вместо числа. Код начинает работать, отключает события листа: Application.EnableEvents = False После этого - ошибка при математической операции с текстом. Имеем открытый Excel с отключенными событиями. Для продолжения работы - закрыть и открыть. Маленькая "свинья" пользователю.vikttur
Сообщение отредактировал vikttur - Воскресенье, 24.01.2016, 18:31