Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для равертывания строк под плюсом - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для равертывания строк под плюсом (Макросы/Sub)
Макрос для равертывания строк под плюсом
Beleric3380 Дата: Вторник, 02.08.2022, 13:19 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Доброго дня!
Подскажите пожалуйста, как с помощью макросов или формул можно развернуть сгруппированные строки в зависимости от значения?
Файл прикладываю. В столбце А идет характеристика, под ней параметры. Если в столбе В стоит Yes, то нужно чтобы строки развернулись.
Спасибо!
К сообщению приложен файл: test_group.xlsx (12.5 Kb)
 
Ответить
СообщениеДоброго дня!
Подскажите пожалуйста, как с помощью макросов или формул можно развернуть сгруппированные строки в зависимости от значения?
Файл прикладываю. В столбце А идет характеристика, под ней параметры. Если в столбе В стоит Yes, то нужно чтобы строки развернулись.
Спасибо!

Автор - Beleric3380
Дата добавления - 02.08.2022 в 13:19
_Boroda_ Дата: Вторник, 02.08.2022, 13:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В модуль листа напишите
[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
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ модуль листа напишите
[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
[/vba]

Автор - _Boroda_
Дата добавления - 02.08.2022 в 13:27
Beleric3380 Дата: Вторник, 02.08.2022, 14:19 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, Спасибо! Не подскажите, если у нас таких группировок строк будет не одна, а 5-6, получится ли как-то сделать отдельный макрос для каждой группировки, или такое невозможно средствами эксель?
 
Ответить
Сообщение_Boroda_, Спасибо! Не подскажите, если у нас таких группировок строк будет не одна, а 5-6, получится ли как-то сделать отдельный макрос для каждой группировки, или такое невозможно средствами эксель?

Автор - Beleric3380
Дата добавления - 02.08.2022 в 14:19
_Boroda_ Дата: Вторник, 02.08.2022, 16:13 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так попробуйте
[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_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак попробуйте
[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_
Дата добавления - 02.08.2022 в 16:13
Beleric3380 Дата: Среда, 03.08.2022, 07:04 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, спасибо. но я что-то пока немного не понимаю. Может быть выразился не так. Прикладываю новый файл. Планиурется, что заполняется форма, если мы в столбце В ставим Yes, то должны развернуться соответсвующие строки. таких группировок предполагается 5-6 штук.
К сообщению приложен файл: 8170727.xlsx (12.7 Kb)
 
Ответить
Сообщение_Boroda_, спасибо. но я что-то пока немного не понимаю. Может быть выразился не так. Прикладываю новый файл. Планиурется, что заполняется форма, если мы в столбце В ставим Yes, то должны развернуться соответсвующие строки. таких группировок предполагается 5-6 штук.

Автор - Beleric3380
Дата добавления - 03.08.2022 в 07:04
pechkin Дата: Среда, 03.08.2022, 09:12 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Здравствуйте! Можно так, но при условии,что кол-во скрытых строк в групировках одинаково. [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]
К сообщению приложен файл: 8170727.xls (43.0 Kb)
 
Ответить
СообщениеЗдравствуйте! Можно так, но при условии,что кол-во скрытых строк в групировках одинаково. [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]

Автор - pechkin
Дата добавления - 03.08.2022 в 09:12
Beleric3380 Дата: Среда, 03.08.2022, 09:28 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

pechkin, Спасибо! К сожалению кол-во строк в группировке будет разное. Изначально всё будет скрыто, дальше когда будут проставляться значения, должно идти раскрытие строк, в зависимости от значения (Yes or No)
 
Ответить
Сообщениеpechkin, Спасибо! К сожалению кол-во строк в группировке будет разное. Изначально всё будет скрыто, дальше когда будут проставляться значения, должно идти раскрытие строк, в зависимости от значения (Yes or No)

Автор - Beleric3380
Дата добавления - 03.08.2022 в 09:28
Beleric3380 Дата: Среда, 03.08.2022, 09:42 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Таких группировок будет около 5-6. Возможно ли просто под каждую группировку написать свой макрос?
 
Ответить
СообщениеТаких группировок будет около 5-6. Возможно ли просто под каждую группировку написать свой макрос?

Автор - Beleric3380
Дата добавления - 03.08.2022 в 09:42
pechkin Дата: Среда, 03.08.2022, 09:47 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Возможно. Для этого необходимо знать адреса изменяемых ячеек (B3, В8.... и т.д.) на YES or NO и количество скрытых строк в группировках для каждой "управляющей" ячейки.
 
Ответить
СообщениеВозможно. Для этого необходимо знать адреса изменяемых ячеек (B3, В8.... и т.д.) на YES or NO и количество скрытых строк в группировках для каждой "управляющей" ячейки.

Автор - pechkin
Дата добавления - 03.08.2022 в 09:47
_Boroda_ Дата: Среда, 03.08.2022, 10:20 | Сообщение № 10
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В модуль листа
[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_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ модуль листа
[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_
Дата добавления - 03.08.2022 в 10:20
Beleric3380 Дата: Среда, 03.08.2022, 12:19 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, большое спасибо! то что нужно!
 
Ответить
Сообщение_Boroda_, большое спасибо! то что нужно!

Автор - Beleric3380
Дата добавления - 03.08.2022 в 12:19
Beleric3380 Дата: Вторник, 09.08.2022, 11:04 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

_Boroda_, добрый день! Не подскажите как сделать развертывание строк не только по Yes, а по нескольким словам, Yes_1, Yes_2 и тд. Пробовал через оператор or, но что-то пошло не так.
 
Ответить
Сообщение_Boroda_, добрый день! Не подскажите как сделать развертывание строк не только по Yes, а по нескольким словам, Yes_1, Yes_2 и тд. Пробовал через оператор or, но что-то пошло не так.

Автор - Beleric3380
Дата добавления - 09.08.2022 в 11:04
RAN Дата: Вторник, 09.08.2022, 11:30 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
ElseIf Target = "Yes1" Then
            Rows(Target.Row + 1).ShowDetail = Target = "Yes1"
ElseIf Target = "Yes2" Then
            Rows(Target.Row + 1).ShowDetail = Target = "Yes2"
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
ElseIf Target = "Yes1" Then
            Rows(Target.Row + 1).ShowDetail = Target = "Yes1"
ElseIf Target = "Yes2" Then
            Rows(Target.Row + 1).ShowDetail = Target = "Yes2"
[/vba]

Автор - RAN
Дата добавления - 09.08.2022 в 11:30
Beleric3380 Дата: Вторник, 09.08.2022, 11:45 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

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]


Сообщение отредактировал Beleric3380 - Вторник, 09.08.2022, 11:47
 
Ответить
Сообщение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]

Автор - Beleric3380
Дата добавления - 09.08.2022 в 11:45
msi2102 Дата: Вторник, 09.08.2022, 11:54 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Может поэтому:
Yes_1, Yes_2 и тд
и в коде:
        ElseIf Target = "Yes1" Then
Rows(Target.Row + 1).ShowDetail = Target = "Yes1"
ElseIf Target = "Yes2" Then
Rows(Target.Row + 1).ShowDetail = Target = "Yes2"


Сообщение отредактировал msi2102 - Вторник, 09.08.2022, 11:54
 
Ответить
СообщениеМожет поэтому:
Yes_1, Yes_2 и тд
и в коде:
        ElseIf Target = "Yes1" Then
Rows(Target.Row + 1).ShowDetail = Target = "Yes1"
ElseIf Target = "Yes2" Then
Rows(Target.Row + 1).ShowDetail = Target = "Yes2"

Автор - msi2102
Дата добавления - 09.08.2022 в 11:54
Beleric3380 Дата: Вторник, 09.08.2022, 12:02 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

msi2102, не заметил, спасибо)
 
Ответить
Сообщениеmsi2102, не заметил, спасибо)

Автор - Beleric3380
Дата добавления - 09.08.2022 в 12:02
Beleric3380 Дата: Вторник, 09.08.2022, 14:57 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Не подскажите, как можно реализовать так, чтобы "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
[/vba]

Автор - Beleric3380
Дата добавления - 09.08.2022 в 14:57
Beleric3380 Дата: Вторник, 09.08.2022, 15:14 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Кажется не туда ушел. В одной из строк, значение Yes or No мы не выбираем из списка, а оно ссылается на другой лист, например ='Sheet_1'!B10. В таком случае макрос на разворачивание\сворачивание не работает.
 
Ответить
СообщениеКажется не туда ушел. В одной из строк, значение Yes or No мы не выбираем из списка, а оно ссылается на другой лист, например ='Sheet_1'!B10. В таком случае макрос на разворачивание\сворачивание не работает.

Автор - Beleric3380
Дата добавления - 09.08.2022 в 15:14
Beleric3380 Дата: Вторник, 09.08.2022, 16:11 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 0% ±

Попробовал через target.value тоже не помогает (
 
Ответить
СообщениеПопробовал через target.value тоже не помогает (

Автор - Beleric3380
Дата добавления - 09.08.2022 в 16:11
RAN Дата: Вторник, 09.08.2022, 19:33 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А с чего бы ему работать? Значение ячейки не изменяется, а пересчитывается. Событие Worksheet_Change не возникает.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА с чего бы ему работать? Значение ячейки не изменяется, а пересчитывается. Событие Worksheet_Change не возникает.

Автор - RAN
Дата добавления - 09.08.2022 в 19:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для равертывания строк под плюсом (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!