Вы можете сделать:
=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), который необходимо перекрестно соединить с левой стороной byRange A1:B2. Это займет практически любое количество строк и столбцов с обеих сторон. Возможно, другой порядок переменных был бы более логичным, но я предположил, что логика предложения будет следующей: "реплицировать D1:F3 по 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) )

vba будет лучшим. Используйте два вложенных цикла, которые перебирают строки и создают выходные данные.