#google-sheets #google-sheets-formula
#google-таблицы #google-таблицы-формула
Вопрос:
У меня есть выпадающий список, который меняется в зависимости от другой ячейки, поэтому, если для другой ячейки установлено no
значение, моя другая ячейка должна находиться в диапазоне проверки данных, только stand-by
если для нее установлено yes
значение, тогда у нее должно быть: real
, phone
, both
все работает, но…
моя проблема в том, что теперь я хочу иметь сотню других строк в своем массиве, поэтому я попытался расширить массив, но проверка данных не обновляется. Поэтому мне пришлось бы вручную изменять одну за другой каждую ячейку проверки данных.
Вот мой лист на картинке: https://imgur.com/a/56Nk1SG (Я поместил описание к каждому изображению, чтобы сделать его более понятным).
примечание: я знаю, что в Excel, если я расширяю массив, проверка данных работает, поэтому я попытался расширить его, сохранить и затем импортировать в Google-sheets, но это не сработало … а в Excel нет флажка, и какая-то формула не работает, поэтому я должен сохранить ее в Google-листы
Редактировать:Я знаю, что есть еще один похожий пост, но это не та же проблема…
Ответ №1:
На мой взгляд, лучший способ добиться этого — использовать VBA.
Шаги:
- Импортируйте параметры «Да» в диапазоне («A1: A4»). Диапазон («A1») включает Yes в качестве заголовка.
- Выберите диапазон («A1: A4»).
- Главная страница — вкладка Стили — Формат как таблица — Выберите подсветку — Проверьте диапазон и отметьте «В моей таблице есть заголовки».
- Выберите «Да» таблица — Дизайн — Имя таблицы: tblYes.
- Импортируйте параметры «Нет» в диапазоне («B1: B2»). Диапазон («B1») включает No в качестве заголовка.
- Выберите диапазон («B1: B2»).
- Главная страница — вкладка Стили — Формат как таблица — Выберите подсветку — Проверьте диапазон и отметьте «В моей таблице есть заголовки».
- Выберите «Нет» таблицы — Дизайн — Имя таблицы: tblNo.
- Откройте редактор VBA. (Нажмите ALT, затем F11).
- Дважды щелкните на листе, на котором требуется условное форматирование (в поле в левой верхней части страницы).
- Выберите Рабочий лист в левом поле над полем кода.
- Выберите Изменить в правом поле над полем кода.
- Вставьте приведенный ниже код и попробуйте.
Код:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With ThisWorkbook.Worksheets("Sheet1") '<- Change sheet name if needed
If Not Intersect(Target, .Range("E1:E10")) Is Nothing And Target.Count = 1 Then '<- Change range if needed. Check if the change included in our range.
Application.EnableEvents = False
If Target.Value = "Yes" Or Target.Value = "No" Then '<- Case sensitive. Check the value insert if it is Yes or No
With .Cells(Target.Row, "F").Validation
.Delete '<- Clear previous valitation
If Target.Value = "Yes" Then '<- Check if the answer if Yes
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(""tblYes[Yes]"")"
ElseIf Target.Value = "No" Then '<- Check if the answer if No
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(""tblNo[No]"")"
End If
End With
Else '<- If the value insert is NOT Yes or No
.Cells(Target.Row, "F").Clear '<- Clear format amp; contents next to change cell
MsgBox "Insert Yes or No!" '<- Message box prompt for Yes or No
End If
Application.EnableEvents = True
End If
End With
End Sub
Изображение листа, включая tblYes и tblNo:
Изображение редактора VBA: