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.
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.
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
@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.
#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
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.
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:
@Jens: Kopierede hele din makro. Højreklikkede på fanebladet "jens48" Indsatte det kopierede under "Vis programkode" (på en tom canvas) Kørte makroen... Intet!
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.
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
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
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?
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.