Table Header 的随机名称 table 通过 INDEX MATCH
Random of Table Header Name of another table via INDEX MATCH
我有这两个表:
在 B 列上,我正在尝试获取 Header 上 Table B 上非空特征的名称之一。我希望它被随机选择 。 Table A 中的项目顺序可能与 Table B 中的项目顺序不同,我也需要某种索引匹配。
Excel版本:Office 365
尝试的公式:我试图将我的公式基于此:
=INDEX(datarange,RANDBETWEEN(1,COLUMNS(datarange)),1)
但是还有更多的事情要考虑,比如header name 如果同一个水果的索引匹配不为空,所以我知道它更复杂。
任何帮助将不胜感激。
既然您可以访问动态数组,您可以尝试:
B2
中的公式:
=LET(X,FILTER(E:I,INDEX(E:I,MATCH(A2,D:D,0),0)<>"","No Feature"),INDEX(X,RANDBETWEEN(1,COUNTA(X))))
或没有LET()
:
=@SORT(SORT(CHOOSE({1;2;3},E:I,FILTER(E:I,D:D=A2),RANDARRAY(1,5)),3,1,1),2,-1,1)
如果您正在处理实际表格,这应该会自动将结果溢出到 Random Feature
下。但是,如果不使用表格,如果您是 365 内部人士,则可以将上述内容嵌套在 BYROW()
中:
=BYROW(A2:A6,LAMBDA(r,LET(X,FILTER(E:I,INDEX(E:I,MATCH(r,D:D,0),0)<>"","No Feature"),INDEX(X,RANDBETWEEN(1,COUNTA(X))))))
这不适用于我们使用“@”仅解析数组左上角值(隐式交集)的第二个选项。
想法是:
INDEX()
和 MATCH()
的组合将 'slice' 根据我们的输入从 lookup-table 中感兴趣的行。
- 在第 2 步中,我们将使用
FILTER()
仅保留那些 headers,其中 returned 数组中的元素不是 empty。在所有元素都为空的情况下,此函数将 return 值“No Feature”作为用户提示。
- 在我们的最后一步中,我们将
INDEX()
与 RANDBETWEEN()
结合起来。后者将 return LBound(在我们的例子中为 1)和 Ubound 之间的随机整数,我们基于 returned 元素的数量。
我试着在下面想象一下。
假设您有 Excel 365 并且可以接受不稳定的结果:
=LET(
Fruits, Table_B[Fruit],
Properties, Table_B[[Red]:[Green]],
PropertiesHeaders, Table_B[[#Headers],[Red]:[Green]],
ThisFruit, [@Fruits],
ThisProperties, FILTER(Properties, Fruits = ThisFruit),
ThisPropertiesFiltered, FILTER(PropertiesHeaders, ThisProperties <> 0),
ThisPropertiesCount, COUNTA(ThisPropertiesFiltered),
IndexRand, RANDBETWEEN(1,ThisPropertiesCount),
IFERROR(INDEX(ThisPropertiesFiltered,IndexRand),"-")
)
ThisProperties
是 Table_B
中水果的行。我省略了水果名称栏。
ThisPropertiesFiltered
是水果所具有的属性的名称。我根据水果行是否具有 non-zero 值过滤了 header 名称。
IndexRand
获取一个介于 1 和可用属性数之间的随机数。注意,如果可用属性为零,ThisPropertiesFiltered
returns #CALC!
所以 ThisPropertiesCount
将 return 1。稍后处理。
最后我们使用 INDEX
得到随机的 属性 名字。 IFERROR
returns "-" 如果没有可用的属性。
这是表格:
Table_A:
Fruits
Result
Watermelon
Heavy
Melon
Green
Banana
Tropic
Peach
Red
Apple
Green
Table_B:
Fruit
Red
Yellow
Tropic
Heavy
Green
Apple
x
x
Banana
x
x
Peach
x
Melon
x
Watermelon
x
x
我有这两个表:
在 B 列上,我正在尝试获取 Header 上 Table B 上非空特征的名称之一。我希望它被随机选择 。 Table A 中的项目顺序可能与 Table B 中的项目顺序不同,我也需要某种索引匹配。
Excel版本:Office 365
尝试的公式:我试图将我的公式基于此:
=INDEX(datarange,RANDBETWEEN(1,COLUMNS(datarange)),1)
但是还有更多的事情要考虑,比如header name 如果同一个水果的索引匹配不为空,所以我知道它更复杂。
任何帮助将不胜感激。
既然您可以访问动态数组,您可以尝试:
B2
中的公式:
=LET(X,FILTER(E:I,INDEX(E:I,MATCH(A2,D:D,0),0)<>"","No Feature"),INDEX(X,RANDBETWEEN(1,COUNTA(X))))
或没有LET()
:
=@SORT(SORT(CHOOSE({1;2;3},E:I,FILTER(E:I,D:D=A2),RANDARRAY(1,5)),3,1,1),2,-1,1)
如果您正在处理实际表格,这应该会自动将结果溢出到 Random Feature
下。但是,如果不使用表格,如果您是 365 内部人士,则可以将上述内容嵌套在 BYROW()
中:
=BYROW(A2:A6,LAMBDA(r,LET(X,FILTER(E:I,INDEX(E:I,MATCH(r,D:D,0),0)<>"","No Feature"),INDEX(X,RANDBETWEEN(1,COUNTA(X))))))
这不适用于我们使用“@”仅解析数组左上角值(隐式交集)的第二个选项。
想法是:
INDEX()
和MATCH()
的组合将 'slice' 根据我们的输入从 lookup-table 中感兴趣的行。- 在第 2 步中,我们将使用
FILTER()
仅保留那些 headers,其中 returned 数组中的元素不是 empty。在所有元素都为空的情况下,此函数将 return 值“No Feature”作为用户提示。 - 在我们的最后一步中,我们将
INDEX()
与RANDBETWEEN()
结合起来。后者将 return LBound(在我们的例子中为 1)和 Ubound 之间的随机整数,我们基于 returned 元素的数量。
我试着在下面想象一下。
假设您有 Excel 365 并且可以接受不稳定的结果:
=LET(
Fruits, Table_B[Fruit],
Properties, Table_B[[Red]:[Green]],
PropertiesHeaders, Table_B[[#Headers],[Red]:[Green]],
ThisFruit, [@Fruits],
ThisProperties, FILTER(Properties, Fruits = ThisFruit),
ThisPropertiesFiltered, FILTER(PropertiesHeaders, ThisProperties <> 0),
ThisPropertiesCount, COUNTA(ThisPropertiesFiltered),
IndexRand, RANDBETWEEN(1,ThisPropertiesCount),
IFERROR(INDEX(ThisPropertiesFiltered,IndexRand),"-")
)
ThisProperties
是 Table_B
中水果的行。我省略了水果名称栏。
ThisPropertiesFiltered
是水果所具有的属性的名称。我根据水果行是否具有 non-zero 值过滤了 header 名称。
IndexRand
获取一个介于 1 和可用属性数之间的随机数。注意,如果可用属性为零,ThisPropertiesFiltered
returns #CALC!
所以 ThisPropertiesCount
将 return 1。稍后处理。
最后我们使用 INDEX
得到随机的 属性 名字。 IFERROR
returns "-" 如果没有可用的属性。
这是表格:
Table_A:
Fruits | Result |
---|---|
Watermelon | Heavy |
Melon | Green |
Banana | Tropic |
Peach | Red |
Apple | Green |
Table_B:
Fruit | Red | Yellow | Tropic | Heavy | Green |
---|---|---|---|---|---|
Apple | x | x | |||
Banana | x | x | |||
Peach | x | ||||
Melon | x | ||||
Watermelon | x | x |