Multidesk.be » Forums » Programmeren algemeen » sommeren van tijden in Excel (gesloten)

Helpinformatie
Dit onderwerp werd gesloten.
Het is bijgevolg niet mogelijk er nog op te reageren.
  • Pagina
  • 1 van 1
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door StOosh op donderdag 27 februari 2014 om 00:38:54.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ik heb de volgende situatie:
*Een reeks varierende tijden staan onder elkaar in minuten en seconden geschreven als volgt: min,s (bvb: 1minuut15seconden = 1,15)
*een reeks cellen bevat een x indien een niet-variabele tijd van toepassing is, anders is de cel leeg. (Dit is opgelost met een simpele IF(A6="x";5,4;0)
*Ik wil een sommatie van de tijden maken in een nieuwe cel voor een tijdsschatting.

Ik kan natuurlijk niet zomaar alle cellen in de kolom optellen, want de decimalen zouden groter kunnen worden dan 0,60 waardoor ik geen correcte minuten meer reken.

Mijn eerste oplossing (niet zo heel erg elegant) was alles vermenigvuldigen met 60 zodat ik de waarden in seconden heb: 60*B3+...+60*IF(B9="x";B18;0)+...
Maar achteraf moet ik alles terug in minuten en seconden zetten. hoe doe ik dat best?

Hoe kan ik dit het best oplossen? (Ik gebruik enkel formules in cellen, geen VB)

Groeten
Dennis
^ Reactie #1 geschreven door StOosh op donderdag 27 februari 2014 om 21:08:00.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Dit is een voorbeeld van de situatie:
Bijlage: 6e3626129845c637e7264998602a0668.xlsx
Deze tekst werd het laatst bewerkt voor 65.61 % door StOosh op donderdag 27 februari 2014 om 21:08:21.
^ Reactie #2 geschreven door thekid op vrijdag 28 februari 2014 om 00:27:30.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
eum, uw eerste oplossing klopt eigenlijk niet volledig :)

60 * 1.15 = 69
60 + 15 minuten = 75 :D

het zou misschien eenvoudig zijn om:
- eerst correct uit te rekenen naar seconden
- alle seconden op te tellen
- aantal % 60 => seconden
- aantal / 60 => uren (opgelet: zeker naar onder afronden, voor excel geeft 50 / 60 => 0.8 maar met een afronding naar onderen (floor) ga je zo naar 0)

% staat voor modulo (nl: restwaarde na deling), 75 % 60 geeft 15 seconden, 75 / 60 geeft 1 minuut

helpt dat wat? :)


Kleine edit, heb een voorbeeld gemaakt :)

Bijlage: efff69ef4996651afad7e6606a755669.xlsx
Deze tekst werd het laatst bewerkt voor 15.77 % door thekid op vrijdag 28 februari 2014 om 00:52:08.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #3 geschreven door StOosh op vrijdag 28 februari 2014 om 08:59:23.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Danku voor de hulp.

Gisterennacht heb ik het euvel kunnen oplossen door dan toch een stukje VBA te schrijven dat ik éénmalig uitvoer op de volledige array (20kolommen).

CODE
  1. Sub Convert()
  2. 'This routine takes a value in the form of xx.yy (where xx=minutes and yy=seconds) from a cell
  3. 'and converts it into a correct 'time' value.
  4. 'A marker Q makes sure that the routine is executed only one time.
  5.  
  6. Dim A As Currency
  7. Dim B As Currency
  8. Dim C As Long
  9. Dim m As Long
  10. Dim e As String
  11. Dim x As Long
  12. Dim r As Long
  13. Dim s As Long
  14. Dim j As Long
  15. Dim Q As Long
  16.  
  17. ''''''''''''''''''''''''
  18. t = 30  'first column number
  19. u = 30 'last column number
  20. r = 4  'start value row
  21. s = 6  'ending value row
  22. ''''''''''''''''''''''''
  23. Q = Cells(22, 3)
  24.  
  25. If Q = 1 Then
  26. Else
  27.     For j = t To u
  28.         For i = r To s
  29.             A = Cells(i, j).Value
  30.             B = A * 60
  31.             m = 0
  32.             ' value in b is now converted to seconds
  33.             Do While B >= 60
  34.                 B = B - 60
  35.                 m = m + 1
  36.             Loop
  37.            
  38.             B = B / 60 * 100
  39.            
  40.             e = "0:" & m & ":" & B
  41.          
  42.             Cells(i, j).Value = e
  43.             Next i
  44.     Next j
  45.     Cells(22, 3) = "1"
  46. End If
  47.  
  48. End Sub
  49.  
  50.  
  51.  
  52.  
  53.  
^ Reactie #4 geschreven door thekid op vrijdag 28 februari 2014 om 11:45:32.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Uw * 60 is geen correcte omzetting volgens uw opgelegde regels. Kijk mijn opmerking na :-D

*edit*
Misschien nog duidelijker:
2 uur = 2 * 60 = 120 minuten
1.60 = 1.6 * 60 = 96 minuten (maar volgens uw regels is 1.6 gelijk aan 2 uur)

In uw voorbeeld zou de b kolom zonder x waarde op 4 uur uitkomen

eenvoudigste herberekening is trouwens voor bvb: 1.45 (wat dus 1 uur 45 minuten moet zijn)

Floor(1.45) * 60 + ((1.45 - Floor(1.45)) * 100) = (1 * 60) + ((1.45 - 1) * 100) = 60 + 45 = 105 minuten
Deze tekst werd het laatst bewerkt voor 24.78 % door thekid op vrijdag 28 februari 2014 om 12:24:41.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #5 geschreven door StOosh op vrijdag 28 februari 2014 om 15:28:41.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Hmm, ik heb je niet helemaal verstaan. Ik probeer het nog eens uit te zoeken.

Maar het is wel belangrijk te weten dat er NOOIT een waarde in de kolom zal staan die boven de xx,59 uitkomt.
Al die tijden zijn handmatig ingegeven door iemand die de minuten en seconden van een proces opgenmeten heeft.


*edit: Als ik het gewoon test, krijg ik wel het correcte resultaat in mijn cellen. Ik splits eigenlijk de getallen voor de komma en na de komma en stop die elk in een variabele die ik dan in een tijd-layout terug in de cel invoeg.

Het optellen van de kolommen doe ik pas achteraf via een simpele SUM() in de doelcel zelf.
Denk ik toch? :s
Deze tekst werd het laatst bewerkt voor 36.04 % door StOosh op vrijdag 28 februari 2014 om 15:36:00.
^ Reactie #6 geschreven door StOosh op vrijdag 28 februari 2014 om 15:47:26.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ik zie nu wat je doet. Jouw oplossing is handiger. Dan kan ik het achteraf gewoon teruggeven aan de persoon en de nodige cellen beschermen. Want met die macro moet je handmatig omzetten en kan je achteraf de tijden niet meer aanpassen.

Ik ga jouw manier dan proberen invoegen. alvast bedankt :)
^ Reactie #7 geschreven door thekid op vrijdag 28 februari 2014 om 16:03:47.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
ik zie nu ook pas dat je modulo uw loop is (nu weet je ook hoe je het sneller moet doen) en dat je daarna de restwaarde opnieuw deelt door 60 en maal 100 doet (je kan het ook delen door 0.6 ;))

ik had de terugzetting na uw loop nog niet goed bekeken :)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #8 geschreven door StOosh op zaterdag 1 maart 2014 om 15:21:43.
StOosh's avatar
Multiviteit: 1526
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Ik heb het met jouw manier uit je voorbeeld opgelost.
Mijn macro is nu overbodig, en eender welke invoer die aangepast wordt nu automatisch verekend.

Danku voor je hulp!
(Ik mag het document dat ik gemaakt heb echter niet uploaden, door de data die het bevat.)

Opmerking van de crew

Op verzoek van TS een (lock) :)

Wheeldigger
^ Reactie #9 geschreven door thekid op donderdag 27 maart 2014 om 21:41:28.
thekid's avatar
Multiviteit: 5273
Moderator
  • Bewerken
  • Citeren
  • Reageren
  • Verwijderen
  • Waarschuw een crewlid
Een kleine toevoeging (waarbij J10 de totaalwaarde in minuten is)

=CONCATENATE(TEXT(FLOOR(J10/60,1),"00"),":",TEXT(MOD(J10,60),"00"))

:D
Deze tekst werd het laatst bewerkt voor 18.67 % door thekid op donderdag 27 maart 2014 om 21:41:59.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • 1 van 1
  • RSS
  • Eerste ongelezen reactie
  • Plaats een reactie
  • Abonneer mij
  • Onderwerp sluiten