【问题标题】:Search row for array match of a specific word, and return the dates from column A that match搜索特定单词的数组匹配行,并返回 A 列中匹配的日期
【发布时间】:2021-05-22 00:15:25
【问题描述】:

目标:

  • 查找类 ID(忽略 ** 之后的任何内容),并在 (B2:B) 中返回相应的日期。
  • 然后查找Class Event,在(C2:C)中返回对应的日期。

我已经尝试过 HLookup、VLookup、Index & Match 和 Query 的组合,但似乎无法使其正常工作。

我的工作表:

Column |      A       |        B?       |          C?        |     D      |      E      |      F      |
Row1   | [Class ID's] | [Class ID Date] | [Class Event Date] |  [Dates]   |   [Name1]   |   [Name2]   |
Row2   |  Class ID1   |    01/02/2021   |     01/04/2021     | 01/01/2021 |             | Class ID3** |
Row3   |  Class ID2   |    01/08/2021   |     01/09/2021     | 01/02/2021 | Class ID1** |             |
Row4   |  Class ID3   |    01/01/2021   |     01/07/2021     | 01/03/2021 |             | Class ID4** |
Row5   |  Class ID4   |    01/03/2021   |     01/09/2021     | 01/04/2021 | Class Event |             |
Row6   |  Class ID5   | * Formula #1 *  |   * Formula #2 *   | 01/05/2021 |             |             |
Row7   |  Class ID6   |                 |                    | 01/06/2021 |             |             |
Row8   |  Class ID7   |                 |                    | 01/07/2021 |             | Class Event |
Row9   |  Class ID8   |                 |                    | 01/08/2021 | Class ID2** |             |
Row10  |  Class ID9   |                 |                    | 01/09/2021 | Class Event | Class Event |
Row11  |  Class ID10  |                 |                    | 01/10/2021 |             |             |

公式 #1(列:B)

  • 查找班级 ID,并将日期返回到以下范围:B2:B(有效,但效率不高)
    =IFERROR(INDEX($D$2:$D,MATCH($A2,E$2:E,0)),INDEX($D$2:$D,MATCH($A2,F$2:F,0)))
    ...依此类推,对于每一列(共有 60 列)。

公式 #2(列:C)

  • 查找班级ID,搜索列,找到“班级事件”的第一个实例,将日期返回到范围:C2:C
    ="I have absolutely no clue for this one"

这在 Google 表格中是否可行?
如果需要,我可以使用 excel(但最好不要因为这张表格从另一个 Google 表格中提取数据) p>

【问题讨论】:

  • 在此处获得帮助的最有效和最高效的方法是共享指向示例电子表格的链接,其中包含代表您的真实数据和设置的数据,确保将链接的共享权限设置为“任何人”带有链接...”和“编辑器”。图片或键入的数据允许我们查看部分数据和问题,但不允许我们对其进行处理、测试解决方案等(甚至开始需要我们手动将您的数据输入到我们的自己的工作表,这通常是不可行的)。如果您分享链接,请手动输入您希望查看的结果并附上说明。
  • 60 列什么?
  • @ErikTyler 很棒的提示!我很快就会这样做!
  • @player0 E:BN 列包含相同类型格式的数据(由其他人创建)。唯一的区别是类 ID 和类事件位于不同的行上。 - 我的目标是在 A:C 中编译来自 E:BN 的所有数据,而不是这样更容易阅读。
  • 如果您真的不想要 Excel 答案,则不包含该标签会更容易。 (再次)删除它。

标签: arrays google-sheets google-sheets-formula vlookup array-formulas


【解决方案1】:

C2:

=ARRAYFORMULA(IFNA(VLOOKUP(B2:B, {F2:F, E2:E; G2:G, E2:E}, 2, 0)))

D2:

就目前而言,您如何陈述数据集,没有什么可以将事件与特定 ID 配对 - 如果您有的话,这是可能的

Class ID4 Event

而不仅仅是

Class Event

更新 1:

60 列的 C2 将是:

=ARRAYFORMULA(IFNA(VLOOKUP(B2:B, 
 SPLIT(FLATTEN(IF(F2:BN="",,F2:BN&"×"&E2:E)), "×"), 2, 0)))

更新 2:

在 D2 中尝试(但只有在每个 id 类之后发生类事件时才会起作用)

=ARRAYFORMULA(IFNA(VLOOKUP(B2:B, {
 QUERY(SPLIT(FLATTEN(IF(TRANSPOSE(F2:BN)="",,
 TRANSPOSE(F2:BN)&"×"&TRANSPOSE(E2:E))), "×"), 
 "select Col1 where Col2 is not null", 0), {
 QUERY(QUERY(SPLIT(FLATTEN(IF(TRANSPOSE(F2:BN)="",,
 TRANSPOSE(F2:BN)&"×"&TRANSPOSE(E2:E))), "×"), 
 "select Col2 where Col2 is not null", 0), 
 "offset 1", 0); ""}}, 2, 0)))

【讨论】:

  • 天哪!你是个巫师!毫无疑问,这是搜索所有列的最简洁的公式!谢谢!
  • 至于D2,我完全同意。不幸的是,原始数据来自另一张我也只有查看权限的工作表。我不知道他们为什么使用这种可怕的格式化方法(E:BN)。这就是为什么我试图将其重新格式化为更易于阅读的内容 (A:C)。
  • @JamesReed68 for D2... 是否可以肯定地说在每个班级 ID 之后紧跟一个班级事件?
  • 95% 的时间可以肯定地说,在类 ID 之后,有一个类事件。我会很高兴即使有这种类型的准确性,并且仍然有 5% 的谜团......除非有某种方法可以将逻辑应用于这个未定义的变量。
  • 哇!非常令人印象深刻。这对 95% 的人来说是完美的。至于剩下的 5%,看看你的公式,它会拉下一个非 Null 单元格。有没有办法添加一个 if 条件,例如 =IF(x=(LEFT(x,5)="Class"),select Col2 where Col2 is not null),以便找到正确的日期?
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多