AskBurle Skrevet 8. desember 2005 Rapporter Del Skrevet 8. desember 2005 (endret) Jeg prøver å lage en slags lønnsberegning hvor jeg kan skrive inn vaktkode og automatisk få opp tidspunktet for når jeg starter og når jeg slutter på jobb. Jeg har så langt benyttet meg av hvis (if) kommandoen, men excel har satt en begrensning som gjør at man ikke kan neste flere enn syv hvis-kommandoer. Foreløpig ser cellen som beregner starttidspunkt slik ut: =HVIS(C4="csh1";(22/48);HVIS(C4="csh2";(23/48);HVIS(C4="csh3";(35/48);HVIS(C4="csh4";(35/48);HVIS(C4="csh5";(31/48);HVIS(C4="cs1";(32/48);HVIS(C4="cs2";(35/48);HVIS(C4="cs3";(33/48);"")))))))) Har også en tilsvarende celle som regner ut sluttidspunkt. Flere hvis-kommandoer enn dette får jeg altså ikke lov til å skrive. Er det noen som har en annen tilnærming til problemet? Har litt lyst til å lage en lønnsberegning som alle ved min bedrift kan bruke, men da må jeg inkludere flere vaktkoder. Jeg vet at det ikke tar så lang tid å skrive inn start- og sluttidspunkt selv, men det er litt mer tilfredstillende å kun skrive inn vaktkode. Rune Endret 8. desember 2005 av AskBurle Lenke til kommentar
Harald Staff Skrevet 11. desember 2005 Rapporter Del Skrevet 11. desember 2005 (endret) Hei Rune Du setter opp en tilordningstabell i , i dette eksempel, Ark2 A1:B10, slik: A B csh1 =22/48 csh2 =23/48 csh3 =35/48 osv Og så bruker du en FINN.RAD-formel slik: =HVIS(ERFEIL(FINN.RAD(C4;Ark2!$A$1:$B$10;2;USANN));"";FINN.RAD(C4;Ark2!$A$1:$B$10;2;USANN)) Ikke bare kan lista være hur lang som helst, men du har ett eneste sted å endre vaktkoder/varigheter og så stemmer det i alle formler etterpå. HTH. Beste hilsen Harald Endret 11. desember 2005 av Harald Staff Lenke til kommentar
AskBurle Skrevet 13. desember 2005 Forfatter Rapporter Del Skrevet 13. desember 2005 (endret) Takk skal du ha! Så ikke denne før nå, litt typisk siden jeg akkurat hadde funnet svaret selv. I likhet med din tilnærmingsmåte, så laget jeg en tilordningstabell hvor jeg hadde en søkevektor (alle vaktkodene) og en resultatvektor (startidspunkt for hver vaktkode). I cellen hvor jeg skulle finne startidspunkt (her: C3) brukte jeg derimot SLÅ.OPP (eng. VLOOKUP) -funksjonen. Dette blir da: =HVIS(C3="";"";(SLÅ.OPP(C3;Vaktliste!$A$1:$A$21;Vaktliste!$B$1:$B$21))) Tilordningstabellen for startidspunket er området A1:B21 i "Vaktliste". Tilsvarende ble selvfølgelig også gjort for sluttidspunkt. Uansett, takk for at du tok deg bryet med å svare. Har ikke testet ut din løsning på problemet, men den fungerer sikkert like tilfredstillende. Rune Endret 13. desember 2005 av AskBurle Lenke til kommentar
Harald Staff Skrevet 13. desember 2005 Rapporter Del Skrevet 13. desember 2005 Strålende. SLÅ.OPP heter strengt tatt LOOKUP, FINN.RAD heter VLOOKUP. Ikke for å pirke, men for å vise hvor like løsningene er. Bra jobba ! Tips videre: Ta enten høyde for ugyldige vaktkoder i C3, altså feil men ikke blank celle, og/eller bruk Validering for inndata, brukere liker å også kunne velge fra en rullefeltliste. Se http://www.contextures.com/xlDataVal01.html hvis du trenger en oppfriskning på dette. Beste hilsen Harald Lenke til kommentar
AskBurle Skrevet 13. desember 2005 Forfatter Rapporter Del Skrevet 13. desember 2005 Da er det rullefelt med alle vaktkoder i den nye listen. Har aldri brukt det før, så det var litt gøy i grunn. Om man sparer så mye tid på det er vel heller uvisst, men som du sier er det jo mange som liker å velge fra en liste. Tror jeg lar den være slik den er nå, så lenge de har en liste å velge vaktkoder fra, så skal man ikke få tastet inn en feil vaktkode. Så det var FINN.RAD som var VLOOKUP ja, det er kanskje mest korrekt å bruke FINN.RAD her siden det er en vektor og ikke en matrise man bruker. Men akkurat nå er jeg fornøyd med tingenes tilstand, får heller pirke litt mer på det i morgen. Må prøve å få til en litt proff utforming, slik det er nå, så ser det mer ut som budsjettet til "Væstre-Kolbu Mjølkespænnkastingslag" fra 1992. Lenke til kommentar
Moskus Skrevet 14. desember 2005 Rapporter Del Skrevet 14. desember 2005 Jeg ville valgt en løsning som jeg synes er hakket bedre, nemlig litt VB (eller en makro om du vil). Start VBA (Alt+F11) når du er i Excel, legg til en modul (i vinduet til venstre), dobbeltklikk på denne og legg inn følgende kode: Function MinFunksjon(ByVal Cell As Variant) As Single Select Case Cell Case "csh1" MinFunksjon = 22 / 48 Case "csh2" MinFunksjon = 23 / 48 Case "csh3", "csh4" MinFunksjon = 35 / 48 Case "csh5" MinFunksjon = 31 / 48 Case "cs1" MinFunksjon = 32 / 48 Case "cs2" MinFunksjon = 35 / 48 Case "cs3" MinFunksjon = 33 / 48 End Select End Function Så er det bare å bruke funksjonen som andre funksjoner. F.eks. =MinFunksjon("csh1") gir 0,458. =MinFunksjon(A1) vil også gi 0,458 hvis det står "csh1" i celle A1. Lenke til kommentar
Harald Staff Skrevet 14. desember 2005 Rapporter Del Skrevet 14. desember 2005 Nuvel. Rydde litt i datatypene i så fall, og en "case else" for å håndtere tomme celler, feil inntastinger etc: Function MinFunksjon(ByVal sCode As String) As Date Select Case sCode Case "csh1" MinFunksjon = 22 / 48 Case "csh2" MinFunksjon = 23 / 48 Case "csh3", "csh4" MinFunksjon = 35 / 48 Case "csh5" MinFunksjon = 31 / 48 Case "cs1" MinFunksjon = 32 / 48 Case "cs2" MinFunksjon = 35 / 48 Case "cs3" MinFunksjon = 33 / 48 Case Else MinFunksjon = 0 End Select End Function Det avgjørende ved valg av våpen er hva som er mest hensiktsmessig å vedlikeholde. Turnusvakter er spesielt krevednde siden de reforhandles årlig. For de fleste sivilister er en regnearktabell mest hensiktsmessig. Men alternative løsninger er alltid av det gode, så takk for innsigelsen. Beste hilsen Harald Lenke til kommentar
Moskus Skrevet 14. desember 2005 Rapporter Del Skrevet 14. desember 2005 Hmm... litt for lenge siden jeg har brukt VBA, ja. Men jeg har et lite spørsmål: Hvorfor returnerer funksjonen en dato ("Date" er vel datatypen for dato i VBA også)? Lenke til kommentar
Harald Staff Skrevet 14. desember 2005 Rapporter Del Skrevet 14. desember 2005 Date er dato-tid ja. Utgangspunktet her var "automatisk få opp tidspunktet for når jeg starter og når jeg slutter på jobb", et klokkeslett. Siden 1 er et døgn, er en halvtime en halv tjuefjerdedel, en førtiåttendedel. Runes uttrykk 22/48 er dermed 22 halvtimer etter midnatt, altså 11:00. Prøv Sub test() Dim D As Date, L As Long For L = 1 To 47 D = L / 48 MsgBox D Next End Sub Man venner seg fort til å lese/skrive sånt, og det tar mindre plass og regnekraft enn f.eks. TID(11;0;0) eller TimeSerial(11, 0, 0) Harald Lenke til kommentar
Moskus Skrevet 15. desember 2005 Rapporter Del Skrevet 15. desember 2005 Date er dato-tid ja. Utgangspunktet her var "automatisk få opp tidspunktet for når jeg starter og når jeg slutter på jobb", et klokkeslett. 5292133[/snapback] Ja, da så. Denne informasjonen fikk jeg ikke med meg.. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå