我有一个 Excel 2010 工作簿,其中一行用于姓氏,一行用于名字。大约有 1800 个条目。
同一个人(名字和姓氏)可以出现多次——jim simith 出现 5 次。我想计算 jim simth 在列表中出现的次数。
我用过=COUNTIF($B$2:$B$1800,B2)
,B
姓氏在哪里。问题是列表中还有其他史密斯被计算在内,因为名字在单独的列中。有谁知道我如何对每个姓氏相同的人进行频率计数?
我有一个 Excel 2010 工作簿,其中一行用于姓氏,一行用于名字。大约有 1800 个条目。
同一个人(名字和姓氏)可以出现多次——jim simith 出现 5 次。我想计算 jim simth 在列表中出现的次数。
我用过=COUNTIF($B$2:$B$1800,B2)
,B
姓氏在哪里。问题是列表中还有其他史密斯被计算在内,因为名字在单独的列中。有谁知道我如何对每个姓氏相同的人进行频率计数?
=COUNTIFS($B$2:$B$1800,B2,$A$2:$A$1800,A2)
我没有测试过这个,我假设你的COUNTIF
公式有效。
在新列中,您可以列中CONCATENATE
的字符串并在其COUNTIF
上运行。
假设这A
是名字和B
姓氏,C
你会有类似的东西:
=CONCATENATE(A2, " ", B2)
然后你会这样做COUNTIF
:
=COUNTIF($C2:$C1800,$C2)
C
或者,如果您不想显示列,可以隐藏它。
可能有点矫枉过正,但您可以创建与工作表的 ADODB 连接:
Dim conn As New Connection
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=""" & ActiveWorkbook.FullName & """;" & _
"Extended Properties=""Excel 12.0;HDR=No;"""
'If you're running a version of Excel earlier than 2007, the connection string should look like this:
'.ConnectionString = "Data Source=""" & ActiveWorkbook.FullName & """;" & _
' "Extended Properties=""Excel 8.0;HDR=No;"""
.Open
End With
然后您可以针对工作表发出 SQL 语句:
Dim rs As Recordset
Set rs = conn.Execute( _
"SELECT F2 AS LastName, F1 AS FirstName, Count(*) AS C " & _
"FROM [Sheet1$A$2:$B$1800] " & _
"GROUP BY F2, F1" _
)