Just nu i M3-nätverket
Jump to content

Värde A > B & < C


Axi

Recommended Posts

Tja, beskrivningen säger väl allt.

 

Jag har ett Sheet med Kontakter runtom på jorden.

Jag har en column med deras lokala tid (NU - tidsdiff)

Jag har ett annat sheet med deras sovtider.

 

Det jag vill är att kunna visa i mitt sheet med kontakter när en kontakt ej är tillgänglig eftersom det är hans eller hennes sovperiod.

 

Local tid i Sheet1 A1

 

Han sover mellan Sheet2!B1 och Sheet2!B2 (där b1 och b2 alltså är två tidsangivelser, t.ex 22:00 & 08:00)

 

 

Tex =OM(Sheet1!A1>Sheet2!B1&<Sheet2!B2;"Offline";"Online")

(Alltså är A1 mellan B1 och B2?)

Det är denna formeln ovan jag inte får att fungera. Är det möjligt?

 

Jag funderar på att lägga till andra tider som indikerar "inte tillgänglig". Jag hade tänkte att bygga på dem i Sheet2!B3 och Sheet2!B4 liknande de i Sheet2!B1 och Sheet2!B2

Link to comment
Share on other sites

Vad du egentligen vill göra är att testa ifall ett värde uppfyller 2 villkor, dvs större än ett värde men mindre än ett annat.

 

OM-funktionen å andra sidan kan bara testa ifall ett villkor är sant eller falskt.

 

För att lösa detta kan du använda dig av OCH-funktion. OCH-funktionen returnerar SANT eller FALSKT beroende på 2 villkor.

 

dvs OM(OCH();"Värde om sant";"Värde om falskt")

 

=OM(OCH(sheet1!A1>Sheet2!B1;sheet1!A1<Sheet2!B2);"Offline";"Online")

 

 

/M

Link to comment
Share on other sites

Jag provade detta innan med, men det ger dåligt resultat. Jag får "falskt" resultat varje gång. Är det något med tidskalkylering jag missat? En såhär pass enkel funktion borde Excel klara av utan krångel kan man tycka.

 

Jag ändrade om lite:

 

=OM(OCH(J5>TD!H5; J5<TD!I5);"Online";"Offline")

 

I J5 står NU()

 

I TD!H5 står 18:00

I TD!I5 står 22:00

 

Alltså =OM(OCH(NU>18:00 & NU<22:00);"Online";"Offline") Jag testar detta nu när NU = 20:44 dvs mitt resultat borde bli "Online". Men det blir "Offline"

 

Finns det möjligtvis ett helt annat bättre sätt att få samma resultat?

 

Edit: Om jag provar byta ut alla "Tid" mot "Tal" så fungerar det. Är det för att Excel beräknar allt som decimala tal, dvs den visar värdet i en annan form än vad det egentligen är? En senare tid borde väl ändå motsvaras av ett högre tal ifall det vore så? Måste jag då konvertera alla tider till decimala tal, därefter utföra funktionen för att till sist konvertera tillbaka till tid igen för att visa resultatet? Detta låter jättekrångligt.

Link to comment
Share on other sites

Jag provade detta innan med, men det ger dåligt resultat. Jag får "falskt" resultat varje gång. Är det något med tidskalkylering jag missat? En såhär pass enkel funktion borde Excel klara av utan krångel kan man tycka.

 

Jag ändrade om lite:

 

=OM(OCH(J5>TD!H5; J5<TD!I5);"Online";"Offline")

 

I J5 står NU()

 

I TD!H5 står 18:00

I TD!I5 står 22:00

 

Alltså =OM(OCH(NU>18:00 & NU<22:00);"Online";"Offline") Jag testar detta nu när NU = 20:44 dvs mitt resultat borde bli "Online". Men det blir "Offline"

 

Finns det möjligtvis ett helt annat bättre sätt att få samma resultat?

 

Edit: Om jag provar byta ut alla "Tid" mot "Tal" så fungerar det. Är det för att Excel beräknar allt som decimala tal, dvs den visar värdet i en annan form än vad det egentligen är? En senare tid borde väl ändå motsvaras av ett högre tal ifall det vore så? Måste jag då konvertera alla tider till decimala tal, därefter utföra funktionen för att till sist konvertera tillbaka till tid igen för att visa resultatet? Detta låter jättekrångligt.

 

 

Njae, visst är det så att Excel i bakgrunden lagrar tid som ett decimalvärde, men problemet här är att Excel blandar in datum i tidsvärdet.

 

Alltså om du skriver 22:00 så lagrar Excel egentligen 1900-01-01 22:00 och Nu() är 2010-02-15 08:11. Detta är lätt att kolla genom att ändra talformat.

 

Du måste alltså behandla sovtiden på samma sätt som tidsdiffen (NU()-tidsdiff + sovtid eller nåt liknande) för att den ska kunna vara större än ditt jämförvärde.

RED: Du kan också göra värdet i kontrollbladet till tid utan datum genom att jämföra med NU()-IDAG().

 

/Pär B

post-8042-126622420079_thumb.png

Link to comment
Share on other sites

Aha, det var insiktsfullt!^^

 

Det fungerar dock inte att göra det i mitt fall eftersom tiderna är återkommande, alltså kan jag inte ange unika tider.

Kan jag inte istället ange att datuminformation ska exkluderas från NU() formeln?

Link to comment
Share on other sites

Det fungerar dock inte att göra det i mitt fall eftersom tiderna är återkommande, alltså kan jag inte ange unika tider.

 

Hrmm. nu hänger jag inte med. Blir unika tider problem?

 

/M

Link to comment
Share on other sites

Ja, eftersom jag anger fasta återkommande sov och vakentider. Om då excel envisas med att Nu ska vara en full datum+tid då måste även jag ange alla kommande sov och vakentider som fulla datum+tid, annars kommer det aldrig att fungera precis som Perboman skrev.

 

Jag har dock lyckats med en workaround som fungerar, det tråkiga är att det är fusk så det hade ställt till det om man skulle göra vidare kalkyleringar på det;

 

=TIMME(A1)+(MINUT(A1)/100)

Där a1 = NU()

 

Den omvandlar NU() till decimala varianter av timme + minut och slår sedan ihop dem. Då kan jag ange alla sov och vakentider i decimal form tex Kl 11:00 blir 11,00.

Det fungerar, men det är inte helt rätt.

Jag skulle gärna vilja få det rätt mest för sakens skull.

Link to comment
Share on other sites

Om du bara vill ha klockslag i en cell kan man alltid fuska till det lite. Antingen på sidan när man utför beräkningarna eller på sidan där man för in tiden i en cell. Bäst är givetvis att alltid ha ett fullständigt datumvärde och hantera det korrekt vid beräkningarna men vill man nu bara ha ett klockslag i en cell så:

 

=KLOCKSLAG(TIMME(NU());MINUT(NU());SEKUND(NU()))

Link to comment
Share on other sites

Om du bara vill ha klockslag i en cell kan man alltid fuska till det lite. Antingen på sidan när man utför beräkningarna eller på sidan där man för in tiden i en cell. Bäst är givetvis att alltid ha ett fullständigt datumvärde och hantera det korrekt vid beräkningarna men vill man nu bara ha ett klockslag i en cell så:

 

=KLOCKSLAG(TIMME(NU());MINUT(NU());SEKUND(NU()))

 

Jag tycker =NU()-IDAG() är enklare ;)

 

/Pär B

Link to comment
Share on other sites

HåHå! Inte alls illa Monchi. Ditt fusk är bättre än mitt!

Jag såg precis att Perboman editerat sitt svar, han har kanske ytterligare en lösning där (ska testa).

 

Hade det även fungerat att köra flera OM satser för olika tider?

T.ex:

22:00 - 06:00 =Natt

08:00 - 12:00 =Förmiddag

12:00 - 13:00 =Lunch

13:00 - 18:00 =Eftermiddag

19:00 - 22:00 =Kväll

 

Alltså 5 olika OM satser på samma gång där varje OM sats jämför med två tider?

=OM(OCH(A2>C2;A2<D2);C1;D1)

Jag testade lite med två samtidigt men fick i bästa fall dubbla svar så jag antar att jag måste isolera dem på något sätt.

 

(Edit:: Jupp. Perbomans variant fungerar bättre och är enklare. ^^ )

Link to comment
Share on other sites

Hade det även fungerat att köra flera OM satser för olika tider?

 

Ja, man kan använda flera OM-satser. Excel kan beräkna 7 st, dvs totalt 8 i en funktion. (7 st inuti den första). Men ej att rekommendera i detta fallet. Gör en lista nånstans och använda letarad-funktion istället.

 

/M

 

edit: missade att PerboMan svarat redan. Bra med alerta deltagare här :-)

Link to comment
Share on other sites

Jo,visst! det håller jag med om. Fast nu har ni vänt på hela grundtanken. ^^

Iden från början är att kunna sätta en benäming på ett visst tidsperspektiv.

 

T.ex om klockan nu är 18:15 och jag har bestämt att 18:00 - 22:00 = kväll så ska resultatet bli "kväll".

 

Om jag kör leta rad på "kväll" så får jag istället ut tiden, dvs tvärtom vad jag behöver. ^^

 

post-66198-126622983311_thumb.jpg

Jag vill helt enkelt att formeln för "Status" ska kolla vad klockan är, jämföra den med de 8 olika tidsvärdena i kolumnerna och därefter ange vilken "status" som står ovanför respektive cell som matchar. ^^

Link to comment
Share on other sites

Om jag kör leta rad på "kväll" så får jag istället ut tiden, dvs tvärtom vad jag behöver. ^^

 

Kör följande

=LETARAD(C1;$A$1:$B$6;2)

 

 

/M

post-50730-12662299763_thumb.jpg

Link to comment
Share on other sites

Shape, du förutsätter nog att alla dygnets timmar är angivna med "status", men det är de inte. Därför behövs OM(OCH) funktionen. Om den inte hittar tiden ska den ange "falskt".

 

Jag editerade (dumt nog) mitt förra inlägg. Kanske jag lyckats förklara det bättre där nu?

Det är bättre att jag skapar nya inlägg än att editera för att undvika förvirring när det är så många som försöker hjälpa mig. ^^

Link to comment
Share on other sites

Om den inte hittar tiden ska den ange "falskt".

 

Det finns ett argument i funktionen som är valfritt. Om du inte anger det så tar den närmaste (därför ska ev söklista vara sorterad). Anyway, om du anger sista argumentet till FALSKT så behöver du kanske inte ha dina om och och-funktioner.

 

=LETARAD(C2;$A$1:$B$6;2;FALSKT)

 

Testa och se om du kommer närmare en lösning som passar.

 

 

/M

Link to comment
Share on other sites

Jo,visst! det håller jag med om. Fast nu har ni vänt på hela grundtanken. ^^

Iden från början är att kunna sätta en benäming på ett visst tidsperspektiv.

 

T.ex om klockan nu är 18:15 och jag har bestämt att 18:00 - 22:00 = kväll så ska resultatet bli "kväll".

 

Om jag kör leta rad på "kväll" så får jag istället ut tiden, dvs tvärtom vad jag behöver. ^^

 

post-66198-126622983311_thumb.jpg

Jag vill helt enkelt att formeln för "Status" ska kolla vad klockan är, jämföra den med de 8 olika tidsvärdena i kolumnerna och därefter ange vilken "status" som står ovanför respektive cell som matchar. ^^

 

 

Jo, detta går också. Du måste bara lägga in alla gränser i listan. (se ny bild)

 

Det är också viktigt att natten delas i två delar om du som tider i vänstra kolumnen har dag 0 tider, och även jämför med dag 0 tider (NU()-IDAG()).

 

Observera att jag lagt in "' " (fnutt+mellanslag) i G2, G4 och G6 för att inte få 0 i I1.

 

/Pär B

post-8042-126623230198_thumb.png

Link to comment
Share on other sites

Du har en poäng här Shape, fast om jag kör formeln MED det sista argumentet får jag #N/A som svar. Tar jag bort det så fungerar det.

Det var precis detta som jag misstänkte skulle hända.

"range_lookup" kallar mitt excel det sista argumentet för så det känns inte så vidare valfritt. ^^

 

Ska kolla ditt förslag med Perboman. Det är underbart att två olika metoder att testa samtidigt, det gör det hela mycket roligare. ^^

Link to comment
Share on other sites

"range_lookup" kallar mitt excel det sista argumentet för så det känns inte så vidare valfritt. ^^

 

Det är helt valfritt. Antingen anger du det, eller som utelämnar du det. Alla andra argument är obligatoriska, dvs funktionen fungerar inte om de inte anges. Men detta sista argument går alltså bra att utelämna helt.

 

Givetvis måste man alltid använda tillåtna begrepp i ett argument, men det gälla alla funktioner i Excel.

 

/M

Link to comment
Share on other sites

Letarad är användbar till mycket, men i det här fallet är det inte att rekommendera att sätta sista argumentet till falskt (om man inte vill skapa en lista att leta i med alla tänkbara tider).

 

Axis fundering över tidsspann går dock att implementera genom att bygga vidare på LETARAD med ett OM (se bifogad bild).

 

Det man ska tänka på är att hela formeln får anpassas om det är olika antal perioder, dvs om tabellen inte alltid har lika många rader. Dessutom blir det som ni kan se av bilden så att 22:00 ingår i Natt även om kväll har bortre gräns 22:00, värden i första kolumn har precedens.

 

/Pär B

post-8042-126623478281_thumb.png

Link to comment
Share on other sites

Hmm.. Det där kan vara användbart Perboman. Jag har iofs lite svårt att följa dina koder så de refererar till celler som inte är med på bilden. ^^

 

Nu när jag slutat säga emot och istället provade Shapes variant fullt ut, har jag fått den till fungera tillfredsställande. Det enda man måste tänka på är att sökfältet måste täcka alla tider, annars får jag "#N/A".

 

post-66198-126623844462_thumb.jpg

Link to comment
Share on other sites

Det enda man måste tänka på är att sökfältet måste täcka alla tider, annars får jag "#N/A".

 

 

=OM(ÄRSAKNAD(LETARAD(C1;$A$1:$B$4;2;FALSKT));"";LETARAD(C1;$A$1:$B$4;2;FALSKT))

 

istället för "" kan du ju ange ngt som du själv vill ska stå om motsvarande värde saknas.

 

 

 

/M

Link to comment
Share on other sites

Hmm.. Det där kan vara användbart Perboman. Jag har iofs lite svårt att följa dina koder så de refererar till celler som inte är med på bilden. ^^

 

Nu när jag slutat säga emot och istället provade Shapes variant fullt ut, har jag fått den till fungera tillfredsställande. Det enda man måste tänka på är att sökfältet måste täcka alla tider, annars får jag "#N/A".

 

post-66198-126623844462_thumb.jpg

 

Får väl lite skamset erkänna att jag inte uppdaterade allt innan jag publicerade. :blush:

 

Vad det gäller ditt andra problem så räcker det med att du avslutar listan med en 24:00 med värde Natt. Den omvandlas till 1900-01-01 00:00, och gör så att alla tider mellan 22:00 och 24:00 blir Natt.

Detta är andra egenheten som uppstår om man anger sista argumentet till TRUE (eller utelämnar det); funktionen letar efter ett exakt värde, men om den inte hittar det så tar den närmast lägre värde. Så för att skapa en lista som funktionen letar i bör man börja med ett värde som är lägre än man kan förväntas leta efter, och sluta med ett värde som är större.

 

Bifogar min bild med uppdaterade formler.

 

/Pär B

post-8042-126624115338_thumb.png

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...