• 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.

Diverse productiviteitsmacro's s naar 1 outputsheet

Status
Niet open voor verdere reacties.

Niek91

Gebruiker
Lid geworden
22 feb 2012
Berichten
77
Hallo,

Op dit moment hebben we binnen onze organisatie diverse productiviteitsmetingen. Echter gebeurd dit allemaal verschillend en vrij omslachtig. Nu ben ik bezig om alles in 1 bestand te krijgen met 1 outputbestand waar alle metingen op staan.
Ik wil graag dat we zometeen alleen nog maar de data in excel hoeven te droppen en dat het rekenwerk door bijvoorbeeld macro's wordt gedaan. Echter... Ik ben niet zo goed met macro's.

Zou iemand mij daarbij willen en kunnen helpen?

In de bijlage een opzetje van hoe het bestand er ongeveer uit komt te zien. Alleen dan met meer data/personen. Ik heb in de inputvelden alleen de data laten staan wat nodig is om de berekening te doen.

Alvast bedankt.

Bekijk bijlage Format productiviteit.xlsx
 
Goedemorgen,

Ik begrijp dat het een complexe vraag is. Maar ben er zelf ook nog steeds niet uitgekomen. Iemand die me hiermee kan helpen?

Alvast onwijs bedankt.
 
vreemd, in het Productiviteit blad staan namen van personen,
in alle andere bladen zie ik die niet terug
ik ben een beetje woordblind.
vertel eens waar ik die personen terug kan vinden
 
nie simpel nie, hoe moet her resultaat er uit zien ?
hoe zag het er tot nog toe uit voor bv. 1 soort productiviteit ?
 
en waar zijn de formules of macros om dat te doen ?
in je eerdere voorbeeld "orderpicken" kolom R is niet eens chronologisch. Is dat zo of is het een slecht voorbeeld ???
 
Laatst bewerkt:
enkel voor orderpicken, voor de rest maken we straks een loopje
ik verwacht dat de tijden in kolom R per persoon chronologisch zijn, de personen mogen wel door elkaar staan.
Code:
Sub ProductiviteitOrderpicken()
  Dim a, i&, it, dTijd As Double, splits
  a = Sheets("orderpicken").Range("A1").CurrentRegion
  With CreateObject("scripting.dictionary")
    .comparemode = 1
    For i = 2 To UBound(a)
      it = .Item(a(i, 20))                                 'kijk naar die persoon in de dictionary
      Select Case VarType(a(i, 18))                        'kijk naar je tijd
        Case vbString                                      'is het een string
          splits = Split(Replace(a(i, 18), "-", " "))      'vervang "-" door een spatie en verknip op die spaties
          If UBound(splits) = 3 Then                       '4 knipsels
            a(i, 18) = DateSerial(splits(2), splits(1), splits(0)) + TimeValue(splits(3))  'je tijdstip met datum
          Else
            a(i, 18) = TimeValue(splits(0))                'je tijdstip
          End If
        Case vbDate                                        'het is al een date
        Case Else: MsgBox "x vbDate"
      End Select

      dTijd = a(i, 18)                                     'maak er een double van
      If VarType(it) = vbEmpty Then                        'persoon bestond nog niet in dictionary
        .Item(a(i, 20)) = Array(a(i, 20), dTijd, dTijd, 0, 1, 0, 0)  'array met naam, Start, Einde, onderbrekingen,aantal scans, gewerkte tijd,Productiviteit
      Else
        If dTijd - it(2) > TimeSerial(0, 20, 0) Then it(3) = it(3) + dTijd - it(2)  'tijd tov vorig gegeven bijtellen indien tussentijd>20 min
        it(4) = it(4) + 1                                  'scan + 1
        it(2) = dTijd                                      'laatste tijd
        .Item(a(i, 20)) = it                               'terugschrijven naar dictionary
      End If
    Next
    If .Count = 1 Then .Item("") = Array("", "", "", "", "", "", "")

    a = ""
    If .Count Then
      a = Application.Transpose(Application.Transpose(.items))  'uitlezen items van dictionary
      For i = 1 To UBound(a)                               'alle personen aflopen
        If Len(a(i, 1)) Then
          a(i, 6) = a(i, 3) - a(i, 2) - a(i, 4)            'gewerkte tijd
          a(i, 7) = a(i, 5) / (a(i, 6) + 0.0000000001) / 24  'productiviteit
        End If
      Next
    End If
  End With

  If IsArray(a) Then
    With Sheets("productiviteit").Range("A30")             'naar hier schrijven
      .Resize(, 7).Value = Array("naam", "Start", "Einde", "onderbrekingen", "aantal scans", "gewerkte tijd", "Productiviteit")  'de kop
      .Offset(1).Resize(UBound(a), UBound(a, 2)).Value = a  'de gegevens
    End With
  End If

End Sub
 
Hoi Cow,

Dank voor je hulp. ziet er goed uit. Helaas ben ik nog echt niet goed met VBA:(

Ik heb volgens mij de code goed toegevoegd in het bestand. Ook staan de tijden en personen chronologisch. maar ik krijg echter nog geen resultaat in het outputblad.

Bekijk bijlage Format productiviteit.xlsm
 
zie bijlage, ik schreef in de vorige versie naar rij 30 onder je tabellen. Nu schrijf ik in de tabel.
Als het voor jou een extra handeling vraagt, dan kan excel zelf wel alles chronologisch ordenen, maar het leek me logisch dat die scans dat vanzelf waren of niet ?
 

Bijlagen

Hoi Cow, ziet er goed uit en het werkt. Alleen de tijd wordt in excel niet automatisch op chronologische volgorde gezet. Dus dit zou zo overgezet kunnen worden naar de andere bladen.
 
Hoi Cow, Helemaal fantastisch. Dank. Heb nog wat kleine dingen aangepast en de lay out wat biigewerkt. Maar in een eerder bestand wat je stuurde kon ik in de VBA de marge aanpassen om het bereik groter te maken. Als ik onze actuele data erin plak dan neemt die nu niet alles mee. Bijvoorbeeld bij inpakken maar 3 personen terwijl ik dat wil aanpassen naar 28. Kan je mij laten zien waar in de code ik dat kan wijzigen?
 
er zijn daar enkele gedefinieerde namen, bv. Res_Inpakken, als je daarvan het bereik vergroot ben je vertrokken.
Ik wist alleen niet hoe je die laatste groep van trucks en inpakkers zag.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan