Доброго дня! Подскажите пожалуйста, как с помощью макросов или формул можно развернуть сгруппированные строки в зависимости от значения? Файл прикладываю. В столбце А идет характеристика, под ней параметры. Если в столбе В стоит Yes, то нужно чтобы строки развернулись. Спасибо!
Доброго дня! Подскажите пожалуйста, как с помощью макросов или формул можно развернуть сгруппированные строки в зависимости от значения? Файл прикладываю. В столбце А идет характеристика, под ней параметры. Если в столбе В стоит Yes, то нужно чтобы строки развернулись. Спасибо!Beleric3380
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "B3" Then If Target = "Yes" Then Me.Outline.ShowLevels RowLevels:=2 ElseIf Target = "No" Then Me.Outline.ShowLevels RowLevels:=1 End If End If End Sub
[/vba]
В модуль листа напишите [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "B3" Then If Target = "Yes" Then Me.Outline.ShowLevels RowLevels:=2 ElseIf Target = "No" Then Me.Outline.ShowLevels RowLevels:=1 End If End If End Sub
_Boroda_, Спасибо! Не подскажите, если у нас таких группировок строк будет не одна, а 5-6, получится ли как-то сделать отдельный макрос для каждой группировки, или такое невозможно средствами эксель?
_Boroda_, Спасибо! Не подскажите, если у нас таких группировок строк будет не одна, а 5-6, получится ли как-то сделать отдельный макрос для каждой группировки, или такое невозможно средствами эксель?Beleric3380
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "B3" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If End Sub
[/vba] Для No все остальные случаи, которые не Yes. А в предыдущем макросе я написал для Yes открытие, для No скрытие, а для остальных значений ничего не делаем
Так попробуйте [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "B3" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If End Sub
[/vba] Для No все остальные случаи, которые не Yes. А в предыдущем макросе я написал для Yes открытие, для No скрытие, а для остальных значений ничего не делаем_Boroda_
_Boroda_, спасибо. но я что-то пока немного не понимаю. Может быть выразился не так. Прикладываю новый файл. Планиурется, что заполняется форма, если мы в столбце В ставим Yes, то должны развернуться соответсвующие строки. таких группировок предполагается 5-6 штук.
_Boroda_, спасибо. но я что-то пока немного не понимаю. Может быть выразился не так. Прикладываю новый файл. Планиурется, что заполняется форма, если мы в столбце В ставим Yes, то должны развернуться соответсвующие строки. таких группировок предполагается 5-6 штук.Beleric3380
Здравствуйте! Можно так, но при условии,что кол-во скрытых строк в групировках одинаково. [vba]
Код
Sub Строка() Dim x As Integer With Application .ScreenUpdating = False x = ActiveCell.Row + 1 If Selection.Value = "Yes" Then Rows(x).Resize(3).EntireRow.Hidden = False Else Rows(x).Resize(3).EntireRow.Hidden = True End If .ScreenUpdating = True End With End Sub
[/vba] И в модуль листа [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range: Set rng = Range("B3:B12") If Not Intersect(rng, Target) Is Nothing Then Строка End Sub
[/vba]
Здравствуйте! Можно так, но при условии,что кол-во скрытых строк в групировках одинаково. [vba]
Код
Sub Строка() Dim x As Integer With Application .ScreenUpdating = False x = ActiveCell.Row + 1 If Selection.Value = "Yes" Then Rows(x).Resize(3).EntireRow.Hidden = False Else Rows(x).Resize(3).EntireRow.Hidden = True End If .ScreenUpdating = True End With End Sub
[/vba] И в модуль листа [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range: Set rng = Range("B3:B12") If Not Intersect(rng, Target) Is Nothing Then Строка End Sub
pechkin, Спасибо! К сожалению кол-во строк в группировке будет разное. Изначально всё будет скрыто, дальше когда будут проставляться значения, должно идти раскрытие строк, в зависимости от значения (Yes or No)
pechkin, Спасибо! К сожалению кол-во строк в группировке будет разное. Изначально всё будет скрыто, дальше когда будут проставляться значения, должно идти раскрытие строк, в зависимости от значения (Yes or No)Beleric3380
Возможно. Для этого необходимо знать адреса изменяемых ячеек (B3, В8.... и т.д.) на YES or NO и количество скрытых строк в группировках для каждой "управляющей" ячейки.
Возможно. Для этого необходимо знать адреса изменяемых ячеек (B3, В8.... и т.д.) на YES or NO и количество скрытых строк в группировках для каждой "управляющей" ячейки.pechkin
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then On Error Resume Next If Target = "Yes" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" ElseIf Target = "No" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If On Error GoTo 0 End If End Sub
[/vba] Начала группировок должны быть на одну строку ниже ячеек, в которых Ез и Но
В модуль листа [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then On Error Resume Next If Target = "Yes" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" ElseIf Target = "No" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If On Error GoTo 0 End If End Sub
[/vba] Начала группировок должны быть на одну строку ниже ячеек, в которых Ез и Но_Boroda_
_Boroda_, добрый день! Не подскажите как сделать развертывание строк не только по Yes, а по нескольким словам, Yes_1, Yes_2 и тд. Пробовал через оператор or, но что-то пошло не так.
_Boroda_, добрый день! Не подскажите как сделать развертывание строк не только по Yes, а по нескольким словам, Yes_1, Yes_2 и тд. Пробовал через оператор or, но что-то пошло не так.Beleric3380
RAN, Спасибо! Так тоже [l]пробовал, но не получилось. Может как-то не так прописываю? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then On Error Resume Next If Target = "Yes" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" ElseIf Target = "Yes1" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes1" ElseIf Target = "Yes2" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes2" ElseIf Target = "No" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If On Error GoTo 0 End If End Sub
[/vba]
RAN, Спасибо! Так тоже [l]пробовал, но не получилось. Может как-то не так прописываю? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then On Error Resume Next If Target = "Yes" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" ElseIf Target = "Yes1" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes1" ElseIf Target = "Yes2" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes2" ElseIf Target = "No" Then Rows(Target.Row + 1).ShowDetail = Target = "Yes" End If On Error GoTo 0 End If End Sub
Не подскажите, как можно реализовать так, чтобы "Yes" ссылалось на другой лист. То есть на одном листе выбирают значение, оно автоматом подставляется на нужный лист( обычная формула), и уже в зависимости от этого значения идет раскрытие\скрытие строки. нужно это не по всему списку, а в конкретной ячейке. пробовал так:[vba]
Код
Private Sub Worksheet_Change_2() If Sheets("Sheet_1").Cells("B10") = "Yes" Then Sheets("Sheet_2").Rows(20).ShowDetail = "Yes" ElseIf Shhets("Sheet_1").Cells("B10") = "No" then Sheets("Sheet_2").Rows(20).ShowDetail = "Yes" End Sub
[/vba]
Не подскажите, как можно реализовать так, чтобы "Yes" ссылалось на другой лист. То есть на одном листе выбирают значение, оно автоматом подставляется на нужный лист( обычная формула), и уже в зависимости от этого значения идет раскрытие\скрытие строки. нужно это не по всему списку, а в конкретной ячейке. пробовал так:[vba]
Код
Private Sub Worksheet_Change_2() If Sheets("Sheet_1").Cells("B10") = "Yes" Then Sheets("Sheet_2").Rows(20).ShowDetail = "Yes" ElseIf Shhets("Sheet_1").Cells("B10") = "No" then Sheets("Sheet_2").Rows(20).ShowDetail = "Yes" End Sub
Кажется не туда ушел. В одной из строк, значение Yes or No мы не выбираем из списка, а оно ссылается на другой лист, например ='Sheet_1'!B10. В таком случае макрос на разворачивание\сворачивание не работает.
Кажется не туда ушел. В одной из строк, значение Yes or No мы не выбираем из списка, а оно ссылается на другой лист, например ='Sheet_1'!B10. В таком случае макрос на разворачивание\сворачивание не работает.Beleric3380