Google Sheets ArrayFormula returns 与每一行的指定条件匹配的列的索引
Google Sheets ArrayFormula that returns an index of the column that matched specified criteria for each row
我已经搜索了几个小时,我认为这是一个非常简单的问题,但没有任何运气。
我需要一个数组公式(需要在不复制公式的情况下计算范围),returns 对列的索引引用包含每行传递的条件的匹配项。我不需要返回的值,这是我看到的相关问题解决的目的,只需要列索引。我将使用返回的索引值从包含分配小时数等数据的绑定矩阵中提取数据。我尝试在 ArrayFormula 中使用 MATCH,它具有查找范围的动态索引,但它并没有像我预期的那样增加行。以下是第一列中显示所需结果的示例数据(从技术上讲,结果将在单独的工作表中返回,但出于说明目的包含在此处),受让人是在审阅者 1 - 3 中查找匹配列索引的标准。
+---------+----------+------------+------------+------------+
| Results | Assignee | Reviewer 1 | Reviewer 2 | Reviewer 3 |
+---------+----------+------------+------------+------------+
| 2 | Paul | Tim | Paul | Sue |
| 1 | Nick | Nick | Linda | Adam |
| 3 | Bill | Ryan | Paul | Bill |
| 2 | Tom | Paul | Tom | Sarah |
+---------+----------+------------+------------+------------+
我已经为此苦苦挣扎了一段时间,所以任何指导将不胜感激!
到目前为止,我能想到的最好的就是这个 SWITCH 语句。能用但不够优雅
=ArrayFormula(SWITCH(Current_Assignee, INDEX(Queue,,1), "1", INDEX(Queue,,2), "2", INDEX(Queue,,3), "3", INDEX(Queue,,4), "4", INDEX(Queue,,5), "5"))
试试这个:
=MMULT(ARRAYFORMULA(--('Table 2'!A3:D7) * --('Table 1'!A3:A7 = 'Table 1'!B3:E7)), SEQUENCE(COLUMNS('Table 1'!B3:E7), 1, 1, 0))
--('Table 2'!A3:D7)
- 在 table 2 中放置 0
s 而不是空格(MMULT
需要)。
--('Table 1'!A3:A7 = 'Table 1'!B3:E7)
- 在与当前评论者相对应的单元格中给出 table,在所有其他单元格中给出 0
s。
- 然后将这两个范围逐个单元格相乘。这给出了 table 在带有审阅者姓名的单元格中正确的时间,一行中的一个值。
MMULT
给出按行求和,这实际上是上一步中那些小时数的列。
如果您想要更大的 table,则只需相应地调整 Table 1'!A3:A7
、'Table 1'!B3:E7
和 Table 2'!A3:D7
。其余保持不变。
我已经搜索了几个小时,我认为这是一个非常简单的问题,但没有任何运气。
我需要一个数组公式(需要在不复制公式的情况下计算范围),returns 对列的索引引用包含每行传递的条件的匹配项。我不需要返回的值,这是我看到的相关问题解决的目的,只需要列索引。我将使用返回的索引值从包含分配小时数等数据的绑定矩阵中提取数据。我尝试在 ArrayFormula 中使用 MATCH,它具有查找范围的动态索引,但它并没有像我预期的那样增加行。以下是第一列中显示所需结果的示例数据(从技术上讲,结果将在单独的工作表中返回,但出于说明目的包含在此处),受让人是在审阅者 1 - 3 中查找匹配列索引的标准。
+---------+----------+------------+------------+------------+
| Results | Assignee | Reviewer 1 | Reviewer 2 | Reviewer 3 |
+---------+----------+------------+------------+------------+
| 2 | Paul | Tim | Paul | Sue |
| 1 | Nick | Nick | Linda | Adam |
| 3 | Bill | Ryan | Paul | Bill |
| 2 | Tom | Paul | Tom | Sarah |
+---------+----------+------------+------------+------------+
我已经为此苦苦挣扎了一段时间,所以任何指导将不胜感激!
到目前为止,我能想到的最好的就是这个 SWITCH 语句。能用但不够优雅
=ArrayFormula(SWITCH(Current_Assignee, INDEX(Queue,,1), "1", INDEX(Queue,,2), "2", INDEX(Queue,,3), "3", INDEX(Queue,,4), "4", INDEX(Queue,,5), "5"))
试试这个:
=MMULT(ARRAYFORMULA(--('Table 2'!A3:D7) * --('Table 1'!A3:A7 = 'Table 1'!B3:E7)), SEQUENCE(COLUMNS('Table 1'!B3:E7), 1, 1, 0))
--('Table 2'!A3:D7)
- 在 table 2 中放置0
s 而不是空格(MMULT
需要)。--('Table 1'!A3:A7 = 'Table 1'!B3:E7)
- 在与当前评论者相对应的单元格中给出 table,在所有其他单元格中给出0
s。- 然后将这两个范围逐个单元格相乘。这给出了 table 在带有审阅者姓名的单元格中正确的时间,一行中的一个值。
MMULT
给出按行求和,这实际上是上一步中那些小时数的列。
如果您想要更大的 table,则只需相应地调整 Table 1'!A3:A7
、'Table 1'!B3:E7
和 Table 2'!A3:D7
。其余保持不变。