【问题标题】:How to inner-join in Excel (eg. using VLOOKUP)如何在 Excel 中进行内连接(例如,使用 VLOOKUP)
【发布时间】:2016-05-11 22:10:07
【问题描述】:

有没有办法使用 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    |
+----+------+

表 2:

+----+-----+
| 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,表 1 上的 B 列包含名称。它将进入工作表 2 的 B1 并复制下来。
  • 有没有办法让它也返回带有 ID 的列?
  • 所以你想用两个工作表中的 id 和工作表 1 中的相应名称填充一个新工作表?是否会有时间表 2 上的 ID 不在表 1 上?
  • VLOOKUP 不会重复行。例如,如果 table1 中的两行“A”与 table2 中的三行“A”匹配,则内连接将产生六行,而 VLOOKUP 将产生两行。如果没有匹配项,VLOOKUP 将产生一行,而内部连接则产生无
  • @ScottCraner 是的,是的。在后者的情况下,它看起来像this

标签: sql excel inner-join vlookup


【解决方案1】:

您可以使用 Microsoft Query 获得此结果。

首先,选择Data > From other sources > From Microsoft Query

然后选择“Excel 文件*”。

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

接下来,在查询向导窗口中,选择 sheet1$ 和 sheet2$ 并单击“>”按钮。

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

单击 SQL 按钮并粘贴此查询:

SELECT `Sheet1$`.ID, `Sheet1$`.Name, `Sheet2$`.Age
FROM`Sheet1$`, `Sheet2$`
WHERE `Sheet1$`.ID = `Sheet2$`.ID

最后关闭编辑器,把表格放到你需要的地方。

结果应如下所示:

【讨论】:

  • 谢谢,但我的问题是我必须通过 Java 完成所有这些工作(使用 JDBC 和 Apache POI)。 Excel 自己会做的唯一一件事就是显示我的 Java 代码中的计算和逻辑结果。
  • 您可以将其放入模板工作簿中,然后在显示计算结果之前调用“全部更新”
  • 但是我的表格、列和条件是动态的。除非我每次运行程序时都可以在 Java 上手动创建模板工作簿。
【解决方案2】:

首先让我们获取两个表中都存在的值的列表。如果您使用的是 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 中匹配的值。

【讨论】:

  • 谢谢。复制行是什么意思?
  • @PuggyLongLegs 将公式向下拖动到任意位置。当它拖动时,它会向下复制公式并更改引用。
  • 我做了this,但是当我按下回车键时,什么也没发生。我有完全相同的 Sheet1 和 Sheet2。
  • 你用的是什么excel? @PuggyLongLegs
  • @PuggyLongLegs 查看编辑,原来的公式是 2010 年或以后的,我添加了 2007 年或更早的公式。
【解决方案3】:

对于没有公式或 Excel 宏的基本 Excel 连接。请检查网站 http://exceljoins.blogspot.com/2013/10/excel-inner-join.html

连接可以在极少数情况下使用左外、右外和全外,但我们可以为 Excel 表格实现此功能,有关更多信息,请查看以下内容 http://exceljoins.blogspot.com/

【讨论】:

  • 对于没有公式或 Excel 宏的基本 Excel 连接。请查看网站exceljoins.blogspot.com/2013/10/excel-inner-join.html连接可以在极少数情况下使用的Left Outer,Right Outer和Full Outer,但我们可以在Excel表格中实现这一点,有关更多信息,请查看以下exceljoins.blogspot.com
  • 请在此处自行发布答案的相关部分,因为链接可能会随着时间而改变。
猜你喜欢
  • 2016-04-23
  • 2012-01-13
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多