Avatar billede jtp Nybegynder
01. maj 2003 - 09:36 Der er 10 kommentarer og
1 løsning

Excel - Autofilter + ændring af baggrundsfarve

Hejsa

Håber der er nogen, der kan hjælpe mig.

Jeg får løbende lister med kundeoplysninger, hvor jeg skal foretage en sammenligning af disse lister for at finde dubletter. Disse lister kopierer jeg ind i et nyt regneark, der består af disse 2 ark:

  Gammel
  Ny

Til denne sammeligning har jeg indspillet følgende makro:

---Klip------

Sub Dubletter()
'
' Dubletter Makro
' Kontrollerer arket 'Gammel' for dubletter
'
' Genvejstast:Ctrl+æ
'
    Columns("B:B").Select
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Gammel!R2C1:R500C1,1,FALSE)"
    Range(Selection, Cells(ActiveCell.Row, 1)).Select
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B500"), Type:=xlFillDefault
    Range("B2:B500").Select
    Range("A1").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=2, Criteria1:="<>#I/T", Operator:=xlAnd
    Rows("5:5").Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
    Range("A1").Select
    Selection.AutoFilter Field:=2
    Selection.AutoFilter
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
End Sub

---Klip------

Problemet er desværre, at når jeg kører denne makro, så ændres baggrundsfarven for alle rækker fra A5 og opefter, fordi det var den første række under indspilningen.

Jeg vil gerne lave en markering, der fungerer således, at den markerer alle de synlige værdier, der er fremkommet via autofilter.

Er der nogen, der kan hjælpe?
Avatar billede jtp Nybegynder
01. maj 2003 - 09:58 #1
Jeg tror jeg har en noget nemmere løsning, om jeg stadig mangler lidt hjælp til:

Jeg har stadig de 2 regneark. I ark 2 (Ny) vil jeg gerne via makro gøre følgende:


Indsætte en ny kolonne i kolonne B.

Udfyld A2:A500 i kolonne B med følgende: "=LOPSLAG(A2;Gammel!$A$2:$A$500;1;FALSK)".

Skift baggrundsfarven til gul, hvor b2:b500 er lig med strengen #I/T.

Slet herefter kolonne B.


Det eneste jeg mangler er sådan set skift af baggrundsfarven. Kan dette lade sig gøre?

>>jtp<<
Avatar billede jtp Nybegynder
01. maj 2003 - 10:00 #2
Sludder og vrøvl:

Udfyld A2:A500 i kolonne B med følgende: "=LOPSLAG(A2;Gammel!$A$2:$A$500;1;FALSK)

skulle selvfølgelig have været:

Udfyld B2:B500 i kolonne B med følgende: "=LOPSLAG(A2;Gammel!$A$2:$A$500;1;FALSK)".
Avatar billede bak Forsker
01. maj 2003 - 10:03 #3
Hvis overskriften er i række 1

Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
    End With
Avatar billede bak Forsker
01. maj 2003 - 10:12 #4
Bemærk lige at denne linie sørge for at kun synlige rækker bliver farvet
Selection.SpecialCells(xlCellTypeVisible).Select
og at der startes ved A2
Avatar billede jtp Nybegynder
01. maj 2003 - 11:31 #5
Tak for dit svar, bak

Jeg kan desværre ikke få selve autofilter-delen til at virke, så jeg ekeperimeneterer med en anden løsning, der ser sådan ud:


---klip-----------

Sub Dubletter()
'
' Dubletter Makro
' Kontrollerer arket 'Gammel' for dubletter
'
' Genvejstast:Ctrl+æ
'

    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Gammel!R2C1:R500C1,1,FALSE)"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B500"), Type:=xlFillDefault
    Range("B2:B500").Select
    Range("A1").Select
    For i = 1 To 500
      Dim celle As String
      celle = "B" & i
      If (celle = "#I/T") Then
        Rows(i & ":" & i).Select
        With Selection.Interior
          .ColorIndex = 6
          .Pattern = xlSolid
        End With
      End If
    Next i

End Sub

---klip-----------

Desværre virker dette heller ikke. Jeg tror fejlen ligger i for-løkken. Formentlig i selv sammenligningen: "If (celle = "#I/T") Then".

Er det noget du kan hjælpe med?
Avatar billede bak Forsker
01. maj 2003 - 12:20 #6
Jeg har ændret en smule i din makro, men ikke haft lejlighed til at teste den:
Sub Dubletter()
'
' Dubletter Makro
' Kontrollerer arket 'Gammel' for dubletter
'
' Genvejstast:Ctrl+æ
'
Dim Celle As Range
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Gammel!R2C1:R500C1,1,FALSE)"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B500"), Type:=xlFillDefault
    Range("B2:B500").Select
    Range("A1").Select
    For i = 1 To 500
      Set Celle = Range("B" & i)
      If Celle.Value = CVErr(xlErrNA) Then
        Rows(i & ":" & i).Select
        With Selection.Interior
          .ColorIndex = 6
          .Pattern = xlSolid
        End With
      End If
    Next i

End Sub
Avatar billede jtp Nybegynder
01. maj 2003 - 12:25 #7
Jeg får en fejl på denne linie:

If Celle.Value = CVErr(xlErrNA) Then

Hvad gør CVErr(xlErrNA) ?
Avatar billede bak Forsker
01. maj 2003 - 15:44 #8
Håber du har fået det ellers er her en variation af min egen dublikat-mærker

Sub MarkDuplicates()
Dim AllCells As Range, cell As Range
Dim NoDupes As New Collection
Dim strCheck As String

    Set AllCells = Range("A1:A500")
    On Error Resume Next
    For Each cell In AllCells
        NoDupes.Add cell.Value, CStr(cell.Value)
    Next cell
    Err.Clear
   
    For Each cell In AllCells
        strCheck = CStr(cell.Value)
        If NoDupes(strCheck) <> 0 Then NoDupes.Remove strCheck
        If Err.Number <> 0 Then
            cell.EntireRow.Interior.ColorIndex = 6
            cell.EntireRow.Interior.Pattern = xlSolid
            Err.Clear
        End If
    Next
End Sub
Avatar billede jtp Nybegynder
01. maj 2003 - 15:53 #9
Hmm, det var mærkeligt. Jeg lavede tidligere et indlæg, hvor jeg skrev at jeg havde fundet en løsning. Den ser ud som følger:


---klip---------------
Sub FindDubletter()
'
' FindDubletter Makro
' Makro indspillet 01-05-2003
'

'
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Gammel!R2C1:R500C1,1,FALSE)"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B500"), Type:=xlFillDefault
    Range("B2:B500").Select
   
    For i = 2 To 500
      Dim celle
      Dim vaerdi
      celle = "B" & i
      vaerdi = "#I/T"
      Range(celle).Select
      If ActiveCell.Text <> vaerdi Then
        Rows(i & ":" & i).Select
        With Selection.Interior
          .ColorIndex = 6
          .Pattern = xlSolid
        End With
      End If
    Next i
   
    Columns("B:B").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select

End Sub
---klip---------------

Hvis du laver et svar, så kyler jeg lige lidt point efter dig :o)

I øvrigt tak for hjælpen.

>>jtp<<
Avatar billede bak Forsker
01. maj 2003 - 17:16 #10
Nej tak, ingen løsning = ingen point :-)
Der er fair nok...
Avatar billede jtp Nybegynder
01. maj 2003 - 18:31 #11
OK, jeg lukker spørgsmålet :o)
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