03. september 2007 - 16:28Der er
12 kommentarer og 2 løsninger
Slette linjer, hvori der findes tekst med en given farve
Jeg har 3 kolonner med hhv. varenr (tekst), salgspris (decimaltal) og kostpris (decimaltal). Nogle af tallene er farvet rød eller blå. Linjer med disse tal vil jeg gerne udvælge og have slettet, så kun linjer, der står med sort skrift står tilbage. Hvordan gør jeg nemmest dette? Ps: Dette skal gøres et par gange hver måned i 10-15 regneark, så processen skal kunne gentages. Jeg vil helst undgå for avancerede makroer, så løsninger med evt. flere manuelle trin foretrækkes. På forhånd tak.
marker det område, der skal tjekkes, kun en kolonne af gangen, kør så makroen.
Sub DeleteRedAndBlueRows() Dim X As Long, Seller As Variant Seller = RangeRowColumns(Selection) For X = Val(Seller(4)) To Val(Seller(2)) Step -1 If Cells(X, Seller(1)).Font.ColorIndex = 5 Or _ Cells(X, Seller(1)).Font.ColorIndex = 3 Then Rows(Cells(X, Seller(1)).Row).Delete End If Next End Sub
Function RangeRowColumns(rtest As Range) As Variant Dim st As String Dim X As Integer st = rtest.Address st = Replace(st, ":", "") RangeRowColumns = Split(st, "$") End Function
Sub DeleteRedAndBlueRows() Dim X As Long, Y As Integer, Seller As Variant Seller = RangeRowColumns(Selection) For Y = Asc(Seller(1)) - 64 To Asc(Seller(3)) - 64 For X = Val(Seller(4)) To Val(Seller(2)) Step -1 If Cells(X, Y).Font.ColorIndex = 5 Or _ Cells(X, Y).Font.ColorIndex = 3 Then Rows(Cells(X, Seller(1)).Row).Delete End If Next Next End Sub
Function RangeRowColumns(rtest As Range) As Variant Dim st As String Dim X As Integer st = rtest.Address st = Replace(st, ":", "") RangeRowColumns = Split(st, "$") End Function
Sub DeleteRedAndBlueRows() Dim X As Long, Y As Integer, Seller As Variant Seller = RangeRowColumns(Selection) For Y = Asc(Seller(1)) - 64 To Asc(Seller(3)) - 64 For X = Val(Seller(4)) To Val(Seller(2)) Step -1 If Cells(X, Y).Font.ColorIndex = 5 Or _ Cells(X, Y).Font.ColorIndex = 3 Then Rows(Cells(X, Y).Row).Delete End If Next Next End Sub
Ja, der må gerne sorteres - rækkernes rækkefølge er ligegyldig. (I øvrigt er jeg IMPONERET over så hurtige kommentarer/løsninger! Jeg vil afprøve det straks i morgen.
Nu er koden ændret, så hvis du kun aktivere 1 celle, vil den vælge hele dataområdet fra A1 af, ellers kører den det du har markeret.
Sub DeleteRedAndBlueRows() Dim X As Long, Y As Integer, Seller As Variant If Selection.Cells.Count = 1 Then Range(Range("A1"), Range("A1").SpecialCells(xlLastCell)).Select Seller = RangeRowColumns(Selection) For Y = Asc(Seller(1)) - 64 To Asc(Seller(3)) - 64 For X = Val(Seller(4)) To Val(Seller(2)) Step -1 If Cells(X, Y).Font.ColorIndex = 5 Or _ Cells(X, Y).Font.ColorIndex = 3 Then Rows(Cells(X, Y).Row).Delete End If Next Next End Sub
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.