excel A B 两列相同数据,B列与A列相同的数据,在C列显示A列出现了多少次,如图

我用的公式如下
=COUNTIF(A:A,B1)
但是太慢了,A B两列都有40多万行的数据,对比一个都要一上午,求大神赐一个快速的计算公式或宏代码

Sub fdsafsaf()
Dim i As Long, j As Long, k As Long
Dim rng As Range
Dim arr
Dim arr1()
i = [a65536].End(3).Row '07版本改为[a1000000].End(3).Row
j = [b65536].End(3).Row '07版本改为[b1000000].End(3).Row
ReDim arr1(1 To j, 1 To 1)
Set rng = Range("a1:a" & i)
    arr = Range("b1:b" & j)
For k = 1 To j
    arr1(k, 1) = WorksheetFunction.CountIf(rng, arr(k, 1))
Next
Range("c1").Resize(j, 1) = arr1
End Sub

我试了几组数据,

4代表4000个

4、4表示两边都最4000个

这代码运行40万个数据,时间上要5个多小时

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-20
c1=IF(A1=B1,COUNTIF(A:A,A1),0)
选中c1,在左上角的名称框里输入c1:c400000,后边这个数字根据你的实际情况输入,最后那个是多少就输入多少,然后按回车买这时候c列的40万的单元格就选中了(如果真有这么多的话),保持选中状态,鼠标点一下上边编辑栏,把公式最后变得)删掉再输入,完了时候按下ctrl+回车,刚刚选中的单元格就自动填充上公式了。
第2个回答  2013-06-20
我觉得吧,用数据透视表比较靠谱一些
第3个回答  2013-06-20
C1输入公式并下拉。
=if(A1=B1,countif(a:A,a1),0)追问

这个统计有错误

第4个回答  2013-06-20
C1 =COUNTIF(A:A,B1)
然后双击 C1 单元格右下角的 小黑十字 向下复制……追问

太慢,我用的是这个

追答

公式 这就是最快的了,因为你需要计算出有多少个……

你的电脑不会这样慢吧……

你要计算多大的范围 不是整列?可以将A:A 限定一个固定的区域比如A$1:A$10000 等等……

用VBA 也块不到哪里去……


附件中 有代码……最少也要 半小时 如果说你的数据真的有40万行那么多的话……

相似回答