Rivin poisto makrolla

Eli minulla on tilanne missä eri valintaruudut tulostaa soluihin C10-C20 joko TOSI tai EPÄTOSI. Nyt tartteisin makron mikä poistaisi rivit missä lukee EPÄTOSI kokonaan.

Tietty tätä ennen makro kopioi tiedot toiseen taulukkoon ettei mitään alkuperäistä menetetä, mutta tämän olen jo tehnyt. Nyt pitäisi saada vielä tuo lista siistittyä ylimääräisistä riveistä.
71162
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

Sub CommandButton1_Click()
Range("C1:C20000").Select
For Each cell In Selection
If cell.Value = "*EPÄTOSI*" Then
cell.EntireRow.Delete
End If
Next cell
Range("a1").Select
End Sub

mutta jostain syystä tuo ei toiminut, mikähän siinä meni väärin?

Äänestä
  • Excel 2007:lla testattuna koodi toimii.
    Huomaa, että kirjainkokoa ei vertailla.

    haetko tekstiä EPÄTOSI vai *EPÄTOSI*?

    Tuliko virheilmoitusta?

    Äänestä

  • Sub CommandButton1_Click()

    For i=20000 to 1 step -1
    if Cells(i,3) = "*EPÄTOSI*" Then Cells(i,3).Entirerow.Delete
    Next

    End Sub

    Äänestä

  • juhakorkeapudas kirjoitti:

    Excel 2007:lla testattuna koodi toimii.
    Huomaa, että kirjainkokoa ei vertailla.

    haetko tekstiä EPÄTOSI vai *EPÄTOSI*?

    Tuliko virheilmoitusta?

    Eli tarkoitus oli hakea tekstiä EPÄTOSI, mutta vaikka otinkin tähdet pois niin rivit ei silti poistuneet. Mitään virheilmoitusta ei tule.

    Äänestä

  • juminki kirjoitti:

    Eli tarkoitus oli hakea tekstiä EPÄTOSI, mutta vaikka otinkin tähdet pois niin rivit ei silti poistuneet. Mitään virheilmoitusta ei tule.

    If cell.Value = false Then cell.EntireRow.Delete

    Äänestä

  • vika on siinä kun rivejä poistetaan ne pitää poistaa alkaen lopustapäin.
    Olen aikaisemmin postannut FIND funktion joka palauttaa alueen ja on tässäkin tapauksessa parhain ja nopein vaihtoehto. Yleensä pitäisi pyrkiä käyttämään excelin omia funktioita. For next loopit ovat niitä "tehottomimpia", mutta toimivia kuitenkin. Kysyjän tapauksessa nopeus ei varmaankaan nöyttele suurtakaan osuutta. Tossa nyt kuitenkin FIND makro ja sillähän voit tehdä sen tallennuksenkin yhdellä koodirillä toiseen taulukkoon...

    Sub CommandButton1_Click()
    EtsiAlue("EPÄTOSI", Columns("C"), xlFormulas, xlWhole).EntireRow.Copy Range("Sheet2!C65536").End(xlUp).Offset(1, 0).EntireRow
    EtsiAlue("EPÄTOSI", Columns("C"), MatchCase:=True).EntireRow.Delete
    End Sub

    Function EtsiAlue(Haettava As Variant, _
    Hakualue As Range, _
    Optional LookIn As Variant, _
    Optional LookAt As Variant, _
    Optional MatchCase As Boolean) As Range


    Dim Alue As Range
    Dim Ekaosoite As String
    If IsMissing(LookIn) Then LookIn = xlValues
    If IsMissing(LookAt) Then LookAt = xlPart
    If IsMissing(MatchCase) Then MatchCase = False

    With Hakualue
    Set Alue = .Find( _
    What:=Haettava, _
    LookIn:=LookIn, _
    LookAt:=LookAt, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchCase:=MatchCase, _
    SearchFormat:=False)
    If Not Alue Is Nothing Then
    Set EtsiAlue = Alue
    Ekaosoite = Alue.Address
    Do
    Set EtsiAlue = Union(EtsiAlue, Alue)
    Set Alue = .FindNext(Alue)
    Loop While Not Alue Is Nothing And Alue.Address Ekaosoite
    End If
    End With
    End Function

    Keep Excelling @Kunde

    Äänestä

  • kunde kirjoitti:

    vika on siinä kun rivejä poistetaan ne pitää poistaa alkaen lopustapäin.
    Olen aikaisemmin postannut FIND funktion joka palauttaa alueen ja on tässäkin tapauksessa parhain ja nopein vaihtoehto. Yleensä pitäisi pyrkiä käyttämään excelin omia funktioita. For next loopit ovat niitä "tehottomimpia", mutta toimivia kuitenkin. Kysyjän tapauksessa nopeus ei varmaankaan nöyttele suurtakaan osuutta. Tossa nyt kuitenkin FIND makro ja sillähän voit tehdä sen tallennuksenkin yhdellä koodirillä toiseen taulukkoon...

    Sub CommandButton1_Click()
    EtsiAlue("EPÄTOSI", Columns("C"), xlFormulas, xlWhole).EntireRow.Copy Range("Sheet2!C65536").End(xlUp).Offset(1, 0).EntireRow
    EtsiAlue("EPÄTOSI", Columns("C"), MatchCase:=True).EntireRow.Delete
    End Sub

    Function EtsiAlue(Haettava As Variant, _
    Hakualue As Range, _
    Optional LookIn As Variant, _
    Optional LookAt As Variant, _
    Optional MatchCase As Boolean) As Range


    Dim Alue As Range
    Dim Ekaosoite As String
    If IsMissing(LookIn) Then LookIn = xlValues
    If IsMissing(LookAt) Then LookAt = xlPart
    If IsMissing(MatchCase) Then MatchCase = False

    With Hakualue
    Set Alue = .Find( _
    What:=Haettava, _
    LookIn:=LookIn, _
    LookAt:=LookAt, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchCase:=MatchCase, _
    SearchFormat:=False)
    If Not Alue Is Nothing Then
    Set EtsiAlue = Alue
    Ekaosoite = Alue.Address
    Do
    Set EtsiAlue = Union(EtsiAlue, Alue)
    Set Alue = .FindNext(Alue)
    Loop While Not Alue Is Nothing And Alue.Address Ekaosoite
    End If
    End With
    End Function

    Keep Excelling @Kunde

    Minulla on vastaavanlainen kysymys, mutta nyt olisi tarkoitus lisätä uusi rivi. Eli minulla on lista nimiä aakkosjärjestyksessä, ja kukin nimi voi olla allekkain monta kertaa. Haluaisin tyhjän rivin aina niille kohdille, joissa nimi vaihtuu. Tyyliin:

    Matti
    Matti
    Matti
    Pekka
    Pekka

    muuttuisi muotoon:
    Matti
    Matti
    Matti

    Pekka
    Pekka

    Äänestä

Kommentoi aloitusta


juminki kirjoitti:

Eli minulla on tilanne missä eri valintaruudut tulostaa soluihin C10-C20 joko TOSI tai EPÄTOSI. Nyt tartteisin makron mikä poistaisi rivit missä lukee EPÄTOSI kokonaan.

Tietty tätä ennen makro kopioi tiedot toiseen taulukkoon ettei mitään alkuperäistä menetetä, mutta tämän olen jo tehnyt. Nyt pitäisi saada vielä tuo lista siistittyä ylimääräisistä riveistä.

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