Avatar billede Bønnen Juniormester
17. maj 2018 - 13:06 Der er 13 kommentarer og
3 løsninger

Slet række if activecell = "tekst" & "tal(som er forskelligt)"

Hej

Jeg er lidt ny med VBA, og har derfor et problem med min kode.
Jeg har et udtræk af et økonomisystem fra en CSV fil, og der kommer derfor en masse data jeg ikke skal bruge. I kolonne A fremgår en masse varenummer, men indimellem kommer der noget data jeg ikke skal bruge.
Der komme i kolonne A en tekst som hedder Total,stat.gr. 003 og jeg vil derfor slette hele rækken for det data det indebære, hvilket ikke er noget problem. Problemet er at længere nede i arket kommet endnu en række jeg ikke skal bruge som hedder Total, stat.gr. 007, og dette fortsætter 900 rækker ned. Der er desværre ikke noget system i når disse række kommer, og de sidste 3 cifre er der heller ikke noget system i.
Jeg har indtil videre strækket dette sammen:

cellcount = Range("a1", Selection.End(xlDown)).Count
Range("a1").Activate
For i = 0 To cellcount

If ActiveCell = "Total.stat.gr " & "tal" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Next i

Her er så problemet at  "tal" variere og der er ikke noget system i hvad tal der kommer næste. Det ville være super dejligt hvis jeg kunne skrive 1-100 som tal, men kender ikke lige nogen kode for det.

Håber i kan hjælpe
Avatar billede kim1a Ekspert
17. maj 2018 - 22:59 #1
Du må skulle bruge * men jeg er lidt i tvivl om hvordan det skrives, en hurtig googling gav mig ikke meget.
Avatar billede finb Ekspert
18. maj 2018 - 09:08 #2
Hvis tallene er 001 til 099
altid står efter "Total.stat.gr"
kan du nøjes med:
If ActiveCell = isNumber(inStr(activeCell;"Total.stat.gr")) Then
Avatar billede Bønnen Juniormester
18. maj 2018 - 11:25 #3
Hvis tallene er 001 til 099
altid står efter "Total.stat.gr"
kan du nøjes med:
If ActiveCell = isNumber(inStr(activeCell;"Total.stat.gr")) Then

Den brokker sig over tegn ;  som står efter activecell;
Avatar billede kim1a Ekspert
18. maj 2018 - 13:57 #4
Det skal være komma
Avatar billede Bønnen Juniormester
18. maj 2018 - 20:22 #5
Nu har jeg skrevet nedenstående

Sub test()

If ActiveCell = IsNumber(InStr(ActiveCell, "Total.stat.gr")) Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If

End Sub

Den kommer med compile error:
Sub og function not defined
Avatar billede kim1a Ekspert
19. maj 2018 - 00:21 #6
Mangler du ikke for i =, og next i? Eller var det blot logisk at du har beholdt den første del af dit oprindelige?
Avatar billede Bønnen Juniormester
19. maj 2018 - 10:04 #7
Det kan godt gøres uden. Det er kun denne tekst som jeg skrev, der er problemer med :)
Avatar billede kim1a Ekspert
19. maj 2018 - 14:16 #8
Tydeligvis kan det ikke gøres uden ;-)

Da vi ikke kan se en fejl i det du skriver (udover at du måske har to end sub, eller sub() - prøv at skrive det hele ind.
Avatar billede Bønnen Juniormester
21. maj 2018 - 09:02 #9
Sub test()

cellcount = Range("a1", Selection.End(xlDown)).Count
Range("a1").Activate
For i = 0 To cellcount

If ActiveCell = IsNumber(InStr(ActiveCell, "Total.stat.gr")) Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Next i

End Sub

Fejlkode som den kommer med: Complile error:
Sub og Function nod defined, og den har markeret IsNumber som skulle være der der er fejl.
Så fejlen er stadig det samme, selvom du vil have hele min kode med. ;-)
Avatar billede kim1a Ekspert
21. maj 2018 - 09:56 #10
Det tog mig noget tid at undersøge, men det skal hedde Isnumeric - ikke isnumber
Avatar billede store-morten Ekspert
21. maj 2018 - 19:22 #11
Prøv denne i kopi/test ark, sletter rækken, hvis cellen indeholder "Total,stat.gr.":
Sub test()
SidsteRække = Range("A" & Rows.Count).End(xlUp).Row
Range("A1").Activate

For i = 1 To SidsteRække
    If c.Value Like "*Total,stat.gr.*" Then
    ActiveCell.EntireRow.Delete
    Else
    ActiveCell.Offset(1, 0).Activate
    End If
Next i

End Sub


Kontroller: Total,stat.gr. Er rigtig?
I spørgsmålet er der , efter Total og efter gr?
I dit kode eks. er der . efter Total og intet efter gr?
Avatar billede store-morten Ekspert
21. maj 2018 - 19:25 #12
Der var lige en lille sættenisse på spil:
Sub test()
SidsteRække = Range("A" & Rows.Count).End(xlUp).Row
Range("A1").Activate

For i = 1 To SidsteRække
    If ActiveCell.Value Like "*Total,stat.gr.*" Then
    ActiveCell.EntireRow.Delete
    Else
    ActiveCell.Offset(1, 0).Activate
    End If
Next i

End Sub
Avatar billede kim1a Ekspert
21. maj 2018 - 20:25 #13
Der var den lækre version, hvor man bruger * som wildcard. Jeg testede, og kunne ikke får din sidste række variabel til at virke, derudover er der noget med at den naturligvis kører for langt taget i betragtning af at man sletter rækker, men den komplette løsning lyder sådan:

Sub test2()

cellcount = Range("A" & Rows.Count).End(xlUp).Row
Range("a1").Activate
For i = 0 To cellcount

If ActiveCell.Value Like "*Total.stat.gr.*" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Next i

End Sub
Avatar billede store-morten Ekspert
21. maj 2018 - 21:50 #14
Hej Kim

Eneste ændring du har lavet er:
For i = 0 To cellcount  -->  For i = 1 To SidsteRække
Så hvilken en kører længst?
Avatar billede Bønnen Juniormester
21. maj 2018 - 22:06 #15
Det var lige det jeg skulle bruge. Tusind tak for hjælpen, og jer der prøvede at hjælpe :)
Avatar billede store-morten Ekspert
21. maj 2018 - 22:09 #16
Prøv denne der er noget hurtigere i udførsel:
Sub test4()
SidsteRække = Range("A" & Rows.Count).End(xlUp).Row
R = 1

For i = 1 To SidsteRække

    If Cells(R, 1).Value Like "*Total.stat.gr.*" Then
    Cells(R, 1).EntireRow.Delete
    Else
    If i = SidsteRække Then Exit For
    R = R + 1
    End If
Next i

End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester