Excel中的交叉联接

wpx232ag  于 2022-12-14  发布在  其他
关注(0)|答案(3)|浏览(200)

我在Excel中有两个区域。我正在寻找一种更简单的方法来将Range1的每一行与Range2的每一行组合。每个区域中的列数和行数可以更改。请参考下图
它只能用宏来完成吗?还是有办法在普通或动态数组公式中完成?
还是建议使用动态数组UDF

ccgok5k5

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 )
  • 需要Excel 365。*

其中,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) )

hc2pp10m

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行序列为

它进行嵌套。
然后重复columnarea参数。

yqkkidmi

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维数组。

相关问题