我想使用第二个列表来筛选第一个。此外,我希望结果包含主工作表中的其他字段以及第二个工作表中的地址字段。我知道如何通过数据库内部联接很容易地做到这一点,但是我不清楚如何在Excel中有效地做到这一点。如何在Excel中联接两个工作表?奖励点还显示了如何进行外部联接,我非常希望知道如何在不使用宏的情况下进行联接。
#1 楼
对于2007+,请使用Data
> From Other Sources
> From Microsoft Query
:选择
Excel File
并选择您的第一个excel 选择列(如果看不到任何列列表,请确保检查
Options
> System Tables
)转到
Data
> Connections
> [选择刚刚创建的连接]> Properties
> Definition
> Command text
您现在可以将此
Command text
作为SQL进行编辑。不知道支持什么语法,但是我尝试了隐式联接,“内部联接”,“左联接”和所有有效的联合。这是一个示例查询:SELECT *
FROM `C:\Users\Peter\Documents\Excel-to-excel\Source_1.xlsx`.`Sheet1$` a
LEFT JOIN `C:\Users\Peter\Documents\Excel-to-excel\Source_2.xlsx`.`Sheet1$` b
ON a.col2 = b.col2
评论
有没有办法避免对路径进行硬编码?相对路径会起作用吗?
–雷金
2012年11月14日12:57
作为一项额外的好处,Microsoft Query使您可以体验用于打开Excel文件和消息框的16位样式的通用控件。这样,您就可以记得小时候。 :-)
–爱德华·布雷(Edward Brey)
2012年12月8日,下午5:10
这对CSV文件有效吗?我使用的是MS Office Professional Plus 2010,看不到如何执行步骤3-我是否将步骤2中的对话框挂起?我的“连接”对话框中没有“选择新连接”。
–约翰·弗里曼(John Freeman)
2014年8月20日在18:01
@JohnFreeman,因为您必须根据自己的需要选择一个可用选项(例如“添加...”)
–年
2014年8月21日在10:32
请注意,您可能会看到一个对话框,显示“此数据源不包含可见表”,然后是“查询向导-选择列”对话框。您要在此对话框中单击“选项”按钮,然后选中“系统表”复选框以查看要查询的数据。
– Tola Odejayi
16-10-14在17:26
#2 楼
支持接受的答案。我只想强调“选择列(如果您没有看到任何列列表,请确保检查选项>系统表)”一旦选择了excel文件,您很有可能会选择请参阅
this data source contains no visible tables
提示,并且可用的选项卡和列都不是。 Microsoft承认这是一个错误,Excel文件中的选项卡被视为“系统表”,并且默认情况下未选择“系统表”选项。因此,不要在此步骤中惊慌,您只需单击“选项”并选中“系统表”,然后您就会看到可用的列。#3 楼
VLOOKUP和HLOOKUP可用于搜索匹配的主键(垂直或水平存储)并从“属性”列/行中返回值。评论
对于同一工作簿上的工作表非常有用(但是我发现INDEX + MATCH函数更有用),从封闭的外部工作簿更新数据时稍微复杂一点...
–年
2012年5月7日9:51
#4 楼
您可以使用Microsoft Power Query(适用于Excel的较新版本)(类似于已接受的答案,但更加简单)。 Power Query调用会加入“合并”。最简单的方法是将2个Excel工作表作为Excel表。然后在Excel中,转到Power Query功能区选项卡,然后单击“来自Excel”按钮。将两个表都导入Power Query后,选择一个表并单击“合并”。
评论
比任何其他建议的选项都容易得多。这应该是答案! Power Query现在包含在Excel 2016的``数据''选项卡下。
– SliverNinja-MSFT
17年6月14日在5:03
Mac上似乎不存在的另一个功能😕
– juandesant
17年11月7日在19:29
#5 楼
虽然我认为Aprillion使用Microsoft Query的答案非常好,但它启发了我使用Microsoft Access来加入数据表,而我发现这容易得多。您当然需要安装MS Access。
步骤:
创建一个新的Access数据库(或使用临时数据库)。
使用
Get External Data
将Excel数据作为新表导入。使用
Relationships
显示如何联接表。设置关系类型以匹配您想要的关系类型(表示左联接等)。
创建一个新查询来联接表。
使用
External Data->Export to Excel
来联接表产生您的结果。没有Aprillion的出色回答,我真的做不到。
评论
今天以前我从未使用过访问权限,但这只花了我10分钟。我将excel列复制/粘贴到2个表中,而不是导入。
– Jiggunjer
19年8月19日在9:41
#6 楼
您不能在Excel内部对Excel表执行SQL样式联接。也就是说,有多种方法可以完成您要完成的工作。在Excel中,就像Reuben所说的那样,可能最有效的公式是
VLOOKUP
和HLOOKUP
。在这两种情况下,您都在唯一的行上进行匹配,并且它会将给定列的行\行从找到的ID返回到左\下。 如果只想在第二个列表中添加几个额外的字段,则将公式添加到第二个列表中。如果要使用“外部联接”样式表,则将
VLOOKUP
公式添加到带有ISNA
的第一个列表中,以测试是否找到了查找。如果Excel的“帮助”没有为您提供有关如何在特定实例中使用这些细节的足够详细信息,请告诉我们。如果您喜欢使用SQL,则将数据链接到数据库程序中,创建查询,然后将结果导出回Excel。 (在Access中,您可以将Excel工作表或命名范围导入为链接表。)
评论
实际上,您可以-称为Microsoft Query
–年
2012年5月7日,9:31
#7 楼
在XLTools.net上,我们为MS Query创建了一个很好的替代方案,特别是可以与针对Excel表的SQL查询配合使用。它称为XLTools SQL查询。它比MS Query使用起来容易得多,并且如果您只需要创建和运行SQL,就可以很好地工作-无需VBA,无需使用MS Query进行复杂的操作...使用此工具,您可以使用嵌入式SQL编辑器针对Excel工作簿中的表创建任何SQL查询,并立即运行它,并带有将结果放置在新工作表或任何现有工作表上的选项。
您可以使用几乎所有类型的联接,包括LEFT OUTER JOIN(仅不支持RIGHT OUTER JOIN和FULL OUTER JOIN)。
以下是示例:
#8 楼
对于Excel 2007用户:数据>来自其他来源>来自Microsoft Query>浏览到Excel文件
根据本文,从XLS 2003版进行查询可能会导致“此数据源包含没有可见的表格。”错误,因为您的工作表被视为SYSTEM表。因此,在创建查询时,请检查“查询向导-选择列”对话框中的“系统表”选项。该方法可以正常使用。
定义联接:
Microsoft Query对话框> Table菜单>联接...
要将数据返回到原始Excel工作表,请从“ Microsoft查询”对话框>“文件”菜单中选择“将数据返回到Excel工作表”。
#9 楼
如果您对数据库足够熟悉,则可以使用SQL Server将两个工作表连接为链接服务器,然后使用T-SQL进行后端数据工作。然后,通过将Excel重新连接到SQL并将数据拉入表(常规表或数据透视表)来完成。您也可以考虑使用Powerpivot。它将允许任何数据库源之间的联接,包括用作平面数据库的Excel。评论
没错,但是最初的问题是基于使用电子表格(或两个)来执行数据库功能,因此我不确定是否有任何真正有效的方式来完成任务。
–dav
2012年5月7日,11:54
评论
我发现以下页面非常有用:randomwok.com/excel/how-to-use-index-matchrandomwok.com/excel/how-to-use-index-match =>特别是最后的简单“提醒”:= INDEX(Column_I_want_a_return_value_from,(MATCH(My_Lookup_Value,Column_I_want_to_Lookup_against,0))
一个小小的Python可以和pd一样导入熊猫。 file1 = pd.read_csv(“ in_1.csv”,sep =“,”); #或者read_excel()file2 = pd.read_csv(“ in_2.csv”,sep =“;”);合并= file1.merge(file2,left_on ='ID',right_on ='OTHER_ID',how ='outer'); merged.to_excel(“ out.xlsx”);