» »

Excel: izbris obeh podvojenih vrednosti

Excel: izbris obeh podvojenih vrednosti

shinko ::

Zdravo,

iz baze moram izbrisat vse podvojene vrednosti. Ne samo "duplikat" ampak tudi "original". V bazi so imena, priimki, telefonska, mail,... Na netu sem naletel na to kodo za makro:

Sub Delete_Duplicates()
Dim r As Long
Dim r2 As Long
Dim CurrentVal As String
Dim Unique As Boolean
    For r = 1 To Range("A65536").End(xlUp).Row
        CurrentVal = Range("A" & r).Value
        Unique = True
        For r2 = r + 1 To Range("A65536").End(xlUp).Row
            If Range("A" & r2).Value = CurrentVal Then
                Unique = False
                Range("A" & r2).EntireRow.Delete
                r2 = r2 - 1
            End If
        Next r2
        If Unique = False Then
            Range("A" & r).EntireRow.Delete
            r = r - 1
        End If
    Next r
End Sub


Baza ima približno 5000 vnosov in računalnik melje že pol ure. A ve mogoče kdo če je ta koda ok, oz če še je kakšna druga varjanta prosim za nasvet.

LP

amigo_no1 ::

shinko ::

Hvala, ampak to zal ni to. S tistim filtrom se pobrise samo duplikat, ne pa tudi original.

Jaz rabim iz tega:
1
2
2
3
4
4
to:
1
3



Lp

amigo_no1 ::

Ne razumem kje imaš problem ?

smetko ::

brez makrojev je to mogoče na sledeč način:
- predpostavka je da iščes podvojene vrednosti v stolpcu a.
- v neki prazni stolpec v 1.vrstico vpiši formulo =COUNTIF(A:A;A1).
- to skopiraj po celotni koloni.
- tu pa imaš dve možnosti in sicer filter ali pa sort po tem polju...
No comment

dvojka ::

shinko je izjavil:

Zdravo,

iz baze moram izbrisat vse podvojene vrednosti. Ne samo "duplikat" ampak tudi "original". V bazi so imena, priimki, telefonska, mail,... Na netu sem naletel na to kodo za makro:


Sub Delete_Duplicates()
Dim r As Long
Dim r2 As Long
Dim CurrentVal As String
Dim Unique As Boolean
For r = 1 To Range("A65536").End(xlUp).Row
CurrentVal = Range("A" & r).Value
Unique = True
For r2 = r + 1 To Range("A65536").End(xlUp).Row
If Range("A" & r2).Value = CurrentVal Then
Unique = False
Range("A" & r2).EntireRow.Delete
r2 = r2 - 1
End If
Next r2
If Unique = False Then
Range("A" & r).EntireRow.Delete
r = r - 1
End If
Next r
End Sub


Baza ima približno 5000 vnosov in računalnik melje že pol ure. A ve mogoče kdo če je ta koda ok, oz če še je kakšna druga varjanta prosim za nasvet.

LP


Tole kar si dal dela čisto lepo, vendar je časovno potratno. Za vsak row moraš pregledati n vrstic. V najslabšem primeru delaš 5000x5000 primerjav kar pa le nanese nekaj. Kar je predlagal smetko je ročna varianta, ki je hitrejša. V kolikor mora to biti makro imaš pa veliko možnosti za optimizacijo. Prva je že ta, da narediš sort podatkov in potem delaš drugo zanko samo do prve spremembe like:
       For r2 = r + 1 To Range("A65536").End(xlUp).Row
            If Range("A" & r2).Value = CurrentVal Then
                Unique = False
                Range("A" & r2).EntireRow.Delete
                r2 = r2 - 1
            Else
               Exit For
            End If
        Next r2

LP

Zgodovina sprememb…

  • spremenil: dvojka ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

vba array

Oddelek: Programiranje
12855 (548) Vazelin
»

Excel: tiskanje po vrsticah

Oddelek: Pomoč in nasveti
7956 (869) luksorzi
»

Calc/excel delo s tabelo

Oddelek: Programiranje
131365 (1132) salabajs
»

[excel]duplikati

Oddelek: Programiranje
81414 (1341) baksuz
»

[Excel] problem z makrojem, visual basic (strani: 1 2 )

Oddelek: Programiranje
585413 (4876) steev

Več podobnih tem