我在 excel 中有两个范围。我正在寻找一种更简单的方法来将 Range1 的每一行与 Range2 的每一行组合起来。每个范围中的列数和行数可以更改。参考下图
只能用宏来完成还是有办法在普通或动态数组公式中完成。
或者你建议动态数组UDF
你可以这样做:
=LET( repliRange, D1:F3,
byRange, A1:B2,
rpR, ROWS( repliRange ),
rpC, COLUMNS( repliRange ),
byC, COLUMNS( byRange ),
rIdx, SEQUENCE( rpR * ROWS( byRange ),,0 ),
cIdx, SEQUENCE( 1, rpC + byC, 0 ),
mux, INDEX( repliRange, MOD( rIdx, rpR ) + 1, SEQUENCE( 1, rpC, 0 )+1 ),
noVBA, IF( cIdx < byC, INDEX( byRange, rIdx/rpR+1, cIdx + 1),
INDEX( mux, MOD(rIdx,rpC)+1, cIdx-1) ),
noVBA )
需要 Excel 365。
D1:F3 是右侧数组 (repliRange),您希望将其交叉连接到 A1:B2 的左侧byRange。两边几乎可以有任意数量的行和列。也许变量顺序会以另一种方式更合乎逻辑,但我假设了一个句子逻辑“通过A1:B2复制D1:F3”。
非LET版本
=IF( SEQUENCE( 1, COLUMNS( D1:F3 ) + COLUMNS( A1:B2 ), 0 ) < COLUMNS( A1:B2 ),
INDEX( A1:B2,
SEQUENCE( ROWS( D1:F3 ) * ROWS( A1:B2 ),,0 )/ROWS( D1:F3 )+1,
SEQUENCE( 1, COLUMNS( D1:F3 ) + COLUMNS( A1:B2 ), 0 ) + 1),
INDEX( INDEX( D1:F3,
MOD( SEQUENCE( ROWS( D1:F3 ) * ROWS( A1:B2 ),,0 ), ROWS( D1:F3 ) ) + 1,
SEQUENCE( 1, COLUMNS( D1:F3 ), 0 )+1 ),
MOD(SEQUENCE( ROWS( D1:F3 ) * ROWS( A1:B2 ),,0 ),COLUMNS( D1:F3 ))+1,
SEQUENCE( 1, COLUMNS( D1:F3 ) + COLUMNS( A1:B2 ), 0 )-1) )
= LAMBDA(RangeFrom, RangeTo,
LET(repliRange, RangeTo, byRange, RangeFrom,
rpR, ROWS(repliRange),
rpC, COLUMNS(repliRange),
byC, COLUMNS(byRange),
rIdx, SEQUENCE(rpR * ROWS(byRange), , 0),
cIdx, SEQUENCE(1, rpC + byC, 0),
To, INDEX(repliRange, MOD(rIdx, rpR) + 1, SEQUENCE(1, rpC, 0) + 1), From, TAKE(INDEX(byRange, rIdx / rpR + 1, cIdx + 1), , byC),
HSTACK(From, To)))
此 lambda 版本适用于一维和 n 维数组。