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ä.
Rivin poisto makrolla
7
1094
Vastaukset
- juminki
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?- juhakorkeapudas
Excel 2007:lla testattuna koodi toimii.
Huomaa, että kirjainkokoa ei vertailla.
haetko tekstiä EPÄTOSI vai *EPÄTOSI*?
Tuliko virheilmoitusta? - ...
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 - juminki
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.
- ...
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
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- yypp
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 @KundeMinulla 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
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Useita puukotettu Tampereella
Mikäs homma tämä nyt taas on? "Useaa henkilöä on puukotettu Tampereen keskustassa kauppakeskus Ratinan lähistöllä." ht1763407Asiakas iski kaupassa varastelua tehneen kanveesiin.
https://www.iltalehti.fi/kotimaa/a/33a85463-e4d5-45ed-8014-db51fe8079ec Oikein. Näin sitä pitää. Kyllä kaupoissa valtava3732171Kuka rääkkää eläimiä Puolangalla?
Poliisi ampui toistakymmentä nälkiintynyttä eläintä Puolangalla Tilalta oli ollut karkuteillä lähes viisikymmentä nälkii542117- 421998
Meneeköhän sulla
oikeasti pinnan alla yhtä huonosti kuin mulla? Tai yhtä huonosti mutta jollain eri tyylillä? Ei olisi pitänyt jättää sua321481Jos ei tiedä mitä toisesta haluaa
Älä missään nimessä anna mitään merkkejä kiinnostuksesta. Ole haluamatta mitään. Täytyy ajatella toistakin. Ei kukaan em931241- 541203
Muutama kysymys ja huomio hindulaisesta kulttuurista.
Vedakirjoituksia pidetään historiallisina teksteinä, ei siis "julistuksena" kuten esimerkiksi Raamattua, vaan kuten koul4091114Jumala puhui minulle
Hän kertoi sinusta asioita, joiden takia jaksan, uskon ja luotan. Hän kuvaili sinua minulle ja pakahduin onnesta kuulles1171029- 47903