使用搜索提取多列

Extracting Multiple Columns with Search

我无法让 table 跨多列提取信息。目前我有两个 excel sheets:

第一个 excel sheet 是一个主日志,里面有一个巨大的 table 填满了超级 link 和我公司所有工程标准程序的名称.这是我从中提取信息的 table。

第二个excelsheet如下图。它的目的是在搜索栏中输入的任何单词 returns 中第一个 excel sheet 的任何部分结果。目前,我的 table 仅通过搜索一列并返回 hyperlink 表示的 esp 来运行。

Here是原来的link截图。感谢@Jvdv 的帮助。

我想要的是以下任何一种..

  1. 在搜索栏中输入关键字后。结果显示与该 ESP 关联的关键字以及 ESP 名称和 Hyperlink。

例如:如果我输入“销售”一词。我提取的第一列 table 将显示为 "Material Vendor Identification Chart",关键字列将包含 "materials sales",而 hyperlink 列将提供相应的 hyperlink。

  1. 在搜索栏中输入关键字后。该程序搜索 ESP 的关键字和名称,并且 returns 与 hyperlink.
  2. 部分匹配

以下解决方案使用 Power Query,它在 Excel 2010 和更高版本 中可用。我的是 Excel 2016.

为了解决您的问题,我使用了以下示例数据。它存储在一个名为 Tbl_ESP.

的 Table 中

请注意,我添加了一个名为 Hyperlinks 的新列,其中显示每个功能性 hyperlinks 后面的 link在 A 列中。目前没有 excel 公式可以自动执行此操作,因此您必须使用 VBA 或手动复制并粘贴 link 在新列中。此步骤的目的是让 hyperlinks 在搜索结果 Table.

中工作

在另一个工作表中,我创建了以下 Table,名为 Tbl_Search,您可以在其中输入关键字,它是 不区分大小写。在我的解决方案中,您只能使用“space”来分隔每个关键字(您可以更改设置以使用逗号或其他首选分隔符来分隔每个关键字)。

然后您可以使用 From Table 函数在 Data 选项卡中将两个 table 添加到Power Query 编辑器。您可以先添加一个,然后退出编辑器并使用相同的功能添加另一个。查看这篇文章了解其他方法:The Complete Guide to Installing Power Query

I started working with Tbl_Search first in the Power Query Editor with the following steps:

  1. 将文本字符串更改为 小写
  2. 将文本拆分 "space" 并将每个单词放在一个新行中;

  1. 向下填充在只有一个关键字的情况下覆盖空值的列;
  2. 将列转换为 列表

我已将此查询重命名为 搜索,稍后将用作搜索条件。

Then I started working on the Tbl_ESP in the following steps:

  1. 添加了一个名为 Combined 的自定义列 以将 DescriptionKeyWords 列中的字符串连接成一个带有 space介于两者之间;
  2. 将上一步的文本字符串转换为小写;
  3. 添加了另一个名为 Match 的自定义列,使用以下公式,旨在找出 Search 列表包含在上一步的文本字符串中,如果是 returns TRUE 否则 FALSE;

=List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1

  1. 过滤 Match 列只有 TRUE
  2. 删除除 DescriptionKeyWordsHyperlinks 之外的其他列
  3. 添加了一个索引列从1开始并将此列移动到table的开头,然后我有以下内容:

现在是时候关闭并加载上述table到您的搜索table所在的工作表。

最后一步是在上面table的末尾添加一列并输入以下公式:

=IF(ISBLANK(G4),LEFT(E4,6)&" Obsolete",HYPERLINK(G4,LEFT(E4,6)))

那么你应该有以下内容:

您可以选择隐藏 G 列 Hyperlinks 这样它只会显示嵌入了 hyperlink 的 ESP # 的名称。

每次在搜索单元格中输入一串新的关键词时,您需要转到数据选项卡以刷新数据,或按 Ctrl+Alt+F5 获取更新的搜索结果。

请注意,以上所有步骤均使用Power Query Editor 的内置函数,您可以google在线获取所有诀窍,但请随时有问题问我。

以下是幕后代码,仅供参考:

对于Tbl_Search

let
    Source = Excel.CurrentWorkbook(){[Name="Tbl_Search"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Search", type text}}),
    #"Lowercased Text" = Table.TransformColumns(#"Changed Type",{{"Search", Text.Lower, type text}}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Lowercased Text", {{"Search", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Search"),
    #"Filled Down" = Table.FillDown(#"Split Column by Delimiter",{"Search"}),
    Column1 = #"Filled Down"[Search]
in
    Column1

对于Tbl_ESP

let
    Source = Excel.CurrentWorkbook(){[Name="Tbl_ESP"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ESP #", type text}, {"Description", type text}, {"KeyWords", type text}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type", "Combined", each [Description]&" "&[KeyWords]),
    #"Lowercased Text" = Table.TransformColumns(#"Added Custom1",{{"Combined", Text.Lower, type text}}),
    #"Added Custom" = Table.AddColumn(#"Lowercased Text", "Match", each List.Count(Splitter.SplitTextByAnyDelimiter(Search)([Combined]))>1),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Match] = true)),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Description", "KeyWords", "Hyperlinks"}),
    #"Added Index" = Table.AddIndexColumn(#"Removed Other Columns", "Index", 1, 1),
    #"Renamed Columns" = Table.RenameColumns(#"Added Index",{{"Index", "#"}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"#", "Description", "KeyWords", "Hyperlinks"})
in
    #"Reordered Columns"