rum*_*cho 37 worksheet-function microsoft-excel
假设我在 Excel 中有一些数据(而不是在真正的数据库中)。在一张工作表中,我有数据,其中一列用作 ID,并且我已确保此列中的值是唯一的。在另一张表中,我也有一些数据,同样有一列可以作为ID,而且它也是唯一的。如果工作表 1 中的行 N 具有某个值,并且工作表 2 中的行 M 具有相同的值,则我确信第 N 行和第 M 行描述了相同的现实世界对象。
我要问的是:如何在不编写任何宏的情况下获得等效的完整外部联接?通过功能区访问的公式和所有功能都可以。
一个小的“播放数据”示例:
第 1 页:
Dostoyevski Russia
Pushkin Russia
Shelley England
Flaubert France
Hugo France
Eichendorff Germany
Byron England
Zola France
Run Code Online (Sandbox Code Playgroud)
第 2 页:
Shelley Percy Bysshe
Eichendorff Josef Freiherr Von
Flaubert Gustave
Byron Lord
Keller Gottfried
Dostoyevski Fyodor
Zola Emile
Balzac Honoré de
Run Code Online (Sandbox Code Playgroud)
所需的输出(排序并不重要):
Dostoyevski Russia Fyodor
Pushkin Russia
Shelley England Percy Bysshe
Flaubert France Gustave
Hugo France
Eichendorff Germany Josef Freiherr von
Byron England Lord
Zola France Emile
Keller Gottfried
Balzac Honoré de
Run Code Online (Sandbox Code Playgroud)
致所有被这种情况吓坏的人:我知道这是错误的做法。如果我有什么选择,我会不会使用Excel这一点。但是,有足够多的情况需要实用的解决方案,但无法应用更好的(从 IT 角度来看)解决方案。
end*_*and 46
首先,将两个表中的两个关键列作为单个列复制/粘贴到单个新工作表中。
使用“删除重复项”获取所有唯一键的单个列表。
然后,添加两列(在本例中),每个表中的每个数据列对应一列。我建议您也使用格式作为表格选项,因为它使您的公式看起来更好。使用 vlookup,使用以下公式:
=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")
Run Code Online (Sandbox Code Playgroud)
哪里Sheet4!A:B代表每个相应值的源表数据表。IFERROR 可防止在 vlookup 不成功时出现的丑陋 #N/A 结果,在这种情况下返回一个空白单元格。
这为您提供了结果表。
表 3:
表 4:
结果数据:
结果公式(Ctrl+~将切换):
您也可以使用内置的 SQL 查询执行此操作。它......不太用户友好,但也许会是一个更好的用例。这可能需要您将“源”数据格式化为表格。
“创建一个减法连接,然后将其添加为联合”部分更复杂。
返回到您创建的第一个外部联接。手动编辑 SQL 和
Union到底部不适合胆小的人。但是,如果您想有机会看到 Office 中一些尚未更新但可能还活着的部分,那么这是一个很好的机会。
Kyl*_*ale 18
作为替代解决方案,我可以建议Power Query吗?它是来自 Microsoft 的免费 Excel 插件,用于基本上执行此类操作。它的功能实际上也将直接包含在 Excel 2016 中,因此它是面向未来的。
无论如何,使用 Power Query,步骤非常简单:
这样做的好处是一旦你设置了它,如果你对你的基本数据表进行了更改,你只需点击数据 > 全部刷新,你的 Power Query 结果表也会更新。