Avatar billede gaedt Nybegynder
30. april 2008 - 23:37 Der er 9 kommentarer og
1 løsning

Sorter CPR samt dato og kl indenfor 24 timer

Jeg er kørt totalt sur i dette...
Jeg har flere regneark som indeholder udtræk med alle blodtransfusioner i et givent år på et givent sygehus.
Jeg er interesseret i at vide hvem der har fået mere end 9 transfusioner indenfor 24 timer.
Mit ark består bla. af en kolonne med CPR nr.(A), en med dato(D) og en med klokkeslet(E)
En transfusion er så en række. Dvs i første omgang har jeg vha betinget formattering fået farvet celler hvor samme cpr optræder mere end ni gange, men da mange får flere transfusioner hen over et helt år, så er jeg nødt til på en måde at få min formattering til at søge på dato og klokkeslet også. Kan det lade sig gøre?? Jeg har brugt det meste af aftenen på at lede efter nogle svar her, men uden held. PLEASE HELP
Avatar billede supertekst Ekspert
30. april 2008 - 23:45 #1
Er dine data samlet på et ark?
Ville en sortering på CPR, Dato, Klokkeslet hjælpe?
Avatar billede gaedt Nybegynder
01. maj 2008 - 07:37 #2
Ja, de er samlet på et ark. Jeg ved ikke helt hvordan jeg skal forklare det nærmere, og sende eksempler er ikke så smart når der indgår personfølsomme data.

Du har sikkert ret i en sortering på cpr, dato og klokkelslet ville hjælpe, men jeg kan ikke helt hitte ud af at sorter på flere parametre. Hvis det ikke kan lade sig gøre at finde de CPR som optræder mere end ni gange indenfor 24 timer, kan man så findeog få markeret dem som optræder mere end ni gange indenfor +- en dag? Så kan jeg selv kontrollere om det også er indenfor 24 timer.
Så er data efterhånden blevet overskuelige at resten kan fikses manuelt.
Avatar billede jkrons Professor
01. maj 2008 - 10:15 #3
Sorter først arket med sorteringgsknappen (stigende elelr faldende). Sorter først efter klokkeslættet. Derefter sorterer du igen efter dato og til sidst efter CPR.

Alternativt vælger du Data - Sorter. Sæt så CPR ind som første kriterium, dato som andet og klokkeslæt som tredje inden du sorterer.
Avatar billede gaedt Nybegynder
01. maj 2008 - 11:41 #4
Tak so far jkrons
Når jeg har gjort som du har beskrevet, kan jeg så få lavet en markering af de CPR nr. som optræder mere end ni gange indenfor + - en dag?
Så slipper jeg nemlig for at skulle gøre det manuelt.
Der er nemlig stadig masser af CPR nr som ikke er interessante fordi transfusionerne er spredt henover et helt år. Så hvis det på en eller anden måde kan markeres hvis samme CPR optræder mere end ni gange indenfor 24 timer eller alternativt + - en dag.
Er det for kryptisk?
Det er sikkert simpelt for jer, jeg er absolut ikke nogen haj til excel
Avatar billede supertekst Ekspert
01. maj 2008 - 11:44 #5
Via VBA ville man kunne markere de cpr., der opfylder betingelsen - det skulle ikke være det store problem - vender tilbage efter frokost..
Avatar billede supertekst Ekspert
01. maj 2008 - 14:19 #6
Her er et bud:
Koden anbringes i Arket for data (højreklik / Vis programkode)
Kan udføres via Alt+F8 -kør den viste makro
(Data forventes at være sorteres efter: Cpr / Dato / Kl)

Rem Kan justeres efter behov
Rem ========================
Const startRæk = 2                                  'datarække-start, hvis overskrift
Const mereEndAntalTrans = 9                        'antal blodtransfusioner
Rem ========================

Dim aktuelCpr, cpr, dato As Date, kl As Date
Dim antalRæk, startCpr, slutCpr, antalCpr
Sub optællingBlodTrans()
    aktuelCpr = ""
    startCpr = 0
    slutCpr = 0
    antalCpr = 0
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
    For ræk = startRæk To antalRæk
        cpr = Cells(ræk, 1)
        If aktuelCpr = "" Then
            aktuelCpr = cpr
            startCpr = ræk
        End If
       
        If cpr = aktuelCpr Then
            antalCpr = antalCpr + 1
            slutCpr = ræk
        Else
            cprBrud
           
            aktuelCpr = cpr
            startCpr = ræk
            slutCpr = ræk
            antalCpr = 1
        End If
    Next ræk
   
Rem test for sidste række
    cprBrud
   
    MsgBox ("Optælling afsluttet")
End Sub
Private Sub cprBrud()
Dim tidsstempel As Date, ræk, p24 As Date, antal, til
Rem er der brutto mere end "mereEndAntalTrans"
    If antalCpr > mereEndAntalTrans Then
        For ræk = startCpr To slutCpr
            tidsstempel = Format(Cells(ræk, 4), "dd-mm-yy") + " " + Format(Cells(ræk, 5), "hh:mm")
Rem beregn "flydende" + 24 timer
            p24 = DateAdd("h", 24, tidsstempel)
            antal = antalP24(p24, til)
            If antal > mereEndAntalTrans Then
                Range("A" & CStr(ræk) & ":E" & CStr(til)).Select
                Selection.Interior.ColorIndex = 6  'Gul markering når antal > "mereEndAntalTrans"
            End If
        Next ræk
    End If
End Sub
Private Function antalP24(p24 As Date, til)
Dim tidsstempel As Date
    antalP24 = 0
    til = 0
   
    For ræk = startCpr To slutCpr
            tidsstempel = Format(Cells(ræk, 4), "dd-mm-yy") + " " + Format(Cells(ræk, 5), "hh:mm")
            If tidsstempel <= p24 Then
                antalP24 = antalP24 + 1
                til = ræk
            End If
    Next ræk
End Function
Avatar billede gaedt Nybegynder
01. maj 2008 - 23:19 #7
Hejsa Supertekst

Jeg er så imponeret over i bare sådan kan ryste sådan noget ud af ærmet.
Jeg kan dog ikke helt få det til at fungere. Jeg har fået den til at køre VBA'en og den meldte ingen fejl, og markerede også nogle celler, men det virker ikke som om det er helt rigtigt. Jeg kan dog ikke lige gennemskue hvad der er galt.
Jeg har været ved at lave et eksempel af mit ark, hvor jeg har klippet ud fra et ark hvor din VBA har kørt og markeret nogle rækker. Jeg har efterfælgende modificeret CPR numrene. Eksemplet indeholder en rigtig samling af markeringer omkring nogle CPR som optræder mere end ni gange indenfor 24 timer og en samling af markeringer hvor det ikke er rigigt.
Vil du være interesseret i at kaste et blik på den ved lejlighed?
Skal jeg maile den?
Avatar billede supertekst Ekspert
01. maj 2008 - 23:25 #8
Hej gaedt

Du må meget gerne sende det til pb@supertekst-it.dk

Mvh
Supertekst
(bloddonor 47 x)
Avatar billede supertekst Ekspert
02. maj 2008 - 18:26 #9
Rem VERSION 2
Rem =========
Rem Kan justeres efter behov
Rem ========================
Const startRæk = 2                                  'datarække-start, hvis overskrift
Const mereEndAntalTrans = 9                        'antal blodtransfusioner
Rem ========================

Dim aktuelCpr, cpr, dato As Date, kl As Date
Dim antalRæk, startCpr, slutCpr, antalCpr
Sub optællingBlodTrans()
    aktuelCpr = ""
    startCpr = 0
    slutCpr = 0
    antalCpr = 0
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row

    For ræk = startRæk To antalRæk
        cpr = Cells(ræk, 1)
        If aktuelCpr = "" Then
            aktuelCpr = cpr
            startCpr = ræk
        End If
       
        If cpr = aktuelCpr Then
            antalCpr = antalCpr + 1
            slutCpr = ræk
        Else
            cprBrud
           
            aktuelCpr = cpr
            startCpr = ræk
            slutCpr = ræk
            antalCpr = 1
        End If
    Next ræk
   
Rem test for sidste række
    cprBrud
   
    MsgBox ("Optælling afsluttet")
End Sub
Private Sub cprBrud()
Dim tidsstempel As Date, ræk, p24 As Date, antal, til
Rem er der brutto mere end "mereEndAntalTrans"
    If antalCpr > mereEndAntalTrans Then
        antal = 0
        For ræk = startCpr To slutCpr
            tidsstempel = Format(Cells(ræk, 4), "dd-mm-yy") + " " + Format(Cells(ræk, 5), "hh:mm")
Rem beregn "flydende" + 24 timer
            p24 = DateAdd("h", 24, tidsstempel)
            antal = antalP24(p24, til, ræk)
            If antal > mereEndAntalTrans Then
                Range("A" & CStr(ræk) & ":E" & CStr(til)).Select
                Selection.Interior.ColorIndex = 6  'Gul markering når antal > "mereEndAntalTrans"
            End If
        Next ræk
    End If
End Sub
Private Function antalP24(p24 As Date, til, aktuelRæk)
Dim tidsstempel As Date
    antalP24 = 0
    til = 0
   
    For ræk = aktuelRæk To slutCpr
            tidsstempel = Format(Cells(ræk, 4), "dd-mm-yy") + " " + Format(Cells(ræk, 5), "hh:mm")
            If tidsstempel <= p24 Then
                antalP24 = antalP24 + 1
                til = ræk
            End If
    Next ræk
End Function
Avatar billede gaedt Nybegynder
02. maj 2008 - 20:42 #10
Det er bare perfekt supertekst

Igen, tusind tak for hjælpen
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