如何将2个单独的数组组合到excel中的扩展组合列表中

时间:2013-11-29 11:05:50

标签: excel excel-vba vba

我一直在寻找它,但我似乎无法找到答案,尽管这似乎是一个常见的问题。

我试图在Excel中自动复制单元格。 我有两个列表:列表1的值为1,2,3,4,第二个列表的值为a,b,c,d。 现在我想要一个文件,对于列表1中的每个值,列表2中的值在excel中重复。所以:

1 - a
1 - b
1 - c
1 - d
2 - a
2 - b
2 - c
2 - d
3 - a
...

我想知道excel中是否有一个函数,或者我是否可以使用它来解决这个问题?对于这个简短的列表,它当然很容易使用自动填充,但当列表包含几百个值时,它会变得更复杂......

2 个答案:

答案 0 :(得分:2)

您也可以使用一些没有VBA的公式/支持列来执行此操作:

假设您的第一个类别位于A列,从A2开始,您的类别在B列。

  1. 确定每个类别的记录数,例如在C1:=COUNTA($A:$A)-1(假设标题行)和C2等效
  2. 放置两个支柱,例如在E和F)中 - E将保留第一类的行,F表示第二类的Id。将以下公式放在E2中:=IF(ISTEXT(E1),1,IF(F2=1,E1+1,E1)),这在F2:=IF(ISTEXT(F1),1,IF(F1=$C$2,1,F1+1))
  3. 为最终结果再添加两列 - 对于具有公式=INDEX(A:A,E2+1)的类别1,对于具有公式=INDEX(B:B,F2+1)的类别2,为H.
  4. 现在只需根据需要将E:H列的公式复制为多行(所需行数为=C1*C2
  5. 最后它看起来像这样:enter image description here

    您可以下载file here

答案 1 :(得分:0)

这应该很容易理解......

打开VBE ALT + F11 并右键单击VBA项目。插入模块并复制粘贴以下代码。按 F5 运行

Sub Main()

    Dim number As Range
    Dim letter As Range

    For Each number In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
        For Each letter In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
            With Sheet2
                .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1) = number
                .Range("B" & .Range("b" & Rows.Count).End(xlUp).Row + 1) = letter
            End With
        Next
    Next

End Sub

上面的代码假设您的sheet1看起来像这样

enter image description here

,结果将在Sheet2上像这样

enter image description here