【问题标题】:Grab information from multiple cells and display it in one cell based on specific text match从多个单元格中获取信息并根据特定的文本匹配将其显示在一个单元格中
【发布时间】:2021-09-26 05:00:33
【问题描述】:

我已经束手无策了。我什至应该选择什么公式?我可以在 Google 表格中实现我想要做的事情吗?

我附上了一张我正在尝试做的模型的图片。

基本上我有 2 张桌子。让我们称它们为“日历” - 表 A 和“时间表”表 B。

表 A - 我手动标记了一个事件及其后面的一个或多个名称。

表 B - 是我要为其创建公式的表。在图片中,绿色是公式位应该在的位置。基本上试图搜索表 A 并将日期(7 月 19 日)与名称(玛丽)匹配

因此,在文本中,公式与表 A 的 7 月 19 日信息和每个单元格与 Mary 匹配,并将其显示在表 B 中,在字段 Mary 和 7 月 19 日显示表 A 对他的影响。

如果我可以简单地修剪最终结果并删除其他名称,那就太棒了,所以如果有“玛丽和理查德”,它就会知道从字段中删除这些名称。

所以基本上在表A中显示每个带有“玛丽”的单元格,并在表B中的一个单元格下显示它。

【问题讨论】:

  • 分享您的工作表副本
  • 公式将非常复杂,并且需要辅助列。 VBA 将是要走的路;将表 A 中的每个单元格解析为用户、任务和日期;然后创建(或添加到)您的结果表。

标签: excel google-sheets lookup-tables


【解决方案1】:

这是一个带有帮助表的选项。

假设您的数据位于名为Data 的工作表上,范围为Data!A1:AB21

创建一个名为 Formula 的帮助表:

Cell B2 从数据表中获取标题:

={Data!A1:AB1}

单元格A2:A5 具有固定名称,Mark、John、Richard、Tom。

此公式适用于B2:AC5 范围内的每个单元格(向下拖动):

=arrayformula(iferror(textjoin(",",1,trim(regexreplace(filter(Data!A:A,regexmatch(Data!A:A,$A2)),textjoin("|",1,$A$2:$A$5),))),))

名为“结果”的最终工作表在单元格 A1 中有此内容:

=transpose(Formula!A:AC)

它不像在Formula 工作表上的单个单元格中包含一个数组公式那样优雅,但是一旦您设置了数据范围并将公式向下拖动,它就可以工作。

【讨论】:

    【解决方案2】:

    您可以使用 Power Query 获取结果,前提是:

    • 有一种可重现的方法来获取 名称
      • 在您的示例中,每个名称都是一个单词,并且它们都一起出现在活动子字符串的末尾
      • 多名词将需要不同的算法来提取。

    使用 Power Query (在 Windows Excel 2010+ 和 Office 365 中可用)

    • 选择数据表中的某个单元格
    • Data => Get&Transform => from Table/Range
    • 当 PQ 编辑器打开时:Home => Advanced Editor
    • 记下第 2 行中的表 Name
    • 粘贴下面的 M 代码代替您看到的内容
    • 将第 2 行中的表名称更改回最初生成的名称。
    • 阅读 cmets 并探索 Applied Steps 以了解算法

    M 码

    let
        Source = Excel.CurrentWorkbook(){[Name="TableA"]}[Content],
    
    //need to hard code list of names
        names = {"Mary","John","Richard","Tom"},
    
    //Type all as text
        #"Changed Type" = Table.TransformColumnTypes(Source,
            List.Transform(Table.ColumnNames(Source), each {_, Text.Type})),
    
    //Unpivot to => a two column list
        #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {}, "Dates", "Value"),
    
    //Extract the names
        #"Added Custom" = Table.AddColumn(#"Unpivoted Columns", "Names", each List.Intersect({Text.Split([Value]," "),names})),
    
    //Extract the Activities
        #"Added Custom1" = Table.AddColumn(#"Added Custom", "Activity", each Text.Start([Value],Text.PositionOf([Value],[Names]{0})-1)),
    
    //Remove unneeded column
        #"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"Value"}),
    
    //Expand the names to => single row for each name/date
        #"Expanded Names" = Table.ExpandListColumn(#"Removed Columns", "Names"),
    
    //Group by Date and Name
    // Aggregate the activites
        grouped = Table.Group(#"Expanded Names",{"Dates","Names"},{
            {"Activities", each Text.Combine([Activity],", "), type text}
        }),
        #"Pivoted Column" = Table.Pivot(grouped, List.Distinct(grouped[Names]), "Names", "Activities"),
    
    //reArrange columns to desired order
        #"Reordered Columns" = Table.ReorderColumns(#"Pivoted Column",List.Combine({{"Dates"}, names}))
    
    in
        #"Reordered Columns"
    

    A表

    表 B

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      相关资源
      最近更新 更多