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
1109
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
- 503581
Miksi juuri vasemmiston puolelta tulee niin paljon luusereita, kelapummeja jne.
Tämä asia ihmetyttää suuresti.393043Kehutaan vaihteeksi Perussuomalaisia
Perussuomalaiset ovat olleet melkoisen lokakampanjoinnin kohteena, vaikka ovat saaneet paljon hyvää aikaiseksi. Nyt on1472877SDP ylivoimainen ykkönen
En ole koskaan viitsinyt käydä äänestämässä, mutta nyt SDP:n etumatka on niin kutkuttava, että pakkohan se on vaivautua.722353Roiskeläpät takaisin niin alkaa lasit kestämään
"Tuulilaseja hajottava talvi-ilmiö on ehkä ratkennut" Tämän päivän autoissa kun on esimerkiksi vanhempaa autokalustoa s451829Polttomoottoriauto on köyhän merkki
Kun ei ole varaa ostaa sähköautoa, niin joutuu köyhän autoa käyttämään.951626Mitä tarkalleen tunnet
Minkälaisia tunteita sisälläsi liikkuu, kun tiedät, että ajattelen sinua lämmöllä ja jotain syttyy myös sinussa? Haluai671124- 821091
- 511066
Miten tällaista voi tapahtua
https://www.mtvuutiset.fi/artikkeli/kaksi-kuollut-liikenteessa-virroilla/9241442 Miksi tällainen on tapahtunut?41935