如何在Excel中进行内连接(例如使用VLOOKUP)

14

有没有使用VLOOKUP函数将两个不同的Excel电子表格进行内连接的方法?

在SQL中,我会这样做:

SELECT id, name
FROM Sheet1
INNER JOIN Sheet2
ON Sheet1.id = Sheet2.id;

表格1:

+----+------+
| ID | Name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
|  4 | D    |
+----+------+

第二张表格:

+----+-----+
| ID | Age |
+----+-----+
|  1 |  20 |
|  2 |  21 |
|  4 |  22 |
+----+-----+

结果将是:

+----+------+
| ID | Name |
+----+------+
|  1 | A    |
|  2 | B    |
|  4 | D    |
+----+------+

我该如何在VLOOKUP中实现这个?或者除了VLOOKUP之外,还有更好的方法吗?

谢谢。


你尝试过吗?=VLOOKUP(Sheet2!A1,Sheet1!A:B,2,False)其中两个表格的A:A列都保存着ID,Sheet1的B列保存着名称。这个公式应该放在Sheet2的B1单元格中,并向下复制。 - Scott Craner
有没有办法同时返回带有ID的列? - Wabbage
你想在一个新的表格中填充只在两个表格中都存在的id和第一个表格中对应的名称吗?是否会有sheet 2上存在但是sheet 1上不存在的id呢? - Scott Craner
1
VLOOKUP不会重复行。例如,如果表1中的两行“A”与表2中的三行“A”匹配,则内连接将导致六行,而VLOOKUP将导致两行。如果没有匹配,VLOOKUP将产生一行,而内连接则不会产生任何结果。 - Nick.McDermaid
@ScottCraner 是的,没错。在后者的情况下,它会看起来像 这个 - Wabbage
显示剩余10条评论
3个回答

6
你可以使用Microsoft Query来实现此结果。 首先,选择Data > From other sources > From Microsoft Query

enter image description here

然后选择“Excel文件*”。

在“选择工作簿”窗口中,您必须选择当前的工作簿。

接下来,在查询向导窗口中,选择sheet1$和sheet2$,然后单击“>”按钮。 输入图像描述

单击“下一步”,查询可视化编辑器将打开。

单击SQL按钮,然后粘贴此查询:

SELECT `Sheet1$`.ID, `Sheet1$`.Name, `Sheet2$`.Age
FROM`Sheet1$`, `Sheet2$`
WHERE `Sheet1$`.ID = `Sheet2$`.ID
最后关闭编辑器并将表格放置在需要的位置。 结果应该如下所示: enter image description here

谢谢,但我的问题是我必须通过Java(使用JDBC和Apache POI)完成所有这些操作。 Excel唯一能够自行完成的事情就是显示来自我的Java代码的计算和逻辑结果。 - Wabbage
您可以将此代码放入模板工作簿中,然后在显示计算结果之前调用“更新所有”功能。 - Seb
但是我的表格、列和条件都是动态的。除非我每次运行程序都能手动在Java上创建一个模板工作簿。 - Wabbage

4

首先,让我们列出两个表中存在的值。如果您使用的是Excel 2010或更高版本,则在Sheet 3 A2中输入以下公式:

=IFERROR(AGGREGATE(15,6,Sheet2!$A$1:$A$5000/(COUNTIF(Sheet1!$A$1:$A$5000,Sheet2!$A$1:$A$5000)>0),ROW(1:1)),"")
如果您使用的是2007版或更早版本,请使用以下数组公式:
=IFERROR(SMALL(IF(COUNTIF(Sheet1!$A$1:$A$5000,Sheet2!$A$1:$A$5000),Sheet2!$A$1:$A$5000),ROW(1:1)),"")
作为一个数组公式,将其复制并粘贴到公式栏中,然后按Ctrl-Shift-Enter而不是Enter或Tab以退出编辑模式。 然后复制下需要的行数。这将创建一个包含两个列表中所有ID的列表。这假定ID是数字而不是文本。 然后我们使用vlookup函数来处理该列表:
=IF(A2<>"",VLOOKUP(A2,Sheet1!A:B,2,FALSE),"")

这将返回与 Sheet 1 匹配的值。

在此输入图片描述


谢谢。你说的复制行是指什么? - Wabbage
@PuggyLongLegs 将公式向下拖动到您想要的位置。随着它的拖动,它将复制公式并更改引用。 - Scott Craner
我做了这个,但当我按下回车键时,没有任何反应。我有完全相同的Sheet1和Sheet2。 - Wabbage
@PuggyLongLegs 看一下修改后的内容,原始公式是针对2010年或之后的版本,我已经添加了一个适用于2007年或之前版本的公式。 - Scott Craner
@PuggyLongLegs请点击绿色的勾号将答案标记为正确,因为它回答了所提出的问题。 - Scott Craner
显示剩余2条评论

0

对于没有公式或Excel宏的基本Excel连接。请查看网站http://exceljoins.blogspot.com/2013/10/excel-inner-join.html连接可以是左外部,右外部和完全外部,这在很少的情况下使用,但我们可以实现这个Excel表格,有关更多信息,请查看以下内容 http://exceljoins.blogspot.com/ - App Review
请在此处发布答案的相关部分,因为链接可能会随时间而改变。 - Harsh Wardhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,