Excel makro pähkinä

Visainen makropähkinä ainaskin mullen näyttää olevan seuraava. Taulukko: (alaviivat tabuloi, muuten solu tyhjä)
__A______B
.Nro:___Rivi:
71314   00026
71314   00035
71548   00654
_______00655
_______00656
_______00657
_______00658
71548   00001
72127   00001
72128   00001
72394   00001
_______00002
_______00020
72394   00021
72395   00001
_______00002
_______00020
72395   00021

Pitäs väsätä makroluuppi, tms, joka poistais aina viimeisen saman Nron (Solu.Clear). Nro rajaa väliinsä rivejä ja jälkimmäinen nro on turha. Rivi hukkaa ei saa tulla ja yksittäiset rivit täytyy luonnollisesti jäädä, ilman muutoksia. Nro:iden välinen rivi -määrä vaihtelee nollasta paljoon.
7769
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

ymmärtää mitä tarkoitat. Vaan onko minun hoksottimissani vikaa vai sinun esityksessä kun en saanut tosta mitään tolkkua!

Väännä parempi (selvempi) esitys niin koitan auttaa.

Äänestä
  • Koitetaampas kuvata paremmin. eli tuo taulukko alkaa solusta A1, siinä Nro: ja B1:ssä Rivi: ja tiedot alla. Alaviivat vain tuossa että näyttäs taulukolta kun muuten sotki asettelut.

    Ja onkelmaan.
    Eli tarkoitus olis käydä tuota taulukkoa läpi siten että Nro:n dupilikaatit poistetaan. Nro:han sarakkeessaan on kahteen kertaan eli se on tietyn Rivi: joukon alussa ja lopussa ja välissä tyhjiä soluja nolla tai enempi. Nro voi olla vain yhdenkin kerran jos vain yksi rivi ja missä kohden vain. Pois pitäisi saada jälkimmäinen Nro:. esimerkissä poistuisi 71314 riviltä 2, 71548 riviltä 8, 72394 riviltä 14 ja 72395 viimeiseltä riviltä. Nro: solun arvo tyhjennetään, riviä ei poisteta.

    Sain ite pelaamaan osittain. Eka ja viimeinen rivi myös muistettava hanskata jos niissä yksittäisarvo. niitä voi olla myös yksi tai useampi peräkkäin, alussa, lopussa tai keskellä.

    Jos vielä jäi jotain epäselväks niin kysäse. Tässä taulukossa on variaatioita nii pirusti.

    __A______B
    .Nro:___Rivi:
    71314 00026
    71314 00035
    71548 00654
    ______00655
    ______00656
    ______00657
    ______00658
    71548 00001
    72127 00001
    72128 00001
    72394 00001
    ______00002
    ______00020
    72394 00021
    72395 00001
    ______00002
    ______00020
    72395 00021

    Äänestä

  • Teijjo kirjoitti:

    Koitetaampas kuvata paremmin. eli tuo taulukko alkaa solusta A1, siinä Nro: ja B1:ssä Rivi: ja tiedot alla. Alaviivat vain tuossa että näyttäs taulukolta kun muuten sotki asettelut.

    Ja onkelmaan.
    Eli tarkoitus olis käydä tuota taulukkoa läpi siten että Nro:n dupilikaatit poistetaan. Nro:han sarakkeessaan on kahteen kertaan eli se on tietyn Rivi: joukon alussa ja lopussa ja välissä tyhjiä soluja nolla tai enempi. Nro voi olla vain yhdenkin kerran jos vain yksi rivi ja missä kohden vain. Pois pitäisi saada jälkimmäinen Nro:. esimerkissä poistuisi 71314 riviltä 2, 71548 riviltä 8, 72394 riviltä 14 ja 72395 viimeiseltä riviltä. Nro: solun arvo tyhjennetään, riviä ei poisteta.

    Sain ite pelaamaan osittain. Eka ja viimeinen rivi myös muistettava hanskata jos niissä yksittäisarvo. niitä voi olla myös yksi tai useampi peräkkäin, alussa, lopussa tai keskellä.

    Jos vielä jäi jotain epäselväks niin kysäse. Tässä taulukossa on variaatioita nii pirusti.

    __A______B
    .Nro:___Rivi:
    71314 00026
    71314 00035
    71548 00654
    ______00655
    ______00656
    ______00657
    ______00658
    71548 00001
    72127 00001
    72128 00001
    72394 00001
    ______00002
    ______00020
    72394 00021
    72395 00001
    ______00002
    ______00020
    72395 00021

    Jos on kysymys pelkästään dublikaattien poistosta sarakkeesta "A" niin tässä yksi ehdotus:

    Esimerkissäsi oli 18 riviä ja se on laitettu vakioon.

    Sub Dulbl()
    Dim I As Long
    Dim J As Long
    Const Pituus As Long = 18
    For I = 1 To Pituus - 1
    For J = I 1 To Pituus
    If Cells(I, 1).Value = Cells(J, 1) Then Cells(J, 1).Clear
    Next J
    Next I
    End Sub

    Äänestä

  • ihan tosissaan kirjoitti:

    Jos on kysymys pelkästään dublikaattien poistosta sarakkeesta "A" niin tässä yksi ehdotus:

    Esimerkissäsi oli 18 riviä ja se on laitettu vakioon.

    Sub Dulbl()
    Dim I As Long
    Dim J As Long
    Const Pituus As Long = 18
    For I = 1 To Pituus - 1
    For J = I 1 To Pituus
    If Cells(I, 1).Value = Cells(J, 1) Then Cells(J, 1).Clear
    Next J
    Next I
    End Sub

    Ehdotuksesi pelaa hienosti ainut että siinä on aika paljon "kierroksia". Jos taulukkossa on tuhansia rivejä niin pyörii jonkin verran. Alla meikäläisen tekele. Ajatuksena että yhdellä luuppauksella koko taulukko läpi. toki ehdotustasi voi helposti muuttaa siten että kun poisto tapahtuu siirrytään eteenpäin. Kiitos vain efordista, koodisi tallessa ja oppi myös tulevaisuutta varten.

    Sub poistaorderno()
    Dim I As Integer
    Dim Solu As String

    I = 2
    Solu = Cells(I, 1).Value
    Do While Cells(I, 2).Value ""
    If Cells(I 1, 1) Solu And Cells(I 1, 1) "" Then
    I = I 1
    Solu = Cells(I, 1).Value
    End If

    If Cells(I 1, 1) = "" Then
    I = I 1
    End If

    If Cells(I 1, 1) = Solu Then
    I = I 1
    Range("A" & I).Select
    Selection.Clear
    I = I 1
    Solu = Cells(I, 1).Value
    End If
    Loop
    End Sub

    Äänestä

  • Teijjo kirjoitti:

    Ehdotuksesi pelaa hienosti ainut että siinä on aika paljon "kierroksia". Jos taulukkossa on tuhansia rivejä niin pyörii jonkin verran. Alla meikäläisen tekele. Ajatuksena että yhdellä luuppauksella koko taulukko läpi. toki ehdotustasi voi helposti muuttaa siten että kun poisto tapahtuu siirrytään eteenpäin. Kiitos vain efordista, koodisi tallessa ja oppi myös tulevaisuutta varten.

    Sub poistaorderno()
    Dim I As Integer
    Dim Solu As String

    I = 2
    Solu = Cells(I, 1).Value
    Do While Cells(I, 2).Value ""
    If Cells(I 1, 1) Solu And Cells(I 1, 1) "" Then
    I = I 1
    Solu = Cells(I, 1).Value
    End If

    If Cells(I 1, 1) = "" Then
    I = I 1
    End If

    If Cells(I 1, 1) = Solu Then
    I = I 1
    Range("A" & I).Select
    Selection.Clear
    I = I 1
    Solu = Cells(I, 1).Value
    End If
    Loop
    End Sub

    Tässä yksinkertainen tapa, joka perustuu siihen, että kun lisätään jäseniä kokoelmaan se hyväksyy vain ainutkertaiset arvot ja jos syötetään tupla-arvo niin se palauttaa virheen,jota käytetään hyväksi...


    Sub PoistaTuplat()
    Dim cell As Range
    Dim Vika As Double
    Dim EiTupla As New Collection
    On Error GoTo virhe
    Vika = Range("A65536").End(xlUp).Row
    For Each cell In Range("A1:A" & Vika)
    If Not IsEmpty(cell) Then
    EiTupla.Add cell.Value, CStr(cell.Value)
    End If
    Next cell
    Exit Sub
    virhe:
    cell.Clear
    Resume Next
    End Sub

    Äänestä

  • Kunde kirjoitti:

    Tässä yksinkertainen tapa, joka perustuu siihen, että kun lisätään jäseniä kokoelmaan se hyväksyy vain ainutkertaiset arvot ja jos syötetään tupla-arvo niin se palauttaa virheen,jota käytetään hyväksi...


    Sub PoistaTuplat()
    Dim cell As Range
    Dim Vika As Double
    Dim EiTupla As New Collection
    On Error GoTo virhe
    Vika = Range("A65536").End(xlUp).Row
    For Each cell In Range("A1:A" & Vika)
    If Not IsEmpty(cell) Then
    EiTupla.Add cell.Value, CStr(cell.Value)
    End If
    Next cell
    Exit Sub
    virhe:
    cell.Clear
    Resume Next
    End Sub

    Tämä on jotenkin hemmetin tyylikäs vaihtoehto. Mielenkiintoista miten monilla eri tavoilla saman asian voi tehdä. Minulla on tunne että tätä ja sen variaatioita tulen käyttämään kunhan tutustun tuohon collectioniin tarkemmin. Noita isojen listojen läpikäyntejä nääs piisaa. Pitää vain testata miten raskas tuollainen collectioni on kun siinä alkaa olla reilut 20000 entryä.

    Äänestä

  • Kunde kirjoitti:

    Tässä yksinkertainen tapa, joka perustuu siihen, että kun lisätään jäseniä kokoelmaan se hyväksyy vain ainutkertaiset arvot ja jos syötetään tupla-arvo niin se palauttaa virheen,jota käytetään hyväksi...


    Sub PoistaTuplat()
    Dim cell As Range
    Dim Vika As Double
    Dim EiTupla As New Collection
    On Error GoTo virhe
    Vika = Range("A65536").End(xlUp).Row
    For Each cell In Range("A1:A" & Vika)
    If Not IsEmpty(cell) Then
    EiTupla.Add cell.Value, CStr(cell.Value)
    End If
    Next cell
    Exit Sub
    virhe:
    cell.Clear
    Resume Next
    End Sub

    Täytyy pitää idea mielessä jos joskus tarvitsisi soveltaa. Hyvä!

    Äänestä

Kommentoi aloitusta


Teijjo kirjoitti:

Visainen makropähkinä ainaskin mullen näyttää olevan seuraava. Taulukko: (alaviivat tabuloi, muuten solu tyhjä)
__A______B
.Nro:___Rivi:
71314   00026
71314   00035
71548   00654
_______00655
_______00656
_______00657
_______00658
71548   00001
72127   00001
72128   00001
72394   00001
_______00002
_______00020
72394   00021
72395   00001
_______00002
_______00020
72395   00021

Pitäs väsätä makroluuppi, tms, joka poistais aina viimeisen saman Nron (Solu.Clear). Nro rajaa väliinsä rivejä ja jälkimmäinen nro on turha. Rivi hukkaa ei saa tulla ja yksittäiset rivit täytyy luonnollisesti jäädä, ilman muutoksia. Nro:iden välinen rivi -määrä vaihtelee nollasta paljoon.

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