如何借助唯一 ID 将 sheet 1 数据映射到 sheet 2?
How to map the sheet 1 data with sheet 2 with help of Unique ID?
我创建了一个 excel sheet 属性 ID
, NAME
合二为一 sheet.
SHEET 1:
在另一个 sheet 中,我的名字是随机的,并且必须使用来自 SHEET-1
数据的引用将它们映射到正确的 ID。
SHEET 2:
突出显示的值是手动输入的。有没有可以自动填充数据的公式。
注意:以上数据为样本数据集,原始数据在sheet2中有所不同。第二个sheet中将有2列以上。
在这种情况下我会做的只是切换一个 sheet 中的字段,使它们的顺序相同,然后执行 vlookup。我会这样做是因为我有能力篡改 header 命令。不知道你是否也这样做,但最好让一切都井井有条。
If(isna(vlookup(A2,'Sheet1',A:B,2,FALSE)),"",vlookup(A2,'Sheet1',A:B,2,FALSE) )
*将 sheet1 中的 header 顺序切换为第一列的名称,然后是第二列的 id
我对此的解决方案是将两个工作表都放入 MS Access 并进行连接查询。特别是如果桌子很大。这就是我多次这样做的方式,也是我总是获得包含 MS Access 的 Office 版本的原因。花几分钟时间,这是值得的。
我在使用 VBScript 后得到了解决方案。
Private Sub GetID_Click()
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDefaultID = ThisWorkbook.Sheets.Item("DefaultIDs")
Set objGetID = ThisWorkbook.Sheets.Item("GetIDs")
iDefaultRC = objDefaultID.UsedRange.Rows.Count
iDefaultCC = objDefaultID.UsedRange.Columns.Count
iGetRC = objGetID.UsedRange.Rows.Count
iGetCC = objGetID.UsedRange.Columns.Count
For i = 1 To iGetCC
If objGetID.Cells(1, i) = "Name" Then
iGetNameCol = i
ElseIf objGetID.Cells(1, i) = "ID" Then
iGetIDCol = i
End If
Next
For i = 1 To iDefaultCC
If objDefaultID.Cells(1, i) = "Name" Then
iDefNameCol = i
ElseIf objDefaultID.Cells(1, i) = "ID" Then
iDefIDCol = i
End If
Next
For i = 2 To iGetRC
For j = 2 To iDefaultRC
If objGetID.Cells(i, iGetNameCol) = objDefaultID.Cells(j, iDefNameCol) Then
objGetID.Cells(i, iGetIDCol) = objDefaultID.Cells(j, iDefIDCol)
End If
Next
Next
End Sub
这是一个非常通用的公式,用于在 sheet 之间进行查找。它从查找 sheet 和 returns 列中的列 A 中查找与当前列同名的值(标题在第 7 行)。查找键具有位于查找值的左侧,否则 vlookup 不起作用:
=VLOOKUP($A:$A,'Lookup sheet'!$A:$ZZ,MATCH(:,'Lookup sheet'!:,0),FALSE)
或者如果值(在A:A中)在查找sheet中的键(在D:D中)的左边,你需要知道值的列:
=INDEX('Lookup sheet'!$A:$A,MATCH($E:$E,'Lookup sheet'!$D:$D,0))
我创建了一个 excel sheet 属性 ID
, NAME
合二为一 sheet.
SHEET 1:
在另一个 sheet 中,我的名字是随机的,并且必须使用来自 SHEET-1
数据的引用将它们映射到正确的 ID。
SHEET 2:
突出显示的值是手动输入的。有没有可以自动填充数据的公式。
注意:以上数据为样本数据集,原始数据在sheet2中有所不同。第二个sheet中将有2列以上。
在这种情况下我会做的只是切换一个 sheet 中的字段,使它们的顺序相同,然后执行 vlookup。我会这样做是因为我有能力篡改 header 命令。不知道你是否也这样做,但最好让一切都井井有条。
If(isna(vlookup(A2,'Sheet1',A:B,2,FALSE)),"",vlookup(A2,'Sheet1',A:B,2,FALSE) )
*将 sheet1 中的 header 顺序切换为第一列的名称,然后是第二列的 id
我对此的解决方案是将两个工作表都放入 MS Access 并进行连接查询。特别是如果桌子很大。这就是我多次这样做的方式,也是我总是获得包含 MS Access 的 Office 版本的原因。花几分钟时间,这是值得的。
我在使用 VBScript 后得到了解决方案。
Private Sub GetID_Click()
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDefaultID = ThisWorkbook.Sheets.Item("DefaultIDs")
Set objGetID = ThisWorkbook.Sheets.Item("GetIDs")
iDefaultRC = objDefaultID.UsedRange.Rows.Count
iDefaultCC = objDefaultID.UsedRange.Columns.Count
iGetRC = objGetID.UsedRange.Rows.Count
iGetCC = objGetID.UsedRange.Columns.Count
For i = 1 To iGetCC
If objGetID.Cells(1, i) = "Name" Then
iGetNameCol = i
ElseIf objGetID.Cells(1, i) = "ID" Then
iGetIDCol = i
End If
Next
For i = 1 To iDefaultCC
If objDefaultID.Cells(1, i) = "Name" Then
iDefNameCol = i
ElseIf objDefaultID.Cells(1, i) = "ID" Then
iDefIDCol = i
End If
Next
For i = 2 To iGetRC
For j = 2 To iDefaultRC
If objGetID.Cells(i, iGetNameCol) = objDefaultID.Cells(j, iDefNameCol) Then
objGetID.Cells(i, iGetIDCol) = objDefaultID.Cells(j, iDefIDCol)
End If
Next
Next
End Sub
这是一个非常通用的公式,用于在 sheet 之间进行查找。它从查找 sheet 和 returns 列中的列 A 中查找与当前列同名的值(标题在第 7 行)。查找键具有位于查找值的左侧,否则 vlookup 不起作用:
=VLOOKUP($A:$A,'Lookup sheet'!$A:$ZZ,MATCH(:,'Lookup sheet'!:,0),FALSE)
或者如果值(在A:A中)在查找sheet中的键(在D:D中)的左边,你需要知道值的列:
=INDEX('Lookup sheet'!$A:$A,MATCH($E:$E,'Lookup sheet'!$D:$D,0))