Автоматическое обновление диапазона проверки данных

#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.

Шаги:

  1. Импортируйте параметры «Да» в диапазоне («A1: A4»). Диапазон («A1») включает Yes в качестве заголовка.
  2. Выберите диапазон («A1: A4»).
  3. Главная страница — вкладка Стили — Формат как таблица — Выберите подсветку — Проверьте диапазон и отметьте «В моей таблице есть заголовки».
  4. Выберите «Да» таблица — Дизайн — Имя таблицы: tblYes.
  5. Импортируйте параметры «Нет» в диапазоне («B1: B2»). Диапазон («B1») включает No в качестве заголовка.
  6. Выберите диапазон («B1: B2»).
  7. Главная страница — вкладка Стили — Формат как таблица — Выберите подсветку — Проверьте диапазон и отметьте «В моей таблице есть заголовки».
  8. Выберите «Нет» таблицы — Дизайн — Имя таблицы: tblNo.
  9. Откройте редактор VBA. (Нажмите ALT, затем F11).
  10. Дважды щелкните на листе, на котором требуется условное форматирование (в поле в левой верхней части страницы).
  11. Выберите Рабочий лист в левом поле над полем кода.
  12. Выберите Изменить в правом поле над полем кода.
  13. Вставьте приведенный ниже код и попробуйте.

Код:

 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:

введите описание изображения здесь