Avatar billede tvc Seniormester
16. august 2005 - 18:01 Der 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!

Med venlig hilsen

TVC
Avatar billede stewen Praktikant
16. august 2005 - 18:10 #1
du kan godt bruge betinget formatering mellem ark - dog kræver det at du navngiver cellerne! (ctrl+f3)
Avatar billede tvc Seniormester
16. august 2005 - 18:16 #2
Nu er det alle cellerne i arkene der skal sammenlignes - såååå :-)
Avatar billede brynil Nybegynder
16. august 2005 - 18:56 #3
Sub SammenlignArk()
Dim vArk()
Dim raekker, kolonner, i, o As Long

Sheets("Ark1").Select

raekker = Range("A65000").End(xlUp).Row
kolonner = Range("IV1").End(xlToLeft).Column

ReDim vArk(raekker - 1, kolonner - 1)

Application.ScreenUpdating = False

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

Application.ScreenUpdating = True
End Sub

Det er 1 måde at gøre det på !
Avatar billede kabbak Professor
16. august 2005 - 19:53 #4
mit bud:

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
   
    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
          Else
          Cells(I, N).Interior.ColorIndex = xlNone
          End If
        Next N
    Next I

Application.ScreenUpdating = True
End Sub
Avatar billede tvc Seniormester
16. august 2005 - 21:41 #5
Tak for hjælpen begge!

Jeg har anvendt Brynils, da dette var den første og den virker helt efter hensigten.

Kabbak - Jeg håber det er i orden at jeg giver point'ne til Brynil!

Smider du et svar Brynil?

TVC
Avatar billede tvc Seniormester
16. august 2005 - 21:48 #6
Må desværre beklage brynil men det var kabbaks der virkede - fik byttet om på jeres makroer :-(

Jeg kan ikke se at din (brynil) farver cellerne der differerer fra cellerne i det andet ark.

kabbak smider du et svar?

TVC
Avatar billede brynil Nybegynder
16. august 2005 - 21:55 #7
Det er helt iorden. kabbak's er også kortere. (Altså, makroen) ;)) Sorry!

Jeg ku nu godt tænke mig at vide hvor min fejler, for den fungerede fint nok på min testside. Måske kabbak har en idé om hvor den kan forårsage fejl?!
Avatar billede kabbak Professor
16. august 2005 - 22:51 #8
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
Avatar billede tvc Seniormester
17. august 2005 - 09:58 #9
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.

Mvh. TVC
Avatar billede kabbak Professor
17. august 2005 - 10:04 #10
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
Avatar billede tvc Seniormester
17. august 2005 - 10:12 #11
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?
Avatar billede kabbak Professor
17. august 2005 - 10:15 #12
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
Avatar billede tvc Seniormester
17. august 2005 - 10:22 #13
Tusind tak, nu virker det helt perfekt!

Mvh. TVC
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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