Avatar billede ab58 Novice
03. marts 2016 - 18:55 Der er 19 kommentarer og
1 løsning

Hvordan sletter jeg rækker, hvor en af cellerne indeholder f.eks. " az", ".com", "www", "san antonio", etc.?

Hej eksperter,

Har Excel 2010 på dansk.

Planlægger at downloade jævntligt ca. 250 rækker og 12-13 kolonner, med data.

Kolonne nr. 2 har overskriften "Keywords"/nøgleord.

Ønsker at automatisere fjernelse af hele rækker hvor cellen i kolonne nr. 2 indeholder følgende ord/tegn:

" az" (mellemrum efterfulgt af az)
" ct"
"san antonio"
"texas"
".com"
".org"
"near me"
"www"

Ovenstående er 8 typiske eksempler af en liste af ca. 50 uønskede ord/tegn og listen vokser!

Kan nogen hjælpe mig med en løsning?
Avatar billede kim1a Ekspert
03. marts 2016 - 20:18 #1
Her er første skridt med eksemplet "near me":

Sub fjern_reakke()

For r = 1 To Rows.Count

If Cells(r, 2).Value = "near me" Then
Rows(r).EntireRow.Delete
End If

Next r

End Sub

Så kan du lave flere if sætninger, men det kan være en anden kan hjælpe med en nemmere løsning.
Avatar billede ab58 Novice
03. marts 2016 - 21:03 #2
Tak Kim.

Hvordan gør jeg dit forslag til en makro?

Rediger Makro > Visual Basic > VBA Project (Mappe1)> Ark1 (Ark1) > (højreklik) > View Code > (jeg kopierede din formel og sat den ind her)... Men hvordan giver jeg makro'en en genvejstast?

Undskyld det ekstra spørgsmål.



HAR SELV FUNDET FØLGENDE MANUEL LØSNING:
-----------------------------------------------------------
Har lavet 50 betingede formateringer, som følger:

Formater > Betinget formatering > Fremhæv celleregler > Tekst der indeholder... (Jeg tastede de ord jeg ikke ønskede). Formateringsfarve er den samme for alle 50 betingelser.

Resultat: Alle rækker med celle i række 2, der indeholder uønskede ord bliver farvet.

Nu kan jeg filtrere farvede rækker væk.



Kan det gøres bedre (mere automatisk)?
Avatar billede kim1a Ekspert
03. marts 2016 - 21:50 #3
Ah, jeg troede du kendte til makro - sorry.

i VBA editor højreklikker du på dit ark, så vælger du indsæt module. Der kopierer du teksten ind. Så kan du nu vælge som makro og kan evt. indsætte en knap der kører den.
Avatar billede jens48 Ekspert
03. marts 2016 - 22:54 #4
Hvis du har alle de uønskede ord atående i række 1 (begyndende i A1) og dine data fra række 3 og nedefter kan du bruge denne makro:

Sub SletRaekke()
Dim x, y, m, n As Long
x = Application.CountA(Rows(1))
y = Application.CountA(Columns(2))
For m = 1 To x
For n = y + 2 To 3 Step -1
If Cells(1, m) = Cells(n, 2) Then
Rows(n).Delete
End If
Next
Next
End Sub
Avatar billede ab58 Novice
03. marts 2016 - 23:36 #5
Tak for hjælpen Jens og Kim.

@Kim:
Kunne ikke finde ud af at oprette en makro udfra dit forslag. Har derfor optaget en "ligegyldig" makro og omskrevet den.
Når jeg så aktiverer makroen, kører den i 5 sek og stopper uden at slette noget.

Kan den kun slette hvis det uønskede ord er i række 2?
Ordet "near me" er i række 18 (B18)


@Jens:
Omskrev Kims Makro med din. Prøvede at aktivere makroen... Samme som før - ingenting!

Her er detaljerne:

Skrev:
---------------
"near me" i A1
" pa" i B1
".com" i C1  osv. (og uden anførselstegn).


Kopierede nogle data i C1:L21:
---------------
En del rækker havde de uønskede ord i kolonne 2.


Kørte følgende makro ved at trykke "Ctrl+F"  (kørte og stoppede uden at slette noget):
---------------
Sub SletRaekke()
'
' SletRaekke Makro
' Slet række der indeholder "near me".
'
' Genvejstast:Ctrl+f
'
   
Dim x, y, m, n As Long
x = Application.CountA(Rows(1))
y = Application.CountA(Columns(2))
For m = 1 To x
For n = y + 2 To 3 Step -1
If Cells(1, m) = Cells(n, 2) Then
Rows(n).Delete
End If
Next
Next

End Sub


Det KAN skyldes at jeg ikke oprettede makroen/-erne korrekt!

Indtil videre er min løsning den bedste, men VIL gerne lære at oprette makroer, hvis nogen kan spore en fejl.

Værdsætter meget jeres hjælp.

ab58 = Asser
Avatar billede store-morten Ekspert
04. marts 2016 - 09:59 #6
#2
"Resultat: Alle rækker med celle i række 2, der indeholder uønskede ord bliver farvet.

Nu kan jeg filtrere farvede rækker væk.

Kan det gøres bedre (mere automatisk)?"


Prøv:
Sub SletRækker()
svar = MsgBox("Makroen vil slette rækker med rød bagrund i kollonne B." & vbNewLine & _
"Kan ikke fortrydes, vil du fortsætte?", vbYesNo + vbInformation)
If svar = vbYes Then
       
    For Each c In ActiveSheet.Range("B2:B500").Cells
        If c.Interior.ColorIndex = 3 Then
            c.Rows.Delete
        End If
    Next c
   
Else
End If
End Sub
Avatar billede kim1a Ekspert
04. marts 2016 - 09:57 #7
Du skriver i første indlæg at indholdet du ønsker at filtrere/slette på står i kolonne 2. Derfor er den lille makro sat op til at gennemgå hver række (r) og se i cellen der står r,2 = række 1 kolonne 2.

Det undrer mig at den ikke sletter din række. Må jeg foreslå at du uploader et eksempel så vi begge kan se på det.
Avatar billede ab58 Novice
04. marts 2016 - 13:05 #8
Ih tak :-)

Desværre virkede ingen af de 3 forslåede makroer. Men før nogen protesterer, kan det sagtens være, at det er min skyld. Jeg er ikke god til VBA.

Har derfor bestemt at følge Kims råd og oploade projektet.
Ved ikke hvordan man normalt oploader her, men valgte at oploade til min dropbox. I kan downloade fra følgende adresse:

https://www.dropbox.com/s/qfetuaiknhfvs9d/Test.xlsm?dl=0

@store-morten:
Kunne du lave en makro som fjerner lyserøde rækker (det er nemmere for mig, da det er standard farve ved betinget formatering).


Tak igen.
ab58 (Asser)
Avatar billede jens48 Ekspert
04. marts 2016 - 13:13 #9
Prøv at kopiere hele min makro, højreklik på fanebladet og indsæt den under vis koder. Og kør den så derfra
Avatar billede ab58 Novice
04. marts 2016 - 13:57 #10
@Jens:
Kopierede hele din makro.
Højreklikkede på fanebladet "jens48"
Indsatte det kopierede under "Vis programkode" (på en tom canvas)
Kørte makroen...
Intet!

Her er en videooptagelse af mig køre makroen.
https://www.dropbox.com/s/iwrl8dumkcpa3pi/Blev-ikke-fjernet.mp4?dl=0

Forstår ikke hvorfor!

ab58 (Asser)
Avatar billede kim1a Ekspert
04. marts 2016 - 13:58 #11
Det forklarede i hvert fald noget for mig.

Jeg har defineret makroen til at tage cellens værdi og ikke kun indeholder - jeg beklager :-)

Jeg læser mig til at dette skal kombineres ind:
celltxt = cells(r,2).Text
If InStr(1, celltext, "Near me") > 0

, men jeg kan også se at makroen er lang tid om at afslutte fordi den definerer rækkerne til at gå til bund i arket (1 mio rækker), så jeg tror du skal satse på en af de andres løsning.
Avatar billede ab58 Novice
04. marts 2016 - 14:05 #12
Forstået kim. Tak :-)
Avatar billede excelent Ekspert
04. marts 2016 - 21:15 #13
Sub Slet_rk()
  With Columns("B")
    .Replace "*pa*", "#N/A", xlWhole
    .Replace "*near me*", "#N/A", xlWhole
    .Replace "*.com*", "#N/A", xlWhole
    .Replace "*mn*", "#N/A", xlWhole
    On Error Resume Next
    Intersect(Cells, .SpecialCells(xlConstants, xlErrors).EntireRow).Delete
    On Error GoTo 0
  End With
End Sub


følgende 2 linier i kode herover skal stå på 1 (samme) linie

    Intersect(Cells, .SpecialCells(xlConstants, xlErrors).EntireRow).Delete
Avatar billede excelent Ekspert
04. marts 2016 - 21:16 #14
Glem de 2 nederste linier,- det blev ikke aktuel kan jeg se
Avatar billede jens48 Ekspert
05. marts 2016 - 00:11 #15
Min antagelse var at der ikke stod andet i cellen. Nu har jeg rettet den til, så den sletter rækken hvis et af ordene i række 1 står i cellen. Min makro har den fordel at du ikke behøver redigere i makroen, hvis der kommer flere ord til:

Sub SletRaekke()
Dim x, y, m, n As Long
x = Application.CountA(Rows(1))
y = Application.CountA(Columns(2))
For m = 1 To x
For n = y + 2 To 3 Step -1
On Error GoTo A
If IsNumeric(Application.Search(Cells(1, m), Cells(n, 2), 1)) = True Then
Rows(n).Delete
A:
End If
Next
Next
End Sub
Avatar billede ab58 Novice
05. marts 2016 - 11:48 #16
FANTASTISK jens48!

Og tak til excelent... Din makro virker upåklageligt, dog er jens48's makro lettere at anvende fordi, som jens selv siger, behøver jeg ikke at rette i makroen hele tiden.

SKØNT!

Tak til kim1a, store morten, excelent og især jens48.

ab58 (Asser)


PS. Hvordan giver jeg dig point Kim (kim1a)? Kan du skrive et indlæg som svar i stedet for kommentar?
Avatar billede ab58 Novice
09. marts 2016 - 12:30 #17
Jeg skrev et indlæg som "Svar" kun for at se hvordan man giver point. Kunne desværre ikke lave den om til "Kommentar".

jens48!
Vil du være sød at lægge et svar så kan  jeg give dig point?

Ellers...
Kan nogen fortælle mig hvad jeg kan gøre for at afslutte denne, for mig, meget nyttige tråd?

ab58 (Asser)
Avatar billede jens48 Ekspert
09. marts 2016 - 19:00 #18
Når du accepterer dette svar (og afviser dit eget) afsluttes tråden
Avatar billede store-morten Ekspert
09. marts 2016 - 19:08 #19
Hvordan man accepterer svar på eksperten.dk

https://www.youtube.com/watch?v=s26DGiuvXBo
Avatar billede ab58 Novice
10. marts 2016 - 03:22 #20
Perfekt!
1000 tak.
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

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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Udviklere til Internationalt samarbejde

Formpipe Software A/S

Market Manager

Cognizant Technology Solutions Denmark ApS

Senior Consultant - Finance, Insurance, Pension