比较 2 个集合的属性
Comparing attributes from 2 sets
我有 2 组数据,比方说,Workers
和 Platform
。两者都有属性,例如 Drilling
、Grinding
、Hammering
。
我需要一种方法来比较 Excel 中两个集合中每个元素的属性。比如A平台需要锤钻,A工有钻磨锤,A平台就可以接受,B工只有钻,B平台就会被拒。
以下传播sheet清楚地说明了这一点:
https://docs.google.com/spreadsheets/d/1qvkZbDNIWe9gmFjGNr4dhtvqagJZOkS89YD4fzqjvQQ/edit?usp=sharing
在sheet中,"Canta Baila Pinta"是属性。到目前为止我提出的解决方案是:
为每个 Worker
和 Platform
生成一个字符串,等于其属性
如何比较两个字符串,就像问一样,"Does string B contain any element not present in B?"
此外,此代码不是动态的...您将如何使其自动处理任何新添加的属性,而无需用户干预?
删除所有公式并使用这些:
=ARRAYFORMULA(
IF(E2:E="Sí", E1, )&
IF(F2:F="Sí", F1, )&
IF(G2:G="Sí", G1, ))
=ARRAYFORMULA(SUBSTITUTE(QUERY(IF(INDIRECT("B2:"&ROW()-1)<>"",
INDIRECT("A2:A"&ROW()-1), ),,999^99), " ", ))
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A,
{Trabajadores!A:A, Trabajadores!H:H}, 2, 0)&" "&
HLOOKUP(B1:F1, {Plataformas!B1:1; INDIRECT("Plataformas!B"&
MATCH("Endstring", Plataformas!A:A, 0)&":"&
MATCH("Endstring", Plataformas!A:A, 0))}, 2, 0)))
更新:
=ARRAYFORMULA(IFERROR(REGEXMATCH(IFERROR(VLOOKUP(A2:A,
{Trabajadores!A:A, Trabajadores!H:H}, 2, 0)&SUBSTITUTE(COLUMN(B1:F1)^0, 1, )),
SUBSTITUTE(ROW(INDIRECT("A2:A"&COUNTA(A2:A)+1))^0, 1, )&
HLOOKUP(B1:F1, {Plataformas!B1:1; INDIRECT("Plataformas!B"&
MATCH("Endstring", Plataformas!A:A, 0)&":"&
MATCH("Endstring", Plataformas!A:A, 0))}, 2, 0))))
spreadsheet demo
这不是动态的,但这里有另一种可能感兴趣的方法:
=ArrayFormula(mmult(if(Trabajadores!E2:G6="Sí",1,0),if(Plataformas!B2:F4="Sí",1,0))=
mmult(transpose(row(Plataformas!B2:F4))^0,if(Plataformas!B2:F4="Sí",1,0)))
我们的想法是将 Trabajadores 和 Plataformas 矩阵相乘(将 Sí 转换为 1,将其他任何值转换为零)以计算每个 worker/platform 组合的技能对应数量。然后通过执行另一个 mmult 来计算 plataformas 矩阵中需求的列总数,最后比较结果以查看哪些工人具有每个平台所需的技能数量。
我有 2 组数据,比方说,Workers
和 Platform
。两者都有属性,例如 Drilling
、Grinding
、Hammering
。
我需要一种方法来比较 Excel 中两个集合中每个元素的属性。比如A平台需要锤钻,A工有钻磨锤,A平台就可以接受,B工只有钻,B平台就会被拒。
以下传播sheet清楚地说明了这一点:
https://docs.google.com/spreadsheets/d/1qvkZbDNIWe9gmFjGNr4dhtvqagJZOkS89YD4fzqjvQQ/edit?usp=sharing
在sheet中,"Canta Baila Pinta"是属性。到目前为止我提出的解决方案是:
为每个 Worker
和 Platform
生成一个字符串,等于其属性
如何比较两个字符串,就像问一样,"Does string B contain any element not present in B?"
此外,此代码不是动态的...您将如何使其自动处理任何新添加的属性,而无需用户干预?
删除所有公式并使用这些:
=ARRAYFORMULA(
IF(E2:E="Sí", E1, )&
IF(F2:F="Sí", F1, )&
IF(G2:G="Sí", G1, ))
=ARRAYFORMULA(SUBSTITUTE(QUERY(IF(INDIRECT("B2:"&ROW()-1)<>"",
INDIRECT("A2:A"&ROW()-1), ),,999^99), " ", ))
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A,
{Trabajadores!A:A, Trabajadores!H:H}, 2, 0)&" "&
HLOOKUP(B1:F1, {Plataformas!B1:1; INDIRECT("Plataformas!B"&
MATCH("Endstring", Plataformas!A:A, 0)&":"&
MATCH("Endstring", Plataformas!A:A, 0))}, 2, 0)))
更新:
=ARRAYFORMULA(IFERROR(REGEXMATCH(IFERROR(VLOOKUP(A2:A,
{Trabajadores!A:A, Trabajadores!H:H}, 2, 0)&SUBSTITUTE(COLUMN(B1:F1)^0, 1, )),
SUBSTITUTE(ROW(INDIRECT("A2:A"&COUNTA(A2:A)+1))^0, 1, )&
HLOOKUP(B1:F1, {Plataformas!B1:1; INDIRECT("Plataformas!B"&
MATCH("Endstring", Plataformas!A:A, 0)&":"&
MATCH("Endstring", Plataformas!A:A, 0))}, 2, 0))))
spreadsheet demo
这不是动态的,但这里有另一种可能感兴趣的方法:
=ArrayFormula(mmult(if(Trabajadores!E2:G6="Sí",1,0),if(Plataformas!B2:F4="Sí",1,0))=
mmult(transpose(row(Plataformas!B2:F4))^0,if(Plataformas!B2:F4="Sí",1,0)))
我们的想法是将 Trabajadores 和 Plataformas 矩阵相乘(将 Sí 转换为 1,将其他任何值转换为零)以计算每个 worker/platform 组合的技能对应数量。然后通过执行另一个 mmult 来计算 plataformas 矩阵中需求的列总数,最后比较结果以查看哪些工人具有每个平台所需的技能数量。