16. august 2005 - 18:01Der er
12 kommentarer og 1 løsning
Betinget formatering mellem 2 ark - evt. VBA
Hej
Jeg har forsøgt at anvende Betinget formatering til sammelligning af celler mellem 2 ark. Betinget Formatering kan dog ikke anvendes over flere ark, hvorfor jeg søger et alternativ til dette.
Er der nogen der har en ide til en løsning evt. ved hjælp af VBA?
Eksempel:
Jeg ønsker at undersøge om der er forskel på indholdet af en given celle i et ark i forhold til samme celle i et andet ark. Hvis der er forskel i indholdet af de to celler skal cellen farves Gul.
Der er altså ikke tale om en almindelig HVIS funktion da jeg ikke ønsker funktioner i cellerne i arkene!
For i = 0 To kolonner - 1 For o = 0 To raekker - 1 vArk(o, i) = Cells(o + 1, i + 1).Value Next o Next i
Sheets("Ark2").Select For i = 0 To kolonner - 1 For o = 0 To raekker - 1 If Not Cells(o + 1, i + 1).Value = vArk(o, i) Then Cells(o + 1, i + 1).Interior.Color = vbYellow Next o Next i
Sub SammenlignArk() Dim AD As String, FArk As Variant, Sammenlign As Variant, I As Long, K As Integer, N As Integer AD = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Address K = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Column
For I = 1 To UBound(FArk) For N = 1 To K If FArk(I, N) <> Sammenlign(I, N) Then Cells(I, N).Interior.Color = vbYellow Else Cells(I, N).Interior.ColorIndex = xlNone End If Next N Next I
brynil > ved mig virker din også, men markerer i ark2.
min markerer i ark1
forresten en ny kode, den skulle være hurtigere
Sub SammenlignArk() ST = Now() Dim AD As String, FArk As Variant, Sammenlign As Variant, i As Long, K As Integer, N As Integer
Cells.Interior.ColorIndex = xlNone AD = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Address K = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Column FArk = Sheets("Ark1").Range("a1:" & AD) Sammenlign = Sheets("Ark2").Range("a1:" & AD)
Application.ScreenUpdating = False For i = 1 To UBound(FArk) For N = 1 To K If FArk(i, N) <> Sammenlign(i, N) Then Cells(i, N).Interior.Color = vbYellow End If Next N Next i
Application.ScreenUpdating = True MsgBox K * UBound(FArk) & " celler tog " & Format(Now - ST, "ss") & " sekunder" End Sub
I er rigtig gode begge to, men der er lige en krølle på spørgsmålet:
hvis der står en værdi i ark 1 men ikke i ark 2, kan det så også markeres med gult i ark 2, at der "mangler" en værdi i f.t. ark 1? Det gør makroen ikke lige i øjeblikket.
Sub SammenlignArk() ST = Now() Dim AD As String, FArk As Variant, Sammenlign As Variant, i As Long, K As Integer, N As Integer
Sheets("Ark1").Cells.Interior.ColorIndex = xlNone Sheets("Ark2").Cells.Interior.ColorIndex = xlNone AD = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Address K = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Column FArk = Sheets("Ark1").Range("a1:" & AD)
Sammenlign = Sheets("Ark2").Range("a1:" & AD)
Application.ScreenUpdating = False For i = 1 To UBound(FArk) For N = 1 To K If FArk(i, N) <> Sammenlign(i, N) Then Sheets("Ark1").Cells(i, N).Interior.Color = vbYellow If FArk(i, N) <> "" And Sammenlign(i, N) = "" Then Sheets("Ark2").Cells(i, N).Interior.Color = vbYellow End If End If Next N Next i
Application.ScreenUpdating = True MsgBox K * UBound(FArk) & " celler tog " & Format(Now - ST, "ss") & " sekunder" End Sub
Kabbak, nu markerer den kun, hvis der mangler en værdi, men kan den kobles sammen, så den BÅDE markerer celler, der er forskellig fra samt markerer, hvis der mangler en værdi?
Sub SammenlignArk() ST = Now() Dim AD As String, FArk As Variant, Sammenlign As Variant, i As Long, K As Integer, N As Integer
Sheets("Ark1").Cells.Interior.ColorIndex = xlNone Sheets("Ark2").Cells.Interior.ColorIndex = xlNone AD = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Address K = Sheets("Ark1").Range("A1").SpecialCells(xlLastCell).Column FArk = Sheets("Ark1").Range("a1:" & AD)
Sammenlign = Sheets("Ark2").Range("a1:" & AD)
Application.ScreenUpdating = False For i = 1 To UBound(FArk) For N = 1 To K If FArk(i, N) <> Sammenlign(i, N) Then Sheets("Ark1").Cells(i, N).Interior.Color = vbYellow Sheets("Ark2").Cells(i, N).Interior.Color = vbYellow If FArk(i, N) <> "" And Sammenlign(i, N) = "" Then Sheets("Ark2").Cells(i, N).Interior.Color = vbRed End If End If Next N Next i
Application.ScreenUpdating = True MsgBox K * UBound(FArk) & " celler tog " & Format(Now - ST, "ss") & " sekunder" 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.