Sub MC_TEST()
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To [A65536].End(3).Row
If Cells(i, "ad") = "" Then
For j = 5 To 29
If Cells(i, j) <> "" Then
d(Cells(i, j).Value) = d(Cells(i, j).Value) + 1
End If
Next
ar = d.keys: br = d.items: d.RemoveAll
For n = 0 To UBound(ar)
d(br(n)) = d(br(n)) & "|" & ar(n)
Next
For M = 1 To 4
ss = Split(d(M), "|")
For X = 1 To UBound(ss)
Cells(i, 29 + (M - 1) * 7 + X) = ss(X)
Next
Next
End If
d.RemoveAll
Next
End Sub
我在通用Excel里用取数公式可以轻松做到,单机Excel里,你这个函数试试,或者下载通用Excel。
=IF(ISNA(MATCH(D5,INDIRECT("E1:E"&ROW()-1),0)),IF(ISNA(MATCH(D5,INDIRECT("E"&ROW()+1&":E65536"),0)),"","与第 "&(MATCH(D5,INDIRECT("E"&ROW()+1&":E65536"),0)+ROW())&" 行重复"),IF((ROW())=(MATCH(D5,INDIRECT("E1:E"&ROW()-1),0)),"","与第 "&(MATCH(D5,INDIRECT("E1:E"&ROW()-1),0))&" 行重复"))
数组公式,适合2007以上的版本。
=IFERROR(OFFSET($A13,0,SMALL(IF(COUNTIF($E13:$AB13,$E13:$AB13)=1,COLUMN($E13:$AB13),""),COLUMN(A1))-1),"")
数组公式,适合所有版本的excel。
=IF(COLUMN(A1)>SUM(--(COUNTIF($E13:$AB13,$E13:$AB13)=1)),"",OFFSET($A13,0,SMALL(IF(COUNTIF($E13:$AB13,$E13:$AB13)=1,COLUMN($E13:$AB13),""),COLUMN(A1))-1))
个人建议是去重重复值后,使用countif函数来统计比较简答!
ad13=IFERROR(SMALL(IF((FREQUENCY(IF($E$13:$AB$13="",0,$E$13:$AB$13),IF($E$13:$AB$13="",0,$E$13:$AB$13))=ROUNDUP(COLUMN(A1)/8,0)),TRANSPOSE($E$13:$AC$13),""),MOD(COLUMN(A1),8)),""),按CTRL+SHIFT+ENTER结束公式右拉,下拉。EXCEL2003不可用,如是EXCEL2003的话通知我改一下。