如何获取最常见匹配列的数量?

如何获取最常见匹配列的数量?

需要一些帮助来弄清楚如何在 Excel 中执行此操作。

我有一长串名字,分为两列 - 名字和姓氏。我想找出最受欢迎的 5 个名字全名但 -一些姓氏和名字被逆转,因此我希望“John | Smith”也算入“Smith | John”。我如何在 excel 中执行此操作?

我尝试将两列都放入数据透视表中,并将名字和姓氏放入行标签中,将名字的数量放入值中,但这会给我一个长长的列表,其中每个名字都与其他名字混在一起,而找出最流行名字的唯一方法是向下滚动整个表格并计算我看到的最高数字。当我向结果添加“前 10 个”值过滤器时,无论姓氏是什么,都会返回出现频率最高的名字的顶部值。

例如。我可以有 5 个名字:

John Smith
Smith John
Frank White
Frank Green
Frank Black

如果我应用前 10 个过滤器,它会显示 Frank 是最常见的名字,其次是 John Smith,尽管我真正想看到的是 John Smith,因为它出现的次数比其他任何名字都多。

希望这有意义。如果有人能提供一些关于如何实现这一点的见解,我将不胜感激。如果您有任何问题,请告诉我,谢谢!

编辑:关于如何确定什么是名字,什么是姓氏,名字的顺序实际上并不重要。我预见到的唯一问题是,最常用的名字会有重复,所以在我给出的例子中,“Smith John”和“John Smith”是最受欢迎的名字,各有 2 个。(如果这说得通的话。)我对此没意见,因为很容易只看前 10 名列表而忽略其他所有结果。

答案1

编辑: 对问题进行三次编辑后,效果可能会更好:

假设 A 列和 B 列保存姓名部分。将其放入 C 列:

=A1&" "&B1

然后在自由列中输入此公式:

=(COUNTIF(C$1:C$7;$A1 & " " & $B1) + COUNTIF(C$1:C$7;$B1 & " " & $A1)) * NOT((COUNTIF(C$1:C1;$B1 & " " & $A1) > 0))

这会计算名称对,无论顺序如何,并确定反向对是否之前出现过(请注意第 3 个 COUNTIF 中的运行结束索引)。如果是,则计数将设置为零。这样,只会计算唯一的对。

对此列使用 Top10 过滤器来查找最常见的。

答案2

您可以运行此代码来查找所有匹配项,并使它们看起来相同,无论first,lastlast,first

Sub test()

Dim LastRow As Integer
LastRow = Cells(Rows.Count, "A").End(xlUp).Row

Dim fname As String
Dim lname As String

For i = 1 To LastRow
    fname = LCase(Cells(i, 1))
    lname = LCase(Cells(i, 2))
        For j = 1 To LastRow
            If LCase(Cells(j, 1)) = lname And LCase(Cells(j, 2)) = fname Then
                Cells(j, 1) = fname
                Cells(j, 2) = lname
            End If
        Next
Next

End Sub

然后将该数据用于您的数据透视表。

相关内容