根据另一个单元格的值,自动从另一张表的数据更新 Excel 中的单元格

根据另一个单元格的值,自动从另一张表的数据更新 Excel 中的单元格

因此,我设置了一个下拉菜单,其中包含 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”,则此函数将返回A1Sheet2!C7
  • 外部通过函数使用该地址Indirect()从该地址检索(谁说 Excel 不知道指针),因此您得到文本“Beta”。

因此,我们需要的是一个具有有效值的矩阵、要检索的数据的地址和一个公式。希望这能回答你的问题,不过如果我看时间戳的话,我可能有点迟到了。:-)

相关内容