几天以来,我一直在尝试以下操作,但由于我缺乏 VBA 技能,因此无法正常工作。
场景:
在另一张纸中定义)。
示例:
用户从第一张表 A1 的下拉列表中选择值“Team One”。此列表在表 2 中定义。在第二张列表的每个项目旁边是一个单元格,其中包含逗号分隔的名称列表。
用户从下拉列表中选择了一个团队后,相应的名称列表将复制到表一的字段 B1 中。
这个过程应该只在
A1
时触发。被改变。希望我能说清楚。如果我最终自己找到解决方案,我会在这里发布。
谢谢您阅读此篇。
最佳答案
您可以在没有 VBA 的情况下执行此操作。在您想要粘贴名称列表的字段中输入以下公式:
=IF(ISBLANK(<address of dropdown on Sheet1>),"",INDEX(<address of list to left of values on Sheet2>,MATCH(<address of dropdown on Sheet1>,<address of dropdown values on Sheet2>,0)))
当从下拉列表中未选择任何内容时,这将是空白的,并且在选择值时将显示适当的名称列表。
例如,如果下拉列表在 Sheet1 的 B1 中,下拉值在 Sheet2 的 B1:B9 中,并且相应的名称列表在 Sheet2 的 A1:A9 中,您可以使用以下公式:
=IF(ISBLANK(Sheet1!B1),"",INDEX(Sheet2!A1:A9,MATCH(Sheet1!B1,Sheet2!B1:B9,0)))
编辑(每条评论):
要在 VBA 中使用它,您需要执行类似于 @chris neilsen 建议的操作。在工作表模块中,您需要为更改事件创建一个子:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then
Range("A1").Formula = "=INDEX(Sheet2!A1:A9,MATCH(Sheet1!B1,Sheet2!B1:B9,0))"
If IsError(Range("A1").Value) Then
Range("A1") = ""
Else
Range("A1").Value = Range("A1")
End If
End If
End Sub
为了消除任何混淆,A1 是显示输出的单元格。
关于更改单元格后,Excel复制值与对应于键的VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646598/