BLUE 組可以與 BLUE 組的其他成員或 RED 組的成員配對
BUT Group RED 只能與 BLUE 組的成員配對
| 藍色的 | 紅色的 |
|---|---|
| 尼克 | 史蒂夫 |
| 拍 | 亞歷克斯 |
尼克和史蒂夫
尼克和亞歷克斯
尼克和帕特
帕特和史蒂夫
帕特和亞歷克斯
這是 5 對乘員組(Nik/Pat 與 Pat/Nik 相同,因此應該只計算一次)。我將如何撰寫公式以允許我通過繼續向兩個組添加成員來繼續構建?我試過 =Blue((blue-1)red) ,它不能產生準確的總數。
uj5u.com熱心網友回復:
另一個 Excel 選項:
=LET(β,A2:A5,ρ,B2:B5,ζ,ROWS(β),FILTERXML("<a><b>"&TEXTJOIN("</b><b>",,β&" and "&TRANSPOSE(ρ),IF(SEQUENCE(ζ)<SEQUENCE(,ζ),β&" and "&TRANSPOSE(β),""))&"</b></a>","//b"))
uj5u.com熱心網友回復:
這聽起來更適合 SQL 解決方案,因此我將在 Excel 中將您的藍色表和紅色表描述為 POWERQUERY,然后構建如下查詢:
Select b1.name as PairFirstPart, b2.name as PairSecondPart
From TableBlue b1 Inner Join TableBlue b2 ON
b1.name<b2.name
UNION ALL
Select b.name, r.name
From TableBlue b Inner Join TableRed r
現在,您可以將元素添加到兩個表中,然后重新運行查詢以獲取更新的結果。
uj5u.com熱心網友回復:
我同意你的問題可以很容易地用 Power Query 解決,但是如果你想要一個公式,使用Office 365,你可以這樣做:
=LET( pilots, A2:B6,
genPerms, LAMBDA(matrix,
LET( A, matrix, B,ROWS(A),
C,COLUMNS(A), D,IF(A="", NA(),A),
E,MAKEARRAY(B,C,LAMBDA(rw,cl,INDEX(SORT(INDEX(D,0,cl)),rw))),
F,BYCOL(E,LAMBDA(cl,COUNTA(FILTER(cl,NOT(ISERROR(cl)))))),
G,MAKEARRAY(PRODUCT(F),C,LAMBDA(rw,cl,INDEX(E,MOD(CEILING(rw/IFERROR(PRODUCT(INDEX(F,SEQUENCE(C-cl,,cl 1))),1),1)-1,INDEX(F,cl)) 1,cl))),
UNIQUE(G)) ),
vs, LAMBDA(array1,array2,
LET( rows1, ROWS( array1 ), rows2, ROWS( array2 ),
columns1, COLUMNS( array1 ), columns2, COLUMNS( array2 ),
rSeq, SEQUENCE( rows1 rows2 ),
cSeq, SEQUENCE(, MAX( columns1, columns2 ) ),
IF( ISOMITTED(array1),
array2,
IF( ISOMITTED(array2),
array1,
IF( rSeq <= rows1,
INDEX( IF( array1 = "", "", array1), rSeq, cSeq ),
INDEX( IF( array2 = "", "", array2), rSeq-rows1, cSeq ) ) ) ) ) ),
bluePilots, genPerms( CHOOSE( {1,2}, IF( ISBLANK(INDEX( pilots,,1)),"",INDEX( pilots,,1)),IF( ISBLANK(INDEX( pilots,,1)),"",INDEX( pilots,,1)) ) ),
vs( genPerms(pilots), FILTER( bluePilots, INDEX( bluePilots,,1) < INDEX( bluePilots,,2) ) ) )
其中A2:B6是藍色和紅色上的飛行員陣列。這真的很重,但這是因為我只是將已經構建和測驗的公式組合在一起,這些公式會
Office 內部人員方法
如果您是 Office Insiders 計劃的一員,您可以使用 HSTACK 和 VSTACK,這將從根本上減少此公式的臃腫:
=LET( pilots, A2:B6,
genPerms, LAMBDA(matrix,
LET( A, matrix, B,ROWS(A),
C,COLUMNS(A), D,IF(A="", NA(),A),
E,MAKEARRAY(B,C,LAMBDA(rw,cl,INDEX(SORT(INDEX(D,0,cl)),rw))),
F,BYCOL(E,LAMBDA(cl,COUNTA(FILTER(cl,NOT(ISERROR(cl)))))),
G,MAKEARRAY(PRODUCT(F),C,LAMBDA(rw,cl,INDEX(E,MOD(CEILING(rw/IFERROR(PRODUCT(INDEX(F,SEQUENCE(C-cl,,cl 1))),1),1)-1,INDEX(F,cl)) 1,cl))),
UNIQUE(G)) ),
bluePilots, genPerms( HSTACK(INDEX( pilots,,1),INDEX( pilots,,1)) ),
VSTACK( genPerms(pilots), FILTER( bluePilots, INDEX( bluePilots,,1) < INDEX( bluePilots,,2) ) ) )
uj5u.com熱心網友回復:
我想知道您是否可以直接在 Excel 中實作@Chris Maurer 的答案。
是的,您基本上可以按照
和

然后 SQL 看起來像這樣:
SELECT t1.Person , t2.Person
FROM `C:\Users\myID\OneDrive\Documents\Excel\Source.xlsx`.`Blue$` t1,
`C:\Users\myID\OneDrive\Documents\Excel\Source.xlsx`.`Red$` t2
union all
SELECT t1.Person, t2.Person
FROM `C:\Users\myID\OneDrive\Documents\Excel\Source.xlsx`.`Blue$` t1
inner join
`C:\Users\myID\OneDrive\Documents\Excel\Source.xlsx`.`Blue$` t2
on t1.person<t2.person
導致

也可以看看
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489360.html
標籤:擅长 excel公式 调度器 daypilot 调度程序
