Avatar billede chicoboy Novice
23. april 2012 - 20:11 Der er 18 kommentarer og
1 løsning

Makro der sletter række hvis der står noget besteme i en kolonne

I kolonne B står der navne. I nogle celler i kolonne B står dog nogen steder data, der ikke er navne.

Det kan dreje sig om tal og nogle bestemte ord/bogstaver fx "fail" "afb" "x" og "o" (bogstavet o)

Er der nogen der har et bud på en makro som sletter de rækker hvor der ikke står et navn i kolonne B?
Avatar billede store-morten Ekspert
30. april 2012 - 01:50 #1
Prøv at teste disse 3 makroer, på en kopi af dit ark, lavet i et andet spørgsmål.

Til makro "sletRækkeFraListe"
Opret et Ark4 (fane) og tast din liste i A2 og ned (Oveskrift i A1: "Søge ord:")

Tip til "sletRækkeMedIndtast" og "sletRækkeFraListe":
Sæt evt. mellemrum før og efter "søge ord" for nøjagtighed.

Sub sletRækkeMedFail()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

Columns("B:B").Select
    Selection.AutoFilter
    ActiveSheet.Range("B:B").AutoFilter Field:=1, Criteria1:="=* fail *" _
        , Operator:=xlAnd
    Sidste = Cells(Rows.Count, "B").End(xlUp).Row
If Sidste = 1 Then GoTo Ingen
    Rows("2:" & Sidste).Delete Shift:=xlUp
Ingen:
    ActiveSheet.Range("B:B").AutoFilter Field:=1
    Selection.AutoFilter
    Range("A1").Select
   
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub


Sub sletRækkeMedIndtast()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

        Dim svar1 As String
        Dim svar2 As String
        svar1 = InputBox("Indtast kolonne bogstav")
        If svar1 = vbchancel Then GoTo Slut
        svar2 = InputBox("Indtast søge ord?")
        If svar2 = vbchancel Then GoTo Slut

Columns(svar1 & ":" & svar1).Select
    Selection.AutoFilter
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1, Criteria1:="=*" & svar2 & "*" _
        , Operator:=xlAnd
    Sidste = Cells(Rows.Count, svar1).End(xlUp).Row
If Sidste = 1 Then GoTo Ingen
    Rows("2:" & Sidste).Delete Shift:=xlUp
Ingen:
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1
    Selection.AutoFilter
    Range("A1").Select
   
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub


Sub sletRækkeFraListe()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

    Dim iRow As Integer 'Rækken der arbejdes med
    iRow = 2 'Sæt hvilken række der startes fra
   
    Do While Sheets(4).Range("A" & iRow).Value <> "" 'Så længe der er data I kolonne "læsekolonnen"
            søgord = Sheets(4).Range("A" & iRow).Value
       
            Columns("B:B").Select
                Selection.AutoFilter
                ActiveSheet.Range("B:B").AutoFilter Field:=1, Criteria1:="=*" & søgord & "*" _
                    , Operator:=xlAnd
                Sidste = Cells(Rows.Count, "B").End(xlUp).Row
            If Sidste = 1 Then GoTo Ingen
                Rows("2:" & Sidste).Delete Shift:=xlUp
Ingen:
                ActiveSheet.Range("B:B").AutoFilter Field:=1
                Selection.AutoFilter
                Range("A1").Select
         
            iRow = iRow + 1 'Forbered læsning af næste række
    Loop 'Afslut loopet

Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub
Avatar billede chicoboy Novice
01. maj 2012 - 01:13 #2
Tak!

Dine makroer sletRækkeMedIndtast()og sletRækkeFraListe()virker fint og supplerer hindanden godt.

To ønsker:

Hvis der i kolonnen står et enkelt bogstav fx "O" så slettes alle rækker hvori der i kolonnen optræder et o - kan det undgås? (mine navne med o i bliver slettet)

Og hvis der i kolonnen står et (vilkårligt) tal, kan man så også få slettet rækken?

(smid et pointsvar - de to makroer i sig selv kan bruges)
Avatar billede store-morten Ekspert
01. maj 2012 - 01:27 #3
Står de bestemte ord/bogstaver fx "fail" "afb" "x" og "o" alene i cellerne?
Avatar billede chicoboy Novice
01. maj 2012 - 01:34 #4
Ja, det gør de.
Avatar billede store-morten Ekspert
01. maj 2012 - 01:35 #5
Så prøv at slette de to *
Avatar billede store-morten Ekspert
01. maj 2012 - 01:37 #6
Sub sletRækkeMedIndtast()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

        Dim svar1 As String
        Dim svar2 As String
        svar1 = InputBox("Indtast kolonne bogstav", "Slet rækker, der indeholder ord?")
        If svar1 = vbchancel Then GoTo Slut
        svar2 = InputBox("Indtast søge ord?", "Slet rækker, der indeholder ord?")
        If svar2 = vbchancel Then GoTo Slut

Columns(svar1 & ":" & svar1).Select
    Selection.AutoFilter                                                'to * slettet herunder
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1, Criteria1:="=" & svar2 & "" _
        , Operator:=xlAnd
    Sidste = Cells(Rows.Count, svar1).End(xlUp).Row
If Sidste = 1 Then GoTo Ingen
    Rows("2:" & Sidste).Delete Shift:=xlUp
Ingen:
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1
    Selection.AutoFilter
    Range("A1").Select
   
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub
Avatar billede store-morten Ekspert
01. maj 2012 - 01:44 #7
Så sku det virke, så O slettes, Ole og Ole O beholdes,
ligeledes slettes 1 men ikke 112 og 1 12
Avatar billede chicoboy Novice
01. maj 2012 - 21:14 #8
Det virkede. Så mangler kun situation hvor der står et tal i kolonnen. Men makroen sparer mig for en del arbejde.

Tak for hjælpen!
Avatar billede store-morten Ekspert
01. maj 2012 - 21:25 #9
virker den ikke på tal?

ligeledes slettes 1 men ikke "112" og "1 12"
Avatar billede chicoboy Novice
01. maj 2012 - 21:41 #10
jo - men da der er tale om vilkårlige tal (nogle tidsmålinger) så var min tanke at makroen genkendte at der stod et tal i cellen og så slettede rækken.

dvs der kan forekomme fx 50 tal og så er det lige så hurtigt at slette rækkerne manuelt (ift din makro)
Avatar billede store-morten Ekspert
01. maj 2012 - 22:11 #11
tal (nogle tidsmålinger)

Er det 'Tal' eller Tidsformat?
Avatar billede chicoboy Novice
01. maj 2012 - 22:18 #12
Data er hentet fra internettet - fx 28,62 sekunder (i cellen står der 28,62) - tror bare Excel opfatter dem som standardtal
Avatar billede store-morten Ekspert
01. maj 2012 - 22:21 #13
Prøv denne, på en kopi af dit ark.
Sletter rækker hvor der står et tal i cellerne:
Sub SletRækkerMedTal()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

Dim svar1 As String
Dim sidste As Double

svar1 = InputBox("Indtast kolonne bogstav", "Slet Rækker Med Tal")

    sidste = Range(svar1 & Rows.Count).End(xlUp).Row
        For i = sidste To 1 Step -1
            If IsNumeric(Range(svar1 & i).Value) Then
                Range(svar1 & i).EntireRow.Delete
            End If
        Next
       
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub
Avatar billede store-morten Ekspert
01. maj 2012 - 22:36 #14
Eller måske denne som minder om de første:
Sub SletRækkerMed_Tal()
On Error GoTo Slut
home = ActiveCell.Address
homeArk = ActiveSheet.Name

Application.ScreenUpdating = False

        Dim svar1 As String
        svar1 = InputBox("Indtast kolonne bogstav", "Slet Rækker Med Tal")
        If svar1 = vbchancel Then GoTo Slut

Columns(svar1 & ":" & svar1).Select
    Selection.AutoFilter
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1, Criteria1:=">0", _
        Operator:=xlAnd
    sidste = Cells(Rows.Count, svar1).End(xlUp).Row
If sidste = 1 Then GoTo Ingen
    Rows("2:" & sidste).Delete Shift:=xlUp
Ingen:
    ActiveSheet.Range(svar1 & ":" & svar1).AutoFilter Field:=1
    Selection.AutoFilter
    Range("A1").Select
   
Sheets(homeArk).Select
Range(home).Select

GoTo Slut
Slut:
Application.ScreenUpdating = True
End Sub
Avatar billede store-morten Ekspert
01. maj 2012 - 22:44 #15
Makroerne med AutoFilter
Bruger, som du nok kan gætte, AutoFilter, til at søge rækkerne ud, og sletter dem i et hug.
(I dit tilfælde, søges alle tal >0, og slettes)

Makroerne med IsNumeric
Gennemløber en række af gangen, og er der et tal i en celle, slettes rækken.
(Er der mange rækker, kan den godt være lidt langsom.)
Avatar billede chicoboy Novice
01. maj 2012 - 22:43 #16
Næsten - talrækker bliver slettet - men den tager rækker med tomme celler med.Se ex herunder her vil overskriften Kuglestød blive slettet og den tomme række ovenover.


        Oskar Møller
   
kuglestød   
1      Trine Mulbjerg
      14,59
2      Emil Bønning Petersen
Avatar billede store-morten Ekspert
01. maj 2012 - 22:48 #17
Prøv #14
Avatar billede chicoboy Novice
01. maj 2012 - 22:48 #18
Din sidste makro virkede efter hensigten!

SUPER - meget taknemmelig :-)
Avatar billede store-morten Ekspert
01. maj 2012 - 22:53 #19
Fint.

Tomme celler bliver "fanget" med IsNumeric!

Men tomme celler er ikke >0
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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