Gå til innhold

Neste flere enn 7 hvis-kommandoer i excel?


AskBurle

Anbefalte innlegg

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 av AskBurle
Lenke til kommentar
Videoannonse
Annonse

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 av Harald Staff
Lenke til kommentar

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 av AskBurle
Lenke til kommentar

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

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...