• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Tijdsgegevens omzetten naar getallen.

Status
Niet open voor verdere reacties.

Academy

Gebruiker
Lid geworden
4 jun 2013
Berichten
23
Hallo,

Ik krijg wekelijks een reeks gegevens in .txt indeling, die ik in Excel moet berekenen. Doch de weergave van de gegevens zijn niet altijd om over naar huis te schrijven.
Die gegevens moeten tijden voorstellen, maar naar mijn mening zijn deze als tekst ingevoerd. (bv. 1:34.056). Hier moet naderhand één gemiddelde over berekend worden,
maar is mij helaas nog niet gelukt om daar een goede formule voor te vinden. Ik ben dan ook op zoek naar een formule of macro die eerst alle troep uit deze cel haalt en er uiteindelijk
een getal van maakt, waarmee ik het gemiddelde dan kan gaan berekenen.

Zo moet bijvoorbeeld binnen de cel de dubbele punt, de punt, eventuele spaties en namen worden verwijderd.
Dat doe ik momenteel met de optie Zoeken en vervangen binnen Excel. Dat werkt op zich goed, maar is erg omslachtig.
Dan blijft er een getal over (bv 134.056). Als ik de punt wil vervangen, dan krijg ik in Excel een foutmelding dat dat niet mogelijk is.
Als ik de functie gemiddelde wil gebruiken, krijg ik altijd een deling door 0. Ik heb de eigenschappen van de cellen al op verschillende
manieren aangepast, maar helaas. Misschien dat er hier iemand is die weet wat ik fout doe.

Ik wil dit graag vereenvoudigen door middel van een rekenfunctie binnen Excel of eventueel met een macro. Misschien zit ik der helemaal naast met mijn oplossing,
vandaar dat ik deze vraag dan ook hier op het Excel forum wil voorleggen. Misschien kijk ik verkeerd en is er een veel simpelere of makkelijkere oplossing voor te vinden.
Waarvoor ik mijn dank alvast uitspreek. Als bijlage een voorbeeld bestand. Ik maak zelf gebruik van Office 2019 Pro.

Bij voorbaat dank.
 

Bijlagen

  • Gegevens in cel verwijderen en omzetten in getallen.xlsx
    13 KB · Weergaven: 11
Probeer eens

Code:
Sub test()
Dim i As Long, x As Long, lr As Long, vt As Double, va As Long
lr = Range("C" & Rows.Count).End(xlUp).Row
arr = Range("C5", "C" & lr).Value
For i = 1 To UBound(arr)
    For x = 1 To Len(arr(i, 1))
        If IsNumeric(Mid(arr(i, 1), x, 1)) Then
            mstr = mstr & Mid(arr(i, 1), x, 1)
        End If
    Next
    arr(i, 1) = Val(mstr)
    va = va + 1
    vt = vt + Val(mstr)
    mstr = ""
Next
Range("E5").Resize(UBound(arr)) = arr
Range("G5") = Application.Round(vt / va, 0)
End Sub

Vriendelijke groet
Leo
 

Bijlagen

  • 8-06-2021 Gegevens in cel verwijderen en omzetten in getallen.xlsm
    17,8 KB · Weergaven: 14
Met Power Query kun je de getallen direct vanuit de txt-file inlezen en omzetten naar een gemiddelde in het door jou gewenste format...
 

Bijlagen

  • Gegevens in cel verwijderen en omzetten in getallen (AC).xlsx
    22,4 KB · Weergaven: 14
Formule:

PHP:
=--SUBSTITUTE(TRIM(LEFT(C5;9));".";",")

Format

PHP:
uu:mm:ss,000
 
Probeer eens

Code:
Sub test()
Dim i As Long, x As Long, lr As Long, vt As Double, va As Long
lr = Range("C" & Rows.Count).End(xlUp).Row
arr = Range("C5", "C" & lr).Value
For i = 1 To UBound(arr)
    For x = 1 To Len(arr(i, 1))
        If IsNumeric(Mid(arr(i, 1), x, 1)) Then
            mstr = mstr & Mid(arr(i, 1), x, 1)
        End If
    Next
    arr(i, 1) = Val(mstr)
    va = va + 1
    vt = vt + Val(mstr)
    mstr = ""
Next
Range("E5").Resize(UBound(arr)) = arr
Range("G5") = Application.Round(vt / va, 0)
End Sub

Vriendelijke groet
Leo


Ten eerste.... alvast bedankt aan eenieder, voor alle genomen moeite op mijn vraagstelling. Dank.

Hallo Leo,

Heb het uitgeprobeerd en het werkt vooralsnog perfect. Een kwestie van de gegevens kopiëren en plakken en de macro doet zijn werk.
Doch, zo gauw als er in de gegevens van het .txt bestand, cijfers in de namen worden weergegeven, doet de macro dit op een andere manier verwerken.
Het Lijkt wel alsof deze mee worden genomen in de weergave in kolom E en dat dit dan ook weer doorwerkt in cel G5.

Ik had al eens geprobeerd met minder decimalen, maar dat werkte helaas niet.
Hoe kan ik de cijfers die in de namen voorkomen niet mee laten gaan in de oplossing?
Ik denk, als dit euvel kan worden opgelost, dan werkt het volgens mij als de brandweer.
Ik heb een voorbeeldje bijgevoegd, met de gegevens zoals hierboven beschreven.

Voorbeeld.jpg

Ik ben niet zo'n macro specialist, maar vind het wel interessant om te weten wat die macro precies doet.

Wederom bedankt.
 
Als de namen altijd tussen ( ) staan kan deze

Code:
Sub test()
Dim i As Long, x As Long, lr As Long, vt As Double, va As Long
lr = Range("C" & Rows.Count).End(xlUp).Row
arr = Range("C5", "C" & lr).Value
For i = 1 To UBound(arr)
    st = Application.Search("(", arr(i, 1), 1)
    For x = 1 To st
        If IsNumeric(Mid(arr(i, 1), x, 1)) Then
            mstr = mstr & Mid(arr(i, 1), x, 1)
        End If
    Next
    arr(i, 1) = Val(mstr)
    va = va + 1
    vt = vt + Val(mstr)
    mstr = ""
Next
Range("E5").Resize(UBound(arr)) = arr
Range("G5") = Application.Round(vt / va, 0)
End Sub

mvg
Leo
 
P R A C H T I G.

PERFECT. :thumb:
Namen staan inderdaad altijd tussen haakjes. Dus... dat is um. Dat lost het probleem in één keer op.

Nu ben ik wel erg nieuwsgierig. Maar wat is er nu anders aan deze macro, ten opzichte van de vorige?
Ik probeer het voor mezelf te begrijpen, maar het wil nog niet zo lukken.

Ik wil mij in ieder geval bedanken voor deze mooie oplossing. Dank. :thumb:
 
verschil met vorige is dat hij nu niet de volledige lengte van cel doorloopt, maar juist tot (

mvg
Leo
 
Okay. Duidelijk.

Ik heb zelf een simpele macro knop gemaakt om alle cellen weer leeg te kunnen maken. Mocht ik dan daarna per ongeluk -of bewust- de macro nogmaals runnen, dan krijg ik een foutmelding zoals in de bijlage.
Ten teken dat de cellen leeg zijn, denk ik zo. Op zich is dat geen ramp. Kwestie van maar 1x op de knop klikken. Hoofdzaak is dat ik na het plakken van de gegevens de juiste getallen krijg te zien.

Heel veel dank. :thumb:

fout voorbeeld.jpg
 
Lijkt me voldoende:

Code:
Sub M_snb()
   Columns(3).Replace " *", ""
   Columns(3).Replace ".", ","
   Cells(5, 7) = "=average(C5:C7)"
   Cells(5, 7).NumberFormat = "mm:ss.000"
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan