自动更新数据验证范围

时间:2019-04-12 12:31:33

标签: google-sheets google-sheets-formula

我有一个下拉列表,该列表根据另一个单元格而有所不同,因此,如果另一个单元格设置为no,则另一个单元格应仅在数据验证范围内stand-by(如果设置为{ {1}}它应该具有:yesrealphone一切正常,但是...

我的问题是,现在我想在数组中再排一百条,所以我尝试扩展数组,但数据验证不会更新。因此,我必须在每个数据验证单元格中手动一对一地更改。

这是图片中的我的工作表: https://imgur.com/a/56Nk1SG(我在每张图像上都加了描述,以使其更易于理解。)

注意:我知道在excel中,如果我扩展数组,则数据验证有效,因此我尝试对其进行扩展以保存它,然后将其导入到Google工作表中,但是它没有用。 ..and在excel中没有复选框,某些公式不起作用,所以我必须将其保存在Google工作表中

编辑:我知道还有另一篇类似的文章,但这不是相同的问题...

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是通过VBA。

步骤:

  1. 在Range(“ A1:A4”)中导入“是”选项。 Range(“ A1”)包括“是”作为标题。
  2. 选择范围(“ A1:A4”)。
  3. 主页-样式选项卡-设置为表格格式-选择浅色-检查范围并选中“我的表格有标题”。
  4. 选择“是”表-设计-表名:tbl是。
  5. 在Range(“ B1:B2”)中导入“否”选项。 Range(“ 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 & 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的表格图片:

enter image description here

VBA编辑器图像:

enter image description here