Добрый вечер. Всех с Новым годом!!! Подскажите пожалуйста как реализовать следующую задачу. Суть вопроса: Есть ячейка 1, в нее пользователь вносит данные. Но, если в другой ячейке 2 выбрано определенное условие, то в первой выводится строго определенное значение. Надеюсь в прикрепленном файле все понятно объяснил.
Добрый вечер. Всех с Новым годом!!! Подскажите пожалуйста как реализовать следующую задачу. Суть вопроса: Есть ячейка 1, в нее пользователь вносит данные. Но, если в другой ячейке 2 выбрано определенное условие, то в первой выводится строго определенное значение. Надеюсь в прикрепленном файле все понятно объяснил.Андреич
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("g11")) Is Nothing Then If [g11] = "ДА" Then [i11] = 0 End If End Sub
[/vba]
Так надо?[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("g11")) Is Nothing Then If [g11] = "ДА" Then [i11] = 0 End If End Sub
Спасибо! Я так понимаю, это макрос? Никогда с ними не связывался. Может ли он отрицательно сказаться (утяжелить и затормозить) на всей таблице? Таблица, заполняется в течении года, состоит из 500 строк и в каждой строке содержится несколько ячеек к которым нужно применить данный макрос.
Спасибо! Я так понимаю, это макрос? Никогда с ними не связывался. Может ли он отрицательно сказаться (утяжелить и затормозить) на всей таблице? Таблица, заполняется в течении года, состоит из 500 строк и в каждой строке содержится несколько ячеек к которым нужно применить данный макрос.Андреич
в каждой строке содержится несколько ячеек к которым нужно
надо подход менять. но наверное сначала тему перенести в vba (если хотите с макросами) попросите модератов - пусть перенесут. [moder]Не надо ничего переносить, можно здесь отвечать[/moder] и более приближенный к реальности файл не помешал бы.
в каждой строке содержится несколько ячеек к которым нужно
надо подход менять. но наверное сначала тему перенести в vba (если хотите с макросами) попросите модератов - пусть перенесут. [moder]Не надо ничего переносить, можно здесь отвечать[/moder] и более приближенный к реальности файл не помешал бы.
Вот файл. Суть таблицы такова: Наступило событие (пожар) и пользователь заполняет необходимые данные. Если в ячейке I6 выбрано значение "ДА" то в ячейках М6:Р6 должно автоматом прописаться значение 0 (ноль). Если в ячейке J6 выбрано значение "ДА" то только в ячейке М6 должен стоять 0. И так нужно предусмотреть для всего количества строк в таблице.
Вот файл. Суть таблицы такова: Наступило событие (пожар) и пользователь заполняет необходимые данные. Если в ячейке I6 выбрано значение "ДА" то в ячейках М6:Р6 должно автоматом прописаться значение 0 (ноль). Если в ячейке J6 выбрано значение "ДА" то только в ячейке М6 должен стоять 0. И так нужно предусмотреть для всего количества строк в таблице.Андреич
Андреич, в примере все именованные диапазоны не рабочие - это так, замечание. Если в ячейке I6 и J6 выбрано значение "ДА", то что? Если в ячейке J6 выбрано значение "ДА", то только в ячейке М6 должен стоять 0, а в остальных (N6:P6) что должно быть?
Андреич, в примере все именованные диапазоны не рабочие - это так, замечание. Если в ячейке I6 и J6 выбрано значение "ДА", то что? Если в ячейке J6 выбрано значение "ДА", то только в ячейке М6 должен стоять 0, а в остальных (N6:P6) что должно быть?JayBhagavan
Языком ты или построишь жизнь,или разрушишь ее до основания.Думайте что говорите.(с)А.Хакимов
Там все работает, просто для уменьшения веса файла пришлось поудалять все. Поправил маленько. Одновременно в I6 и J6 значение ДА не может быть выбрано (либо/либо). Если J6 = "ДА" то N6:P6 доступны для внесения данных.
Там все работает, просто для уменьшения веса файла пришлось поудалять все. Поправил маленько. Одновременно в I6 и J6 значение ДА не может быть выбрано (либо/либо). Если J6 = "ДА" то N6:P6 доступны для внесения данных.Андреич
Тестируйте. (всё что за пределами таблицы очистил для уменьшения размера файла)[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim range_population As Range, range_minions As Range, range_num As Range, range_num_population As Range, range_num_minions As Range, str_yes$, row_start! row_start! = 6 Set range_population = Range("I" & row_start! & ":I" & [A:A].Rows.Count) Set range_minions = Range("J" & row_start! & ":J" & [A:A].Rows.Count) Set range_num = Range("M" & row_start! & ":P" & [A:A].Rows.Count) Set range_num_population = range_num Set range_num_minions = Range("M" & row_start! & ":M" & [A:A].Rows.Count) str_yes$ = "ДА" If ((Not Intersect(Target, range_population) Is Nothing) Or _ (Not Intersect(Target, range_minions) Is Nothing) Or _ (Not Intersect(Target, range_num) Is Nothing)) And _ Target.Count = 1 Then With Application: .EnableEvents = False: .ScreenUpdating = False: End With If (Not Intersect(Target, range_population) Is Nothing) And (UCase(Target.Value) = str_yes$) Then range_minions.Resize(1).Offset(Target.Row - row_start!).Value = Empty range_num_population.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf (Not Intersect(Target, range_minions) Is Nothing) And (UCase(Target.Value) = str_yes$) Then range_population.Resize(1).Offset(Target.Row - row_start!).Value = Empty range_num_minions.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf Not Intersect(Target, range_num) Is Nothing Then If (UCase(range_population.Resize(1).Offset(Target.Row - row_start!).Value) = str_yes$) Then range_num_population.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf (UCase(range_minions.Resize(1).Offset(Target.Row - row_start!).Value) = str_yes$) Then range_num_minions.Resize(1).Offset(Target.Row - row_start!).Value = 0 End If End If Application.EnableEvents = True End If Set range_population = Nothing Set range_minions = Nothing Set range_num = Nothing Set range_num_population = Nothing Set range_num_minions = Nothing End Sub
[/vba]
Тестируйте. (всё что за пределами таблицы очистил для уменьшения размера файла)[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim range_population As Range, range_minions As Range, range_num As Range, range_num_population As Range, range_num_minions As Range, str_yes$, row_start! row_start! = 6 Set range_population = Range("I" & row_start! & ":I" & [A:A].Rows.Count) Set range_minions = Range("J" & row_start! & ":J" & [A:A].Rows.Count) Set range_num = Range("M" & row_start! & ":P" & [A:A].Rows.Count) Set range_num_population = range_num Set range_num_minions = Range("M" & row_start! & ":M" & [A:A].Rows.Count) str_yes$ = "ДА" If ((Not Intersect(Target, range_population) Is Nothing) Or _ (Not Intersect(Target, range_minions) Is Nothing) Or _ (Not Intersect(Target, range_num) Is Nothing)) And _ Target.Count = 1 Then With Application: .EnableEvents = False: .ScreenUpdating = False: End With If (Not Intersect(Target, range_population) Is Nothing) And (UCase(Target.Value) = str_yes$) Then range_minions.Resize(1).Offset(Target.Row - row_start!).Value = Empty range_num_population.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf (Not Intersect(Target, range_minions) Is Nothing) And (UCase(Target.Value) = str_yes$) Then range_population.Resize(1).Offset(Target.Row - row_start!).Value = Empty range_num_minions.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf Not Intersect(Target, range_num) Is Nothing Then If (UCase(range_population.Resize(1).Offset(Target.Row - row_start!).Value) = str_yes$) Then range_num_population.Resize(1).Offset(Target.Row - row_start!).Value = 0 ElseIf (UCase(range_minions.Resize(1).Offset(Target.Row - row_start!).Value) = str_yes$) Then range_num_minions.Resize(1).Offset(Target.Row - row_start!).Value = 0 End If End If Application.EnableEvents = True End If Set range_population = Nothing Set range_minions = Nothing Set range_num = Nothing Set range_num_population = Nothing Set range_num_minions = Nothing End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 9 Then If Len(Target.Offset(, 1)) Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If Target.Offset(, 4).Resize(, 4) = 0 ElseIf Target.Column = 10 Then If Len(Target.Offset(, -1)) Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If Target.Offset(, 3) = 0 End If End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Column = 9 Then If Len(Target.Offset(, 1)) Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If Target.Offset(, 4).Resize(, 4) = 0 ElseIf Target.Column = 10 Then If Len(Target.Offset(, -1)) Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If Target.Offset(, 3) = 0 End If End Sub
Андреич, Есть вариант через условное форматирование реализовать: главная----условное форматирование---создать правило---использовать формулу для определения...
Код
=J6="ДА"
и где формат... выбираете (все форматы)---Тип:
Код
"0"
После этого чтобы не пытались вводить в ячейку, все равно ноль отобразиться, если же ДА не пропишут, то все норм будет. Правда если это нужно только для отображения, а не в расчетах
Андреич, Есть вариант через условное форматирование реализовать: главная----условное форматирование---создать правило---использовать формулу для определения...
Код
=J6="ДА"
и где формат... выбираете (все форматы)---Тип:
Код
"0"
После этого чтобы не пытались вводить в ячейку, все равно ноль отобразиться, если же ДА не пропишут, то все норм будет. Правда если это нужно только для отображения, а не в расчетахRichman