|
- Sub test()
- Dim A As Variant
- Dim B() As String
- Dim HT() As Long, I(1 To 2) As Long, C As Long, R As Long, Y As Long, X As Long, H As Long, J As Long, P As Long
- A = Sheet1.Range("a1", Sheet1.[b65536].End(3))
- R = UBound(A)
- C = R * 1.33
- ReDim B(1 To R, 1 To 3)
- For X = 1 To 2
- ReDim HT(C - 1)
- For Y = 1 To R
- P = 0
- H = (hash(0, StrPtr(A(Y, X)), LenB(A(Y, X))) And &H7FFFFFFF) Mod C
- Do
- If HT(H) = 0 Then
- I(X) = I(X) + 1
- HT(H) = I(X)
- B(HT(H), X) = A(Y, X)
- Exit Do
- ElseIf StrComp(A(Y, X), B(HT(H), X)) = 0 Then
- Exit Do
- Else
- P = P + 1
- H = (H + P * P) Mod C
- End If
- Loop
- Next
- Next
- For Y = 1 To I(1)
- P = 0
- H = (hash(0, StrPtr(B(Y, 1)), LenB(B(Y, 1))) And &H7FFFFFFF) Mod C
- Do
- If HT(H) = 0 Then
- Exit Do
- ElseIf StrComp(B(Y, 1), B(HT(H), 2)) = 0 Then
- J = J + 1
- B(J, 3) = B(Y, 1)
- Exit Do
- Else
- P = P + 1
- H = (H + P * P) Mod C
- End If
- Loop
- Next
- Sheet1.Range("c1:e" & R) = B
- End Sub
- '弄成这样好理解些
复制代码 |
|