Jos A-sarake on täynnä (esim. 500 riviä) esim. opiskelijanumeroita (1234A, 5555C jne.), niin mikä olisi tehokkain tapa poistaa uudelleen esiintyviä op.numeroita? Varmasti on jokin kätevämpi tapa kuin järjestää numerot ja poistaa sen jälkeen manuaalisesti tai tehdä sama etsi-korvaa -menetelmällä.
Kiitokset neuvonantajalle!
Kiitokset neuvonantajalle!
Vastaukset 6
Vanhimmat
Sub Makro1()
Worksheets("Taul1").Range("A1").Sort _
Key1:=Range("A1")
Set m = Range("A1")
Do While Not IsEmpty(m)
Set ss = m.Offset(1, 0)
If ss.Value = m.Value Then
m.EntireRow.Delete
End If
Set m = ss
Loop
End Sub
Kirjoita johonkin kohtaan taulukkoa ensin ehto.
Jätä varsinaisen taulukon ja ehdon väliin tyhjää tilaa.
Ehto= oppialasnumerosarakkeen otsikon nimi ja soluun sen alle >1, eli etsii sarakkeesta ne oppilas numerot, jotkat ovat suurempia kuin 1. Tämä riittänee tarkoitukseesi.
Napsauta varsinaisessa taulukossa. Valitse Tiedot/Suodata/Erikoissuodata. Tarkista, että Luetteloalue on oikein, jos ei valitse se. NNapsauta ehtopalue-kenttää, ja maalaa ehtoalue taulukosta. Valitse vain ainut kertaiset tietueet, OK.
Nyt voit vaikka kopioida toideen taulukkoon tiedot.
Makro näytti toimivan hyvin!
Oletetaan, että A-sarakkeessa on nimiä ja B-sarakkeessa opiskelijanumeroita. Jos samalla opiskelijanumerolla onkin vahingossa useampi nimi, niin millainen if-lause tai muu juttu em. makroon pitäisi lisätä että se jättäisi myös ne samat numerot joilla on eri nimi (A-sarakkeessa)?
Taitaa olla parin rivin lisäys, mutta en saanut onnistumaan. Kiitos kovasti avusta!
Tämä jättää myös ne jos samalla henkilöllä on eri numerot.
Sub Makro1()
Worksheets("Taul1").Range("A1").Sort _
Key1:=Range("A1"), key2:=Range("B1")
Set m = Range("A1")
Set k = Range("B1")
Do While Not IsEmpty(m)
Set ss = m.Offset(1, 0)
Set ks = k.Offset(1, 0)
If ss.Value = m.Value Then
If ks.Value = k.Value Then
m.EntireRow.Delete
End If
End If
Set m = ss
Set k = ks
Loop
End Sub
Kiitos Paavalille.
Tuntui toimivan hyvin. Kysytään nyt vielä tyhmä kysymys, että miten saan helpoiten jäämään 1.rivin otsikoksi? Yritän Rangea muuttamalla, mutta hiemaan pieleen meni.
Kerrotaan makrossa että otsikko on: Header:=xlYes
Sub Makro1()
Worksheets("Taul1").Range("A1").Sort _
Key1:=Range("A1"), key2:=Range("B1"), Header:=xlYes
Set m = Range("A1")
Set k = Range("B1")
Do While Not IsEmpty(m)
Set ss = m.Offset(1, 0)
Set ks = k.Offset(1, 0)
If ss.Value = m.Value Then
If ks.Value = k.Value Then
m.EntireRow.Delete
End If
End If
Set m = ss
Set k = ks
Loop
End Sub