Range в переводе с английского Диапазон Range("A1") - диапазон из одной ячейки Range("A1:A3") - диапазон из трех ячеек Range("A1:A3,D1:D5") - два диапазона по несколько ячеек В макросе Range используется для указания адреса ячейки с которой выполняются действия.
Range в переводе с английского Диапазон Range("A1") - диапазон из одной ячейки Range("A1:A3") - диапазон из трех ячеек Range("A1:A3,D1:D5") - два диапазона по несколько ячеек В макросе Range используется для указания адреса ячейки с которой выполняются действия.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
И еще один момент вдруг понял... Допустим у меня есть все те же три столбца - A,B,C. Если, например, мне известны А и B я их ввожу и C рассчитывается. Но если мне известны B и С, то происходит так: я ввожу B нажимаю Enter - все пересчиталось, потом ввожу C и рассчитывается B. Но мне в данном случае надо, чтобы А рассчиталось. Т.е. excel устроен таким образом, что вводиться одно значение и происходит перерасчет. А мне получается надо ввести 2 значения и только потом произвести перерасчет. Вот и возник вопрос - возможно ли такое организовать в Excel?
И еще один момент вдруг понял... Допустим у меня есть все те же три столбца - A,B,C. Если, например, мне известны А и B я их ввожу и C рассчитывается. Но если мне известны B и С, то происходит так: я ввожу B нажимаю Enter - все пересчиталось, потом ввожу C и рассчитывается B. Но мне в данном случае надо, чтобы А рассчиталось. Т.е. excel устроен таким образом, что вводиться одно значение и происходит перерасчет. А мне получается надо ввести 2 значения и только потом произвести перерасчет. Вот и возник вопрос - возможно ли такое организовать в Excel?kontrabasss
Private Sub Worksheet_Calculate() Application.EnableEvents = False Range("BF3") = Range("BF1") - Range("AR12") Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "BF1" Then Range("BF3") = Target.Value - Range("AR12") If Target.Address(0, 0) = "BF3" Then Range("BF1") = Target.Value + Range("AR12") If Target.Address(0, 0) = "AR12" Then Range("BF3") = Range("BF1") - Target.Value Application.EnableEvents = True End Sub
[/vba]
У меня сейчас все выглядит вот так:
[vba]
Код
Private Sub Worksheet_Calculate() Application.EnableEvents = False Range("BF3") = Range("BF1") - Range("AR12") Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address(0, 0) = "BF1" Then Range("BF3") = Target.Value - Range("AR12") If Target.Address(0, 0) = "BF3" Then Range("BF1") = Target.Value + Range("AR12") If Target.Address(0, 0) = "AR12" Then Range("BF3") = Range("BF1") - Target.Value Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [A:C]) Is Nothing And Target.Count = 1 Then Application.EnableEvents = False cl = Target.Column rw = Target.Row If cl <> 1 And Len(Cells(rw, 2).Value) And Len(Cells(rw, 3).Value) Then _ Cells(rw, 1).Value = Cells(rw, 2).Value + Cells(rw, 3).Value If cl <> 2 And Len(Cells(rw, 1).Value) And Len(Cells(rw, 3).Value) Then _ Cells(rw, 2).Value = Cells(rw, 1).Value - Cells(rw, 3).Value If cl <> 3 And Len(Cells(rw, 1).Value) And Len(Cells(rw, 2).Value) Then _ Cells(rw, 3).Value = Cells(rw, 1).Value - Cells(rw, 2).Value Application.EnableEvents = True End If End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, [A:C]) Is Nothing And Target.Count = 1 Then Application.EnableEvents = False cl = Target.Column rw = Target.Row If cl <> 1 And Len(Cells(rw, 2).Value) And Len(Cells(rw, 3).Value) Then _ Cells(rw, 1).Value = Cells(rw, 2).Value + Cells(rw, 3).Value If cl <> 2 And Len(Cells(rw, 1).Value) And Len(Cells(rw, 3).Value) Then _ Cells(rw, 2).Value = Cells(rw, 1).Value - Cells(rw, 3).Value If cl <> 3 And Len(Cells(rw, 1).Value) And Len(Cells(rw, 2).Value) Then _ Cells(rw, 3).Value = Cells(rw, 1).Value - Cells(rw, 2).Value Application.EnableEvents = True End If End Sub
Наверно, я как-то неправильно формулирую свою мысль, но по-моему не то... Есть 3 значения A,B,C. все 3 значения между собой взаимосвязаны. Т.е. А=B+C Изначально известны только 2 из них. Причем любые 2. Допустим известны B и C. Ввожу B, нажимаю Enter - A и C пересчитались. Ввожу C, нажимаю Enter - A пересчиталось. Все верно, все работает. Другой вариант - известны A и B. Ввожу A - все пересчиталось Ввожу B и... перерасчитывается A... а в этот раз нужно чтобы C, так как А и B известны... Bопрос в том как ввести сначала 2 значения, а потом Excel произвел перерасчет. Или дать понять excel-ю какой из двух оставшихся столбцов (или ячеек - не важно) перерасчитывать.
Наверно, я как-то неправильно формулирую свою мысль, но по-моему не то... Есть 3 значения A,B,C. все 3 значения между собой взаимосвязаны. Т.е. А=B+C Изначально известны только 2 из них. Причем любые 2. Допустим известны B и C. Ввожу B, нажимаю Enter - A и C пересчитались. Ввожу C, нажимаю Enter - A пересчиталось. Все верно, все работает. Другой вариант - известны A и B. Ввожу A - все пересчиталось Ввожу B и... перерасчитывается A... а в этот раз нужно чтобы C, так как А и B известны... Bопрос в том как ввести сначала 2 значения, а потом Excel произвел перерасчет. Или дать понять excel-ю какой из двух оставшихся столбцов (или ячеек - не важно) перерасчитывать.kontrabasss
Из трех значений вводим первое известное. Какое из двух оставшихся тоже известно? Допустим вводим А, указываем что В известно. Пересчитываем С Допустим вводим А, указываем что С известно. Пересчитываем В Если не указать, то непонятно что пересчитывать.
Из трех значений вводим первое известное. Какое из двух оставшихся тоже известно? Допустим вводим А, указываем что В известно. Пересчитываем С Допустим вводим А, указываем что С известно. Пересчитываем В Если не указать, то непонятно что пересчитывать.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Ловите. Код в модуле листа. Галкой указать параметр, который вычисляется. В строку 3 указанного столбца вписывается формула. [vba]
Код
Option Explicit
' переключение галки (отметка изменяемого параметра) Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Cells.Count > 1 Then Exit Sub If Not Application.Intersect(Range("A1:C1"), Target) Is Nothing Then Application.EnableEvents = False Cells(1, 1).Resize(1, 3).Value = "" Application.EnableEvents = True Cells(1, .Column).Value = "ь" End If End With End Sub
' подстановка формулы Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Application.Intersect(Range("A1:C1,A3:C3"), Target) Is Nothing Then Application.EnableEvents = False Cells(3, 1).Resize(1, 3).Value = Cells(3, 1).Resize(1, 3).Value
Select Case "ь" Case Cells(1, 1).Value Cells(3, 1).FormulaLocal = "=B3*TAN(РАДИАНЫ(C3))" Case Cells(1, 2).Value Cells(3, 2).FormulaLocal = "=A3/TAN(РАДИАНЫ(C3))" Case Cells(1, 3).Value Cells(3, 3).FormulaLocal = "=ATAN(A3/B3)*180/3,14" End Select
Application.EnableEvents = True End If End Sub
[/vba]
Ловите. Код в модуле листа. Галкой указать параметр, который вычисляется. В строку 3 указанного столбца вписывается формула. [vba]
Код
Option Explicit
' переключение галки (отметка изменяемого параметра) Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Cells.Count > 1 Then Exit Sub If Not Application.Intersect(Range("A1:C1"), Target) Is Nothing Then Application.EnableEvents = False Cells(1, 1).Resize(1, 3).Value = "" Application.EnableEvents = True Cells(1, .Column).Value = "ь" End If End With End Sub
' подстановка формулы Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Application.Intersect(Range("A1:C1,A3:C3"), Target) Is Nothing Then Application.EnableEvents = False Cells(3, 1).Resize(1, 3).Value = Cells(3, 1).Resize(1, 3).Value
Select Case "ь" Case Cells(1, 1).Value Cells(3, 1).FormulaLocal = "=B3*TAN(РАДИАНЫ(C3))" Case Cells(1, 2).Value Cells(3, 2).FormulaLocal = "=A3/TAN(РАДИАНЫ(C3))" Case Cells(1, 3).Value Cells(3, 3).FormulaLocal = "=ATAN(A3/B3)*180/3,14" End Select