Exceldynamic“数据validation”列表

我正在使用Excel工作表来帮助configuration大型的XML文件。

我有以下

从“数据验证 - 列表”中选择的类型

在24种不同Type选项中,它们共享大量的常用字段进行configuration(黄色单元格,其中有15列,后面还有36列多数适用于所有24种types)。

最后,我有21列,只是标记为Option1Option2 …由于他们的单元格有不同的翻译Type

每种类型的选项的不同含义

那里的图像只是作为参考的关键。

在实际configuration项目时,我已经使用数据validation(如图1所示)来selectType ,然后在OptionX单元格中显示variablestypes(从Options键中引用)(具体说明:作为提醒用户,我希望这个值能填充每个单元格,同时仍然应用数据validation列表) 选项data_type用Type更新

以下是我遇到麻烦的地方。

我希望每个选项在需要时有条件地应用数据validation列表。 所以本质上是一个用户selectType然后填充OptionX并根据该Option单元格中的值,将调出适当的数据validation列表(如果适用,因为一些选项是基于ID号等…在这种情况下我不会有一个清单,或者是最空的清单)

另一方面说明:自从中学以来,我一直没有用过excel,所以如果我的一些方法不好,我很抱歉,在问这个问题之前,我曾经研究过一些关于很多INDIRECT调用是坏的,我现在有很多。每一个Option包含一个公式

 =VLOOKUP( OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-54),Sheet2!A16:B39,2,FALSE) 

为了引用Type的值,我可以复制/粘贴公式〜500行(每个项目的平均项目数量),尽pipe我怀疑Excel能够以更优雅的方式处理这个问题。 )

我已经通过将第一个replace为:
=VLOOKUP( D3,'smart MDR710 config.xlsx'!options,2,FALSE)
并复制/粘贴到下一个499单元格

您将需要跟随这些教程,因为您没有提供有关问题的足够信息以在此详细解释一个确切的解决scheme。

简而言之,您将需要一个表格,最左边的一列是typesselect,剩下的标题是来自第一列的24个types的select及其相关的子select。 本质上,交叉表。

然后,您将需要创build一个名为范围名为MainList与公式如…

 =INDEX(Table1[[Choose…]],1):INDEX(Table1[[Choose…]],COUNTA(Table1[[Choose…]])) 

在哪里你可以用你希望你的单元格提示你的用户的select,以及与你的表格命名相关的select信息的表1。

然后你需要创build一个名为范围名为SubList公式如…

 =IF(OR(Sheet1!B8="Choose…",Sheet1!B8=""),"",INDEX(Table1,1,MATCH(Sheet1!B8,Table1[#Headers],0)):INDEX(Table1,COUNTA(INDEX(Table1,,MATCH(Sheet1!B8,Table1[#Headers],0))),MATCH(Sheet1!B8,Table1[#Headers],0))) 

然后,您需要将这些命名范围作为数据validation标准应用于给定单元格(您的types列= MainList,后续列等于您的子列表)。

现在,您需要确保您的MainList列直接位于dynamic单元格的左侧,如果您希望combobox级联(即,一列允许在另一列中select某些值,请等待)您需要您的子列表数据validation单元直接向左。

如果是我,我会按照附件中的注释链接,并将数据input单元格放在表格中。 这将使您能够使用下面的工作表事件来更新单元格,如果您从子列表选项中更改“上游”。

 Option Explicit Const CHOOSE = "Choose…" Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrorHandler Dim targetCell As Range Dim nextCell As Range Dim oldCalc As Excel.XlCalculation If Not Intersect(Target, [DataEntryTable]) Is Nothing Then If [Radio_Choice] = 1 Then With Application .EnableEvents = False .ScreenUpdating = False oldCalc = .Calculation .Calculation = xlCalculationManual End With For Each targetCell In Target 'Clear any cells that use 'SubList' to the right of targetCell in the current table. If targetCell.Column < (targetCell.ListObject.ListColumns.Count + targetCell.ListObject.Range.Column - 1) Then 'there are table cells to the right For Each nextCell In targetCell.Offset(, 1).Resize(, targetCell.ListObject.ListColumns.Count + targetCell.ListObject.Range.Column - targetCell.Column - 1) If HasValidationFormula(nextCell) Then If nextCell.Validation.Formula1 = "=SubList" Then nextCell.Value = "" End If Next nextCell End If 'Perform different action depeding on whether we're dealing with a 'MainList' dropdown ' or a 'SubList' dropdown If HasValidationFormula(targetCell) Then Select Case targetCell.Validation.Formula1 Case "=MainList" If targetCell.Value = "" Then targetCell.Value = CHOOSE ElseIf targetCell.Value = CHOOSE Then 'Do nothing. Else targetCell.Offset(, 1).Value = CHOOSE End If Case "=SubList" If targetCell.Value = "" Then targetCell.Value = CHOOSE ElseIf targetCell.Offset(, -1).Value = CHOOSE Then targetCell.Value = "" ElseIf targetCell.Value = CHOOSE Then 'Do nothing Else Set nextCell = targetCell.Offset(, 1) If HasValidationFormula(nextCell) Then If nextCell.Validation.Formula1 = "=SubList" Then nextCell.Value = CHOOSE End If End If End Select End If Next targetCell With Application .EnableEvents = True .ScreenUpdating = True .Calculation = oldCalc End With End If End If Exit Sub ErrorHandler: With Application .EnableEvents = True .ScreenUpdating = True If oldCalc <> 0 Then .Calculation = oldCalc End With MsgBox Err.Description, vbCritical, Name & ".Worksheet_Change()" End Sub Private Function HasValidationFormula(cell As Range) As Boolean On Error GoTo ValidationNotExistsError If cell.Validation.Formula1 <> "" Then HasValidationFormula = True Else HasValidationFormula = False End If Exit Function ValidationNotExistsError: HasValidationFormula = False End Function 

信贷出去

http://chandoo.org/wp/2014/02/13/dynamic-cascading-dropdowns-that-reset/

http://www.contextures.com/xlDataVal15.html