[英]Pull data from different sheet based on ID
我有 excel 应用程序,其中包含 3 张(Sheet1、Sheet2 和 Sheet3)。 工作表 1 包含 ID 和名称列,工作表 2 也具有相同的 ID 和名称,而工作表 1 将是 static,工作表 2 是动态的。
我想从 Sheet1 或 Sheet2 中获取数据。 当有人在 sheet3 中输入 ID 时,我应该从 Sheet1 或 Sheet2 中提取相应的名称并将其放入 sheet3 中。
我是 vba 或 excel 公式的新手。 我不知道我需要从哪里开始。
表 1
+-----------+
| ID | Name |
+-----------+
| 1 | AAAA |
+-----------+
| 2 | BBBB |
+-----------+
| 3 | CCCC |
+-----------+
表 2
+-----------+
| ID | Name |
+-----------+
| 7 | SSSS |
+-----------+
| 9 | XXXX |
+-----------+
如果我在 Sheet3,ID 列中输入 3,那么它应该在名称列中填充CCCC 。
您的问题可以通过使用 Vlookup function 的建议来回答,但我更喜欢 VBA。 所以,请检查下一个代码。 这是一个工作表事件,必须在工作表模块中复制(右键单击工作表名称并选择View Code
):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Dim sh1 As Worksheet, sh2 As Worksheet, IDCell As Range
Dim boolFound As Boolean
Set sh1 = Worksheets("Sheet1"): Set sh2 = Worksheets("Sheet2")
Set IDCell = sh1.Range("A:A").Find(What:=Target.Value, LookAt:=xlWhole)
If Not IDCell Is Nothing Then
If Target.Value <> "" Then
Target.Offset(0, 1).Value = IDCell.Offset(0, 1).Value
Target.Offset(0, 2).Value = IDCell.Offset(0, 2).Value: Exit Sub
End If
End If
Set IDCell = sh2.Range("A:A").Find(What:=Target.Value, LookAt:=xlWhole)
If Not IDCell Is Nothing Then
If Target.Value <> "" Then
Target.Offset(0, 1).Value = IDCell.Offset(0, 1).Value
Target.Offset(0, 2).Value = IDCell.Offset(0, 2).Value: Exit Sub
End If
End If
If Target.Value <> "" Then
MsgBox """" & Target.Value & """ ID could not be found...": Target.Activate
Else
Target.Offset(0, 1).ClearContents
End If
End If
End Sub
它假设ID
在三个相关工作表的第一列 (A:A) 中。 如果没有,代码可以很容易地适应......
我喜欢 VBA 但对于这个我认为 VLOOKUP 会简单得多:
=IFERROR(VLOOKUP(A2,Sheet1!$A:$B,2,FALSE),VLOOKUP(A2,Sheet2!$A:$B,2,FALSE))
如果要添加第 3、4、5 列,只需确保绝对引用正确,使用 COLUMN() 代替硬编码数字并将其也填充到右侧=IFERROR(VLOOKUP($A2,Sheet1:$A,$C,COLUMN(),FALSE),VLOOKUP($A2:Sheet2,$A,$C,COLUMN(),FALSE))
要进行“错误捕获”,请将其包装在另一个IFERROR
中
=IFERROR(IFERROR(VLOOKUP($A2,Sheet1:$A,$C,COLUMN(),FALSE),VLOOKUP($A2:Sheet2,$A,$C,COLUMN(),FALSE)),"Id not found")
如果你真的想使用 VBA 那么表格上没有公式,这个怎么样?
要将另一列添加到查找范围,只需将变量lastCol
更改为您想要的任何列!
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Dim lastCol As String: lastCol = "C"
Range(Cells(Target.Row, "B"), Cells(Target.Row, lastCol)).Formula = _
"=IFERROR(IFERROR(VLOOKUP(" & Target.Value2 & ",Sheet1!$A:$" & lastCol & ",COLUMN(),FALSE)," & _
"VLOOKUP(" & Target.Value2 & ",Sheet2!$A:$" & lastCol & ",COLUMN(),FALSE)), ""Id not found"")"
Range(Cells(Target.Row, "B"), Cells(Target.Row, lastCol)).Value2 = Range(Cells(Target.Row, "B"), Cells(Target.Row, lastCol)).Value2
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.