我的电子表格中有两列,我需要编写一个公式来确定每个组合出现的次数。示例:
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
那就可以了。