我在Excel中有两个区域。我正在寻找一种更简单的方法来将Range1的每一行与Range2的每一行组合。每个区域中的列数和行数可以更改。请参考下图它只能用宏来完成吗?还是有办法在普通或动态数组公式中完成?还是建议使用动态数组UDF
ccgok5k51#
您可以:
=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 )
其中,D1:F3是右侧数组(repliRange),您希望将其交叉联接到A1:B2的左侧byRange。它将在两侧采用几乎任意数量的行和列。也许变量顺序以另一种方式更符合逻辑,但我假设了语句逻辑 “replicate D1:F3 by A1:B2”。
非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) )
hc2pp10m2#
您可以尝试:
=INDEX( (A1:B2,D1:F3), LET(x,SEQUENCE(6),IF(SEQUENCE(1,5)<3,1+FLOOR((x-1)/3,1),1+MOD(x-1,3))), {1,2,1,2,3}, {1,1,2,2,2} )
LET行序列为
LET
它进行嵌套。然后重复column和area参数。
column
area
yqkkidmi3#
= 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维数组。
3条答案
按热度按时间ccgok5k51#
您可以:
其中,D1:F3是右侧数组(repliRange),您希望将其交叉联接到A1:B2的左侧byRange。它将在两侧采用几乎任意数量的行和列。也许变量顺序以另一种方式更符合逻辑,但我假设了语句逻辑 “replicate D1:F3 by A1:B2”。
非LET版本
hc2pp10m2#
您可以尝试:
LET
行序列为它进行嵌套。
然后重复
column
和area
参数。yqkkidmi3#
这个lambda版本可以处理一维和n维数组。