链接2个单元内数据验证列表

时间:2017-04-03 09:38:58

标签: excel vba excel-vba validation

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

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

为了获得基于d_val的{​​{1}}我使用cl_val

这样的公式

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

由于以下原因,我无法将这些公式放在各自的单元格中:

  1. 由于每个公式都引用另一个单元格,我会得到一个循环引用
  2. 如果我使用下拉箭头选择值,则会覆盖该单元格中的公式
  3. 我可以通过更改数据验证所指向的列表 - 或使用VBA方法来获得此链接功能吗? 我想这是一个动态默认公式验证和一个单元格覆盖机制的组合 - 基于另一个 - 2个区域我不知道如何同时处理公式。

1 个答案:

答案 0 :(得分:2)

感谢指向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