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

Draaitabel

Status
Niet open voor verdere reacties.

Kielseeh

Gebruiker
Lid geworden
8 feb 2019
Berichten
5
Beste,

ik heb een sheet gemaakt, met verschillende koppen, die dezelfde benaming hebben.
in de lijst in bijlage, zou ik de km van een bepaalde nummerplaat willen laten optellen.

Deze nummerplaten, kunnen per "chauffeur" verschillen en verschillende chauffeurs, kunnen met dezelfde nummerplaat gereden hebben.

Dus voor deze sheet zou ik eigenlijk willen zeggen

nummerplaat 1HPT776 heeft die maand in totaal zoveel gereden.
De nummerplaat 1HPT776 kom zowel bij Ronny als Georges voor.

Als ik hier een draaitabel maak krijg ik steeds bij nummerplaat, nummerplaat1, nummerplaat2 enz...

Ik ben jullie allen al zeer dankbaar, laat ons hopen dat er iemand een super goed idee heeft.
 

Bijlagen

  • Forum.xlsx
    26,2 KB · Weergaven: 32
Om een draaitabel te kunnen maken heb je een platte tabel nodig. De brongegevens in jouw sheet zijn niet een- maar tweedimensionaal gerangschikt, omdat de namen van de chauffeurs in de kolommen staan. Voeg een nieuw werkblad (2) in en draai onderstaande code. Die genereert de benodige platte tabel op basis waarvan je een draaitabel kunt maken.

Code:
Sub tsh()
    Dim Br
    Dim i As Long, j As Long
    
    With CreateObject("System.Collections.Arraylist")
        .Add Array("Naam", "Datum", "Begin", "Eind", "Uren", "Begin km", "Eind km", "Kenteken", "Kilometers")
        Br = Sheets(1).Cells(1).CurrentRegion
        For j = 0 To (UBound(Br, 2) - 1) / 7 - 1
            For i = 3 To UBound(Br)
                If Br(i, j * 7 + 2) > 0 Then .Add Array(Br(1, j * 7 + 2), Format(Br(i, 1), "mm-dd-yyyy"), _
                    Br(i, j * 7 + 2), Br(i, j * 7 + 3), Br(i, j * 7 + 4), Br(i, j * 7 + 5), _
                    Br(i, j * 7 + 6), Br(i, j * 7 + 7), Br(i, j * 7 + 8))
            Next
        Next
        Sheets(2).Cells(1, 1).Resize(.Count, 9) = Application.Index(.ToArray, 0)
    End With
End Sub
 
Beste,

bedankt voor uw snelle feedback, ik ben nogal -huis-tuin-keuken excel gewoon.
dus zou het mogelijk zijn, om mij te vertellen wat u bedoelt met code laten draaien?

mvg
 
Stappenplan, uitgaande van het voorbeeldbestand:
1. Voeg een nieuw tabblad (2) in.
2. Druk ALT-F11 om de VBA-editor te openen. Dit is de programmeerlaag van Office/Excel.
3. Invoegen -> Module.
4. Kopieer een plak de code in de module. Sluit de editor weer af.
5. Druk ALT-F8, selecteer 'tsh' en kies voor uitvoeren. Voilà.

Ik zie graag dat je iets opsteekt van deze inspanning. Snap je dat jouw tabel niet geschikt is om als basis te dienen voor een draaitabel?
 
Goeiemorgen Timshell,

ik zie zeker waarom mijn tabel niet geschikt is, bedankt voor uw kennis door te geven.
Nu had ik echter al paar kolommen/tabbladen toegevoegd aan mijn bestand, waardoor de code niet werkt volgens mij.
Ik heb dit "enkel" nodig, voor de maand sheets "012019" / "022019" enzo in de toekomst
heb de originele excel dat hier in bijlage was ook gebruikt en uiteraard is dat gelukt, met uw fanatische kennis.

Ik vrees echter dat ik ze nog eens nodig heb, ik vermoed dat zo een macro schrijven niet echt aan leken is weg gelegd.

Wederom enorm bedankt al!
 

Bijlagen

  • verwerking werkbladen.xlsx
    73,4 KB · Weergaven: 25
Je zou er als leek verstandig aan doen je spreadsheets zo te ontwerpen dat programmeerwerk niet nodig is, bijvoorbeeld door je gegevens van begin af aan in de vorm van een platte tabel in te kloppen. Gegeven dat in dit geval die platte tabel met een macro wordt gegenereerd is het noodzakelijk, of toch in hoge mate wenselijk, dat de gegevens een eenduidige structuur hebben. In tabblad 012019 zijn er 7 kolommen per chauffeur terwijl het er in tabblad 022019 8 zijn. Dat is géén eenduidige structuur. Plaats een nieuw bestand met een eenduidige structuur.
 
Laatst bewerkt door een moderator:
Hey,

ik heb men tabel aangepast, de layout is zoals het in 022019 is.
als leek, heb ik enkel gewerkt, in het oog om iets mooi te hebben niet zo verstandig blijkt nu. Maar ik ben blij dat je zo behulpzaam bent.

Maar als ik het goed begrijp, zou ik eigenlijk deze gegevens, gewoon in een platte tabel kloppen, en dan de layout via een pivot laten gaan?

in bijlage kan je de juiste (hopenlijk) excel terug vinden!
 

Bijlagen

  • dagverslag.xlsx
    112,6 KB · Weergaven: 42
Bijgaande aangepaste code voegt zelf een nieuw werkblad in en genereert een platte tabel op basis van het actieve werkblad. Het aantal kolommen per chauffeur is variabel gemaakt en kan aangepast worden in de bovenste coderegel. De relatie van het bestand dagverslag.xlsx met je vraag ontgaat mij.
Code:
Const N = 8 'Aantal kolommen per chauffeur

Sub tsh()
    Dim Br, Bq
    Dim i As Long, j As Long, k As Long
    Dim Sh
    Dim sShNm As String
    
    Set Sh = ActiveSheet
    sShNm = Sh.Name & "_tbl"
    ReDim Bq(N + 1)
    If IsError(Evaluate(sShNm & "!A1")) Then
        Sheets.Add(After:=Sheets(Sheets.Count)).Name = sShNm
    Else
        Sheets(sShNm).Cells.Clear
    End If
    Br = Sh.Cells(1).CurrentRegion
    Bq(0) = "Naam"
    Bq(1) = "Datum"
    For k = 2 To N + 1
        Bq(k) = Br(2, k)
    Next
    With CreateObject("System.Collections.Arraylist")
        .Add Bq
        For j = 0 To (UBound(Br, 2) - 1) / N - 1
            i = 3
            Bq(0) = Br(1, j * N + 2)
            Do While Br(i, 1) > 0
                Bq(1) = Format(Br(i, 1), "mm-dd-yyyy")
                If Br(i, j * N + 2) > 0 Then
                    For k = 2 To N + 1
                        Bq(k) = Br(i, j * N + k)
                    Next
                    .Add Bq
                End If
                i = i + 1
            Loop
        Next
        Sheets(sShNm).Cells(1, 1).Resize(.Count, N + 2) = Application.Index(.ToArray, 0)
        Sheets(sShNm).Columns(3).Resize(, N - 4).NumberFormat = "[$-F400]h:mm:ss AM/PM"
    End With
End Sub
 
Laatst bewerkt:
Beste,

ik heb met accident, de verkeerde excel toegevoegd, maar met u capaciteiten was dat uiteraard geen probleem.
Het werkt perfect, op dit moment bent u even mijn held.

Alvast bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan