根据第二个工作簿中的映射显示一个工作簿中的数据
Display data from one workbook depending on mapping in a second workbook
我真的在这里碰壁了,希望 excel-知识比我多一点的人能够为我指明正确的方向。
现在已经被这个问题困扰了很长一段时间,而且我的 Google-skills 到目前为止还没有能够指出我的解决方案。我没能在其他地方找到它,但是,如果是,请指出我的方向。
我有 3 个不同的工作簿。
- RAW 源文件
- 映射文档
- 目标文档
我希望根据映射文档中定义的映射将数据从源文档提取到目标文档。
所以像
if "Destination-document heading = mapping document destination"
lookup "mapping document source heading in RAW source document"
and "display all data for the specific heading in destination document".`
我尝试了以下方法,但它似乎没有为我提供任何结果:
=if(vlookup(destinationdocA1;mappingdocA1:B4;2;0);vlookup(mappingdocA1;RAWdocA1:B4;1;0);"")
您可以将 HLOOKUP
与 MATCH
一起使用,例如:
=HLOOKUP($A,$A:$C,MATCH(A2,$A:$A,0),0)
假设我有如下三个工作簿:
Source.xlsx - has a table of data starting in `A1` (as per screenshot)
Destination.xlsx - has column headers starting in `A1` (as per screenshot)
Mapping.xlsx - has mapping table with destination (but see below)
您需要颠倒 Mapping
中的列顺序以允许 VLOOKUP
工作:
Destination Source
name_v name
country_v country
category_v category
在 Destination
工作簿的 A2
范围内添加此公式:
=INDIRECT(CONCATENATE("[Source.xlsx]Sheet1!", ADDRESS(ROW(),MATCH(VLOOKUP(A,[Mapping.xlsx]Sheet1!$A:$B,2,FALSE),[Source.xlsx]Sheet1!$A:$C,0))))
将此公式拖过所有单元格以获得所需结果。
简单来说,我们试图找到对 Source
工作簿的行和列引用,以找到正确的数据值。然后我们可以利用 ADDRESS
和 INDIRECT
将其显示在 Destination
工作簿中。
使用您的屏幕截图的有效示例。在单元格 A2 中,我们想要结果 LEGO
:
> Step 1 - map the column header (e.g. what does name_v correspond to?)
VLOOKUP(A,[Mapping.xlsx]Sheet1!$A:$B,2,FALSE) = "name"
> Step 2 - get the column number for "name" in the source workbook
MATCH("name",[Source.xlsx]Sheet1!$A:$C,0) = 1
> Step 3 - get the row number (assumes both tables in Source and Dest start on same row)
ROW() = 2
> Step 4 - put together the address reference
ADDRESS(2, 1) // corresponds to Range("A2")
> Step 5 - finally reference the Source workbook to pull back the correct value
=INDIRECT(CONCATENATE("[Source.xlsx]Sheet1!", ADDRESS(2, 1)) = "LEGO"
我真的在这里碰壁了,希望 excel-知识比我多一点的人能够为我指明正确的方向。 现在已经被这个问题困扰了很长一段时间,而且我的 Google-skills 到目前为止还没有能够指出我的解决方案。我没能在其他地方找到它,但是,如果是,请指出我的方向。
我有 3 个不同的工作簿。
- RAW 源文件
- 映射文档
- 目标文档
我希望根据映射文档中定义的映射将数据从源文档提取到目标文档。
所以像
if "Destination-document heading = mapping document destination"
lookup "mapping document source heading in RAW source document"
and "display all data for the specific heading in destination document".`
我尝试了以下方法,但它似乎没有为我提供任何结果:
=if(vlookup(destinationdocA1;mappingdocA1:B4;2;0);vlookup(mappingdocA1;RAWdocA1:B4;1;0);"")
您可以将 HLOOKUP
与 MATCH
一起使用,例如:
=HLOOKUP($A,$A:$C,MATCH(A2,$A:$A,0),0)
假设我有如下三个工作簿:
Source.xlsx - has a table of data starting in `A1` (as per screenshot)
Destination.xlsx - has column headers starting in `A1` (as per screenshot)
Mapping.xlsx - has mapping table with destination (but see below)
您需要颠倒 Mapping
中的列顺序以允许 VLOOKUP
工作:
Destination Source
name_v name
country_v country
category_v category
在 Destination
工作簿的 A2
范围内添加此公式:
=INDIRECT(CONCATENATE("[Source.xlsx]Sheet1!", ADDRESS(ROW(),MATCH(VLOOKUP(A,[Mapping.xlsx]Sheet1!$A:$B,2,FALSE),[Source.xlsx]Sheet1!$A:$C,0))))
将此公式拖过所有单元格以获得所需结果。
简单来说,我们试图找到对 Source
工作簿的行和列引用,以找到正确的数据值。然后我们可以利用 ADDRESS
和 INDIRECT
将其显示在 Destination
工作簿中。
使用您的屏幕截图的有效示例。在单元格 A2 中,我们想要结果 LEGO
:
> Step 1 - map the column header (e.g. what does name_v correspond to?)
VLOOKUP(A,[Mapping.xlsx]Sheet1!$A:$B,2,FALSE) = "name"
> Step 2 - get the column number for "name" in the source workbook
MATCH("name",[Source.xlsx]Sheet1!$A:$C,0) = 1
> Step 3 - get the row number (assumes both tables in Source and Dest start on same row)
ROW() = 2
> Step 4 - put together the address reference
ADDRESS(2, 1) // corresponds to Range("A2")
> Step 5 - finally reference the Source workbook to pull back the correct value
=INDIRECT(CONCATENATE("[Source.xlsx]Sheet1!", ADDRESS(2, 1)) = "LEGO"