Excel 创建包含所有组合的表格

Excel 创建包含所有组合的表格

假设我有 3 列带标签

  1. A B C D
  2. ABCDE
  3. 1 2 3 4 5 6 7 8 9 10

有没有一种快速简便的方法来创建一个包含所有排列的空表?即

  • 一 - 一 - 1
  • A - a - 2
  • ....
  • D - e - 10

答案1

运行这个简短的宏:

Sub marine()
    Dim i As Long, j As Long, k As Long, N As Long

    N = 1
    For i = 1 To 4
        For j = 1 To 5
            For k = 1 To 10
                Cells(N, 4) = Cells(i, 1) & "-" & Cells(j, 2) & "-" & Cells(k, 3)
                N = N + 1
            Next k
        Next j
    Next i
End Sub

将产生一列所需的 200 个组合:

在此处输入图片描述

答案2

编辑:

使用 Office 365,我们可以使其更具弹性:

=LET(
    rng,A1:C10,
    rw,ROWS(rng),
    clm,COLUMNS(rng),
    arr,MAKEARRAY(rw^clm,clm,LAMBDA(a,b,INDEX(rng,INT(MOD(a, rw ^ b) / (rw^ b / rw))+1,b)&"")),
    end,FILTER(arr,MMULT(--(arr=""),SEQUENCE(clm,,1,0))=0),
    SORT(IF(ISNUMBER(--end),--end,end),SEQUENCE(,clm)))

只要#ofRows^#ofColumns不超过工作表上的行数,这将采用任意大小的范围:

在此处输入图片描述

然后对于连接版本我们使用 BYROW 和 TEXTJOIN:

=LET(
    rng,A1:C10,
    rw,ROWS(rng),
    clm,COLUMNS(rng),
    arr,MAKEARRAY(rw^clm,clm,LAMBDA(a,b,INDEX(rng,INT(MOD(a, rw ^ b) / (rw^ b / rw))+1,b)&"")),
    end,FILTER(arr,MMULT(--(arr=""),SEQUENCE(clm,,1,0))=0),
    rd,SORT(IF(ISNUMBER(--end),--end,end),SEQUENCE(,clm)),
    BYROW(rd,LAMBDA(p,TEXTJOIN(" - ",,p))))

原始旧版本:

您可以使用公式来实现此目的:

=IFERROR(INDEX($A$1:$A$4,INT((ROW(1:1)-1)/((COUNTA(B:B)*(COUNTA(C:C)))))+1)&" - "&INDEX(B:B,MOD(INT((ROW(1:1)-1)/COUNTA(C:C)),COUNTA(B:B))+1)&" - "&INDEX(C:C,MOD((ROW(1:1)-1),COUNTA(C:C))+1),"")

在此处输入图片描述

相关内容