Avatar billede gulfen Nybegynder
27. maj 2004 - 23:25 Der er 12 kommentarer og
1 løsning

macro til sammenligning af naboceller

Jeg skal bruge en macro som kan gennemløbe et antal rækker og for hver række sammenligne hver celle med nabocellen.
Hvis indholdet i en celle er "ugyldig" skal det markeres ved at cellen blinker. Efter et gennemløb af rækkerne kan der altså være mere end en celle som står og blinker!

Forestil Jer en vagtplan hvor en person typisk har forskellige vagttyper hen over en periode på eks. tre måneder. Hver celle i en række dækker et enkelt døgn og kan kun indeholde et enkelt bogstav som beskriver en "vagttype": D=dagvagt, A=aftenvagt, N=nattevagt, F=Fri osv.

En person kunne eks. have én uge som ser sådan ud:
Man, Tir, Ons, Tor, Fre, Lør, Søn
D    D    A    A    A    F    F

Et kriterie er, at man ikke må have en dagvagt umiddelbart efter en nattevagt (noget med overenskomster), og det er de situationer jeg vil fange. Eksemplet herunder vil blinke i cellerne under Tirsdag og Torsdag:

Man, Tir, Ons, Tor, Fre, Lør, Søn
A    D    A    D    A    F    F
Avatar billede gulfen Nybegynder
27. maj 2004 - 23:28 #1
Rettelse til sidste linie:

Man, Tir, Ons, Tor, Fre, Lør, Søn
N    D    N    D    A    F    F
Avatar billede kabbak Professor
27. maj 2004 - 23:36 #2
hvilke kolonner, og er det ikke nok at farvelægge cellen, istedet for blinkende. ?
Avatar billede kabbak Professor
27. maj 2004 - 23:51 #3
Sub FarvFelter()
    Range("B2").Select ' Øverste venstre celle i området
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    For Each C In Selection.Cells
    If C = "N" And C.Offset(0, 1) = "D" Then
    C.Offset(0, 1).Select
    With Selection.Interior
        .ColorIndex = 3
        .Pattern = xlSolid
    End With
    Else
    C.Offset(0, 1).Select
    Selection.Interior.ColorIndex = xlNone
    End If
    Next
End Sub
Avatar billede gulfen Nybegynder
27. maj 2004 - 23:54 #4
Jeg benytter en macro i forvejen som farver cellerne alt efter vagttype.
- til 200 point skal den helst blinke! ;-)
Avatar billede gulfen Nybegynder
28. maj 2004 - 00:13 #5
Det virker fint, nu mangler vi bare at cellen blinker!
Avatar billede kabbak Professor
28. maj 2004 - 00:20 #6
Men blink eksisterer ikke i excel'
Avatar billede kabbak Professor
28. maj 2004 - 00:21 #7
det tætteste du kommer på blink er vist her, men det er ikke til at stoppe igen.

http://www.eksperten.dk/spm/279061
Avatar billede gulfen Nybegynder
28. maj 2004 - 00:45 #8
Ja, det var vist det samme jeg fandt her:

http://66.102.11.104/search?q=cache:VujaYspIi18J:personal-computer-tutor.com/abc3/v20/chad20.htm+blinking+cells+in+excel&hl=en

Jeg kan godt leve unde blink indtil der dukker en "rigtig" løsning op, så hvis du kommer med et svar, så er pointene dine!
Avatar billede kabbak Professor
28. maj 2004 - 00:54 #9
Ok, så et svar ;-)).

Men hvis du finder ud af et smart blink, så er vi mange der gerne vil vide det.
Avatar billede kabbak Professor
28. maj 2004 - 10:50 #10
Hvis du taster ind manuel, kan du fange fejl i indtastning, med en kode liggende i:

Private Sub Worksheet_Change(ByVal Target As Range)

Kode

End Sub


jeg kan lave den senere hvis du er interreseret
Avatar billede gulfen Nybegynder
28. maj 2004 - 13:05 #11
Det er ikke usandynligt at jeg bliver det. Og jeg havde slet ikke overvejet at fange de ugyldige værdier 'on the fly'.

Men jeg har i mellemtiden overvejet en anden løsning:

I stedet for de blinkende celler så vil jeg udvide din macro betydeligt, sådan at den genererer en dialogboks med en liste over de celler som har ugyldige værdier.
Jeg nævnte kun et kriterie tidligere, men der er mange flere; eksempelvis at der maks. må være 12 døgn mellem to fridage, eller at man kun to gange på en uge må have et "vagtskifte" hvor der kun er 8 fritimer imellem (eks fra A->D => at man har fri kl. 24 og skal møde kl. 7)

Jeg vender tilbage!
Avatar billede gulfen Nybegynder
28. maj 2004 - 15:35 #12
Fandt en løsning som jeg kan acceptere og som fanger de ugyldige værdier 'on the fly':

Her er min makro (worksheet) som nu både håndterer farver og blink ;-)

Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finito
If Not Intersect(Target, Range("K16:AZ66")) Is Nothing Then
    Target.Font.ColorIndex = 0 'Sort
    Select Case Target.Value
               
        Case "FRI": Target.Interior.ColorIndex = 45 'Orange
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "A9": Target.Interior.ColorIndex = 44 'Gul
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "NUL": Target.Interior.ColorIndex = 16 'Grå
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "D": Target.Interior.ColorIndex = 23 'Blå
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "DE": Target.Interior.ColorIndex = 33 'LysBlå
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "A": Target.Interior.ColorIndex = 10 'Grøn
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case "N": Target.Interior.ColorIndex = 3 'Rød
                    Target.Font.ColorIndex = 2 'Hvid
                    Target.Font.Bold = True
       
        Case Else
            Target.Interior.ColorIndex = 19
    End Select
End If

Blinking:
For Each C In Target.Cells
    If C = "N" And C.Offset(0, 1) = "D" Then
      C.Offset(0, 1).Select
      For i = 1 To 10
            ' set one color
            With Target.Interior
                .ColorIndex = 2
                .Pattern = xlSolid
                Call Sleep(100)
            End With
   
            ' set another color
            With Target.Interior
                .ColorIndex = 1
                .Pattern = xlSolid
                Call Sleep(100)
            End With
      Next i
    End If
  Next C
End Sub
Avatar billede kabbak Professor
28. maj 2004 - 23:40 #13
Blinking:
    If Target = "N" And Target.Offset(0, 1) = "D" Or _
    Target = "D" And Target.Offset(0, -1) = "N" Then ' Tjekker til begge sider (god hvis du retter)
        For i = 1 To 10
            ' set one color
            With Target.Interior
                .ColorIndex = 2
                .Pattern = xlSolid
                Call Sleep(100)
            End With
   
            ' set another color
            With Target.Interior
                .ColorIndex = 1
                .Pattern = xlSolid
                Call Sleep(100)
            End With
        Next i
        Target.Select
    End If


et forslag, men din er ellers god
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