Avatar billede Claus Wøbbe Juniormester
17. juli 2014 - 10:06 Der er 5 kommentarer og
1 løsning

Overlappende datoer - VB?

Jeg har et regneark (Excel 2010), hvor jeg prøver at planlægge en række workshops. Hver workshop har et ID, en startdato og en slutdato. For hver mulig deltager vil jeg gerne have en markering (fx betinget formatering el.udråbstegnet som nedenfor) af, om deltagelse den pågældende dag overlapper deltagelse en anden dag.

    Start  Slut Hans  Grete  Knud  Mogens
WS1    2-9    2-9  x      x              x
WS2    4-9    7-9  x              x      x
WS3    6-9    6-9        x        x!    x!
WS4    8-9    9-9  x              x

Hvordan pokker laver man det?? Kan det overhovedet lade sig gøre?
Avatar billede supertekst Ekspert
17. juli 2014 - 10:22 #1
Ja - via VBA
Avatar billede Claus Wøbbe Juniormester
17. juli 2014 - 10:28 #2
Kunne en ekspert evt give et skelet til noget kode, så jeg på én eller anden måde kan komme i mål?
Avatar billede supertekst Ekspert
17. juli 2014 - 10:34 #3
Vender tilbage senere..
Avatar billede supertekst Ekspert
17. juli 2014 - 10:55 #4
Du er velkommen til at sende filen / model. @-adresse under min profil
Avatar billede supertekst Ekspert
17. juli 2014 - 18:04 #5
Const fraRæk = 4
Const fraDatoKol = 4
Const tilDatoKol = 5
Const deltagerStartKol = 8
Const chk = "p"

Dim antalRæk As Integer, antalKol As Integer
Dim ræk As Integer, kol As Integer
Dim fraDato As Date, tildato As Date, antalP As Integer
Dim datoer As String
Public Sub datoKontrol()
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    antalKol = ActiveCell.SpecialCells(xlLastCell).Column
   
    Application.ScreenUpdating = False
   
    For kol = deltagerStartKol To antalKol
        datoer = ""
        For ræk = fraRæk To antalRæk
            If Range("A" & ræk) <> "" Then
                If LCase(Cells(ræk, kol)) = chk Then
                    fraDato = Cells(ræk, fraDatoKol)
                    tildato = Cells(ræk, tilDatoKol)
                    antalP = antalP + 1
                   
                    If erdatoOptaget(fraDato) = False Then
                        datoer = datoer & fraDato & " "
                        If fraDato <> tildato Then
                            If erdatoOptaget(tildato) = False Then
                                datoer = datoer & fraDato & " "
                            Else
                                Cells(ræk, kol).Interior.ColorIndex = 3
                            End If
                        End If
                    Else
                        Cells(ræk, kol).Interior.ColorIndex = 3
                    End If
                End If
            End If
        Next ræk
        antalP = 0
        datoer = ""
    Next kol
End Sub
Private Function erdatoOptaget(dato)
    If InStr(datoer, dato) > 0 Then
        erdatoOptaget = True
    Else
        erdatoOptaget = False
    End If
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Interior.ColorIndex = 3 And Target = "" And Target.Column >= deltagerStartKol Then
        Target.Interior.ColorIndex = xlColorIndexNone
    End If
End Sub
Avatar billede Claus Wøbbe Juniormester
17. juli 2014 - 19:26 #6
Wow! I'm impressed! Og så rystet ud ad ærmet - tak!  :-)
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

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