计算 Excel 中多列的唯一组合的数量

计算 Excel 中多列的唯一组合的数量

我的电子表格中有两列,我需要编写一个公式来确定每个组合出现的次数。示例:

A  1
A  1
A  2
A  2
A  2
B  1
B  1
B  2

应导致:

A  1  2
A  2  3
B  1  2
B  2  1

昨天我通过导入 SQL 表非常轻松地完成了这项工作,但我需要让任何人都可以做到这一点,只需将这两列放在电子表格中即可。然后它应该用数量表填充第二张表。

答案1

编辑: 简单的解决方案(感谢 SaintWacko)

连接两列:

=$A2&$B2

创建一个数据透视表,使用连接的列作为“行标签”和“值”。然后确保“值”正在计算计数(应为默认值)。

复杂的解决方案

您可以连接 C 列中的两列:

=$A2&$B2

在 D 列中,您需要一个函数来确定该项目是否是另一个项目的重复,以便每个项目中只有一个值为真(这仅当项目按数据列排序时才有效,但宏稍后会执行此操作)。

=$C1<>$C2

然后计算 E 列中匹配的计数:

=COUNTIF($C:$C,$C2)

宏将为您找到所有组合,将它们放在第 2 张表上并复制计数。下面的代码做了一些假设,但您可以修改它来满足您的需要。

Option Explicit

Sub GetCombinations()

    Dim sheet1, sheet2 As Worksheet
    Set sheet1 = Worksheets(1)
    Set sheet2 = Worksheets(2)

    Dim sStartColumn As String
    Dim iTopRow As Long
    Dim sEndColumn As String
    Dim iBottomRow As Long

    sStartColumn = "A"
    iTopRow = 1
    sEndColumn = "E"
    iBottomRow = sheet1.UsedRange.Rows.Count

    Dim Rng As Range
    Dim sRange1 As String
    sRange1 = sStartColumn & CStr(iTopRow) & ":" & sEndColumn & CStr(iBottomRow)

    Set Rng = sheet1.Range(sRange1)

    Rng.Sort Key1:=Range("A2"), Order1:=xlAscending, _
             Key2:=Range("B2"), Order2:=xlAscending, _
             Orientation:=xlSortColumns, Header:=xlYes

    Dim i, j As Integer

    j = 2

    For i = 2 To iBottomRow

        If sheet1.Cells(i, 4) Then

            sheet2.Cells(j, 1) = sheet1.Cells(i, 1)
            sheet2.Cells(j, 2) = sheet1.Cells(i, 2)
            sheet2.Cells(j, 3) = sheet1.Cells(i, 5)
            j = j + 1

        End If

    Next i

End Sub

那就可以了。

相关内容