2015-10-02 1 views
-1

J'ai un fichier de données Excel (2010) contenant plus de 200 variables (colonnes) et plus de 1 000 enregistrements (lignes), chacun identifié par un numéro d'identification unique. Cependant, je soupçonne que certains de ces enregistrements sont fabriqués, c'est-à-dire que quelqu'un a pris un enregistrement existant, l'a répliqué et n'a modifié que quelques chiffres pour le rendre un peu différent. Par conséquent, je dois produire une matrice qui me montrera le nombre/pourcentage de «mêmes valeurs» entre chaque enregistrement et tous les autres enregistrements (par exemple, enregistrement 1 et enregistrement 2 partager 75 valeurs égales, enregistrement 1 et enregistrement 3 partager 57 valeurs égales , record 2 and record 3 partager 45 valeurs égales, etc.). J'ai quelques solutions de contournement, mais elles prennent des heures et ne produisent pas une matrice simple. Je ne me soucie pas de la différence entre les valeurs - juste si elles sont égales ou non. Toutes les idées seront grandement appréciées!Estimation du pourcentage de duplication entre les lignes dans Excel

Répondre

1

Je ne sais pas comment cela se produira un énorme ensemble de données, mais:

Sub T() 

    Dim d, m(), nR As Long, nC As Long, r As Long, r2 As Long, c As Long 
    Dim v1, v2, i As Long 
    d = Sheet1.Range("A1").CurrentRegion.Value 
    nR = UBound(d, 1) 
    nC = UBound(d, 2) 
    ReDim m(1 To nR, 1 To nR) 

    For r = 1 To nR 
     For r2 = r To nR 
      i = 0 
      For c = 1 To nC 
       v1 = d(r, c): If IsError(v1) Then v1 = "Error!" 
       v2 = d(r2, c): If IsError(v2) Then v2 = "Error!" 
       If v1 = v2 Then i = i + 1 
      Next c 
      m(r2, r) = i 
     Next r2 
    Next r 

    With Sheet2 
     .Range("B2").Resize(nR, nR).Value = m 
     'assuming your id's are in the first column... 
     For r = 1 To nR 
      .Cells(1 + r, 1) = d(r, 1) 
      .Cells(r, r + 1) = d(r, 1) 
     Next r 
    End With 

End Sub 
+0

Salut Tim, je ne suis pas très bon à VBA, mais basé sur votre script je l'ai eu !!! Voici mon dernier script, avec des noms de variables pour des mannequins (ou bien je me perds ...) Ça marche super, et très vite! Je ne peux pas vous remercier assez! – Nirit

+0

Impossible de joindre le code ... comment faire? – Nirit

+0

Vous pouvez mettre à jour votre question avec votre code final. –

0

Je suis un peu terne sur le HTML et l'affichage ... pas un programmeur, donc s'il vous plaît prendre tout avec le pardon. ..

Sub CalculateDuplicationBetweenRecords() 

Dim myCases As Long 
Dim myVariables As Long 
Dim myCurrentCase As Long 
Dim myComparisonCase As Long 
Dim myCurrentVariable As Long 
Dim myCurrentCell As Long 
Dim myComparisonCell As Long 
Dim myCounter As Long 

' Would be nice to automate number of cases and variables... 
myCases = 88 
myVariables = 81 
' Insert case #1 id for results matrix - cosmetic... 
Worksheets("Sheet2").Cells(1, 2).Value = Worksheets("Sheet1").Cells(1, 1).Value 

For myCurrentCase = 1 To myCases - 1 
    For myComparisonCase = myCurrentCase + 1 To myCases 
     myCounter = 0 
     For myCurrentVariable = 1 To myVariables 
      myCurrentCell = Worksheets("Sheet1").Cells(myCurrentCase, myCurrentVariable).Value: If IsError(myCurrentCell) Then myCurrentCell = "Error!" 
      myComparisonCell = Worksheets("Sheet1").Cells(myComparisonCase, myCurrentVariable).Value: If IsError(myComparisonCell) Then myComparisonCell = "Error!" 
      If myCurrentCell = myComparisonCell Then myCounter = myCounter + 1 
     Next myCurrentVariable 
     Worksheets("Sheet2").Cells(myCurrentCase + 1, 1).Value = Worksheets("Sheet1").Cells(myCurrentCase, 1).Value 
     Worksheets("Sheet2").Cells(1, myComparisonCase + 1).Value = Worksheets("Sheet1").Cells(myComparisonCase, 1).Value 
     Worksheets("Sheet2").Cells(myCurrentCase + 1, myComparisonCase + 1).Value = myCounter 
    Next myComparisonCase 
Next myCurrentCase 

End Sub