Saman rivin poistaminen

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!
6518
Äänestä

Muut lukivat myös

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

Äänestä

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.

Äänestä

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!

Äänestä
  • 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

    Äänestä

  • paavali kirjoitti:

    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.

    Äänestä

  • Nikke kirjoitti:

    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

    Äänestä

Kommentoi aloitusta


Nikke kirjoitti:

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!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu