#excel #vba #if-statement #target
#excel #vba #if-оператор #цель
Вопрос:
У меня есть таблица данных, в которой набор строк должен быть скрыт на основе критериев, установленных в разных наборах ячеек. Я написал кое-что, что в основном называется «cave man coding», и, конечно, это не работает 🙂
Я создал if и попытался поместить ifs в ifs, но буквально ничего не происходит с этим кодом.
Я написал только 2 набора строк, но это около 30 разных наборов (еще не написано)
Sub Worksheet_Change(ByVal Target As Range)
Set Target = Range(Cells(7, 8), Cells(7, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
If Target.Value = "No"
Rows("8:29").EntireRow.Hidden = True
If Target.Value = "Yes" And Target1.Value = "Half" Then
Rows("22:29").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
Rows("8:29").EntireRow.Hidden = False
End If
End If
Set Target = Range(Cells(30, 8), Cells(30, 8))
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
If Target.Value = "No"
Rows("31:56").EntireRow.Hidden = True
If Target.Value = "Yes" And Target1.Value = "Half" Then
Rows("47:56").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
Rows("31:56").EntireRow.Hidden = False
End If
End If
End Sub
Итак, в кратком резюме у меня есть две переменные в ячейке B3 (половина и полная)
и в строке H в указанных ячейках (например, H7, H30 и так далее) Параметры Да / Нет. строки 7, 30 (любая строка, имеющая опцию «Да» / «нет») являются заголовками разделов с 8 по 29, в которые включены подробные сведения об этом разделе.
если H7 (H30 …) не имеет значения — все данные должны быть скрыты (строки 8-29; 31-56 и так далее) — Значение в B3 не имеет значения. Если H7 (H30 …) равно Yes, то значение в B3 имеет значение: если H7 (H30 …) равно Yes, а B3 равно половине — строки 22-29 скрыты (47-56 и так далее), строки 8-21 не скрыты в этом случае, если H7 (H30 …) равно Yes, а B3 заполнен — строки 8-29 не скрыты.
Надеюсь, я хорошо это объяснил.
Пожалуйста, помогите мне улучшить мой код, чтобы иметь возможность выполнять поставленную цель.
Комментарии:
1. Пожалуйста, укажите option explicit в первой строке вашего кода. Затем устраните ошибки компиляции, которые будут отображаться при добавлении этого оператора. Вы также должны указать использование диапазона и ячейки с именем книги и листа. например, Workbook_name. Имя_листника. Диапазон
2. Я погуглил, что нужно сделать после ввода строки, честно говоря, я в замешательстве. Не могли бы вы, пожалуйста, уточнить это подробнее?
Ответ №1:
В ваших операторах if отсутствуют then, а также elseif
Вот код, который должен работать у вас:
Sub Worksheet_Change(ByVal Target As Range)
Set Target1 = Range(Cells(3, 2), Cells(3, 2))
' ------------
Set Target = Range(Cells(7, 8), Cells(7, 8))
If Target.Value = "No" Then
Rows("8:29").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
Rows("22:29").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
Rows("8:29").EntireRow.Hidden = False
End If
' ------------
Set Target = Range(Cells(30, 8), Cells(30, 8))
If Target.Value = "No" Then
Rows("31:56").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Half" Then
Rows("47:56").EntireRow.Hidden = True
ElseIf Target.Value = "Yes" And Target1.Value = "Full" Then
Rows("31:56").EntireRow.Hidden = False
End If
End Sub
Поскольку ссылка на диапазон Target1 не изменяется, вам не нужно повторять ее настройку по всему вашему коду.