因此,我设置了一个下拉菜单,其中包含 A1 中的名称列表。我希望发生的事情是,让 F34 中的数据根据 A1 读取的内容而更改。我希望让 F34 使用另一张表中的数据进行更新。
数据看起来是这样的:
- 名称 1 与 Sheet2!C6 上的数据相对应
- 名称 2 与 Sheet2!C7 上的数据相对应
- 名称 3 与 Sheet2!C8 上的数据对应
- 等等。
我尝试的是这样的。F34:=IF(A1="Name 1",Sheet2!C6), (A1="NAME 2",SHEET2!C7)
等等。
但我什么也没做。有什么想法吗?
答案1
您如何填充下拉列表?您是否将姓名写入对话框中,或者工作簿中某处是否有姓名列表?
你可以:
- 在 Sheet2 的 C 列前插入一列,并将名称输入到此列中,使其位于与其相关的值的旁边。这些值现在位于 D 列中。
- 使用 Vlookup 查找相关信息,公式如下
=vlookup(A1,Sheet2!$C$6:$D$20,2,False)
如果您不能/不想将姓名列表放在工作表 2 上其他信息的旁边,请将姓名列表放在任何位置,例如工作表 1 上的单元格 Z1 至 Z20。然后您可以使用类似以下公式
=index(Sheet2!$C$6:$c$20,match(A1,$Z$1:$Z$20,0))
答案2
您可以通过事件 Worksheet_SelectionChange 在 VBA 中执行此操作
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Selection.Count = 1 Then
If Not Intersect(Target, Range("A1")) Is Nothing Then
// do a switch statment here, where you assign F34 value
End If
End If
End Sub
答案3
无需 VBA 即可实现所需功能。让我们逐步构建工作表:
我们需要显示在 A1 中的下拉列表的值。正如您已经写到的,有一张工作表(我将其命名为roster
)。在这里,我们输入下拉列表的值,并在其旁边的单元格中输入您想要从中获取数据的所需地址:
| A | B |
+--------+-----------+
1 | Name_1 | Sheet2!C6 |
2 | Name_2 | Sheet2!C7 |
3 | Name_3 | Sheet2!C8 |
转到单元格A1
并将有效性设置为“允许单元格范围”,并将单元格范围设置为roster.$A$1:$A$3
。现在您有了下拉列表。
下一步,让我们在 Sheet2 中输入值:转到Sheet2
并输入要检索的值(我只是使用了一些愚蠢的文本:-))
| A | B | C |
+----+----+-------+
6 | | | Alpha |
7 | | | Beta |
8 | | | Gamma |
现在到了最有趣的部分:如何根据下拉列表选择显示值?我们使用Indirect()
和 的组合VLookup()
:
转到您的手机F34
并输入以下公式:
=INDIRECT(VLOOKUP(A1,roster.$A$2:$B$6,2,FALSE()))
这是怎么回事?
- 内部部分,在我们定义有效值和数据地址的矩阵中
VLookup()
搜索值,取第二列(地址)并检索它。因此,如果下拉列表中有“Name_2”,则此函数将返回A1
Sheet2!C7
- 外部通过函数使用该地址
Indirect()
从该地址检索(谁说 Excel 不知道指针),因此您得到文本“Beta”。
因此,我们需要的是一个具有有效值的矩阵、要检索的数据的地址和一个公式。希望这能回答你的问题,不过如果我看时间戳的话,我可能有点迟到了。:-)