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
-1
A
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
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
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
Impossible de joindre le code ... comment faire? – Nirit
Vous pouvez mettre à jour votre question avec votre code final. –