【问题标题】:Link 2 in-cell data validation lists链接 2 个单元内数据验证列表
【发布时间】:2017-04-03 18:14:08
【问题描述】:

我在 Excel 中有 2 个单元格内数据验证列表。两个单元格都包含指向表格的 2 列的下拉箭头。我想要的是当一个单元格包含一个值时,另一个单元格包含表中相应行的值,但它自己的列,反之亦然。 因此,如果我从cell1 的下拉列表中选择一个值,它会覆盖cell2,如果我从cell2 的下拉列表中选择一个值,它会覆盖cell1

即对于表GoalTbl,列cld;名为cl_val 的单元格包含指向GoalTbl[cl] 的数据验证列表。另一个名为d_val 的单元格指向GoalTbl[d]

所以要获得基于cl_vald_val,我使用=INDEX(GoalTbl[d],MATCH(cl_val,GoalTbl[cl],0)) 之类的公式

同样根据d_val=INDEX(GoalTbl[cl],MATCH(d_val,GoalTbl[d],0))获取cl_val的值

我不能将这些公式放在各自的单元格中,原因有两个:

  1. 由于每个公式都引用另一个单元格,我会得到一个循环引用
  2. 如果我使用下拉箭头选择一个值,它会覆盖该单元格中的公式

那么我可以通过更改数据验证指向的列表或使用 VBA 方法来获得此链接功能吗? 我想这是用于验证的动态默认公式的组合,以及基于其他 2 个区域的 1 个单元格的覆盖机制 - 我不确定如何使用公式同时处理。

【问题讨论】:

  • 我不认为你可以用公式和验证来做到这一点,但你绝对可以用 VBA 做到这一点。使用 Worksheet_Change 事件,当用户更改两个单元格中的任何一个时触发它,并用公式或值本身填充另一个。您可能希望关闭错误警报,这样允许输入下拉列表中的值以外的值 - 例如公式。但是话又说回来,这将允许您的用户简单地将任何内容放入这些单元格中。有趣的问题。

标签: vba excel validation


【解决方案1】:

感谢指向Worksheet_Change 的指针,我有一个 VBA 方法;

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [cl_val]) Is Nothing Then
    With Application.WorksheetFunction
    UI False
    [d_val] = .Index([Goaltbl[d]], .Match([cl_val], [Goaltbl[cl]], 0))
    UI True
    End With
ElseIf Not Intersect(Target, [d_val]) Is Nothing Then
    With Application.WorksheetFunction
    UI False
    [cl_val] = .Index([Goaltbl[cl]], .Match([d_val], [Goaltbl[d]], 0))
    UI True
    End With
End If
End Sub

UI 只是一个 Sub*,用于打开/关闭屏幕更新和事件(我在其他地方有一个 Worksheet_Calculate 宏,我不想触发它)

不过,函数方法还是很高兴知道的 - 我确信可以通过更改列表输入来完成一些事情


*UI代码供参考

Public Sub UI(t As Boolean)
    Application.EnableEvents = t
    Application.ScreenUpdating = t
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多