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
1090
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
Immu otti pataan
Olen pettynyt, hänen piti viedä Stagalaa kuin litran mittaa - mutta kuinka kävikään? Voi hemmetti sentään.... Ääääääh!2203042Tykkäätkö halaamisesta?
Minä en. Tänään tuttava, jolle olen maininnut että en pidä halaamisesta, yritti halata minua ja olen vieläkin ihan raivo1191329Näetkö feminismin uhkana
Vai mahdollisuutena kun deittailet naisia? Mitä miehet mieltä feminismistä?2141324Moikka rakas
Oon miettinyt meidän välistä yhteyttä viime aikoina. En ihan osaa pukea sanoiksi, mitä kaikkea tunnen, mutta halusin vaa111318Malmin tapaus on järkyttävä
Kolme ulkomaalaistaustaista miestä raiskasi nuoren tytön tavalla, jota ei meinaa uskoa todeksi. Mikä voisi olla oikeampi3881273- 1111123
- 951074
Hinduilu on suurta eksytystä
tekosyvällinen tarina uppoaa moneen. Harhautusta todellisen Jumalan yhteydestä. Kuka haluaisi nähdä sielunvaelluksessa4231044- 46934
- 66934