基于父列表的子列表中的Excel自动更新值

时间:2017-02-24 13:48:02

标签: excel vba excel-vba excel-formula excel-indirect

我正在尝试处理excel中的下拉列表问题。我需要在每个时刻保持单元格“B2”中的值与“A2”中的值相对应。所以我需要弄清楚如何在“A2”中对“B2”中的值进行自动更新值。

cell "A2" is filled by range seller and cell "B2" by ranges bmw,mercedes and honda

A1:A3 range "seller", C2:C3 range "bmw", D2:D3 range "honda" and E2:E3 range "mercedes"

单元格中的数据验证:

单元格“A2”= seller

单元格“B2”= =INDIRECT($A$2)

问题在于,当我选择例如梅赛德斯 - >一个班级后来我在单元格“B2”上改变了本田的奔驰价值仍然是A级。我希望在单元格“B2”中显示本田的任何正确值,并在“A2”中立即更改。

是否可以使用任何公式更新这些值或使用宏?

非常感谢您的建议。

1 个答案:

答案 0 :(得分:0)

这是一种解决方法。在单元格C2中,我使用此公式检查B2是否具有基于A2的正确范围的选项:

=IF(ISERROR(VLOOKUP(B2,INDIRECT(A2),1,FALSE)),HLOOKUP(A2,D1:F3,2,FALSE),B2)

然后,我创建了一个宏:

enter image description here

    Sub Change_Model()
'
' Change_Model Macro
'

'
    Range("C2").Select
    Selection.Copy
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

然后将其放在工作表代码中:

enter image description here

    Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2")) Is Nothing Then
    Select Case Range("A2")
        Case "BMW": Change_Model
        Case "Honda": Change_Model
        Case "Mercedes": Change_Model
    End Select
End If
End Sub

这会在您更改A2时随时激活宏,然后将当前来自C2的calue粘贴到B2中,这将始终是当前卖家列表中的第一个选项。

enter image description here