[Excel] snel 5 kolommen gegroepeerd naar beneden verplaatsen

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Anoniem: 975349

Topicstarter
Mijn vraag
Ik heb een groot data bestand wat ik probeer om te schrijven om deze data te kunnen analyseren nu heb ik data in rijen nodig om dit te kunnen doen. Nu staat de data herhalend in 5 kolommen achter elkaar per deelnemer en allen deelnemers wel in rijen. Heeft iemand een tip hoe ik dit snel kan doen het gaat namelijk om erg veel kolommen die handmatig verplaatst zouden moeten worden

Relevante software en hardware die ik gebruik


Wat ik al gevonden of geprobeerd heb: Normaal transponeren lukt niet omdat het meerdere kolommen zijn en deze steeds tussen bestaande data in moeten.

Handmatig meerdere kolommen slepen is nu mijn optie! :'(

Alle reacties


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Edit: (knip) ik las verkeerd en dacht dat er meer dan 1 rij per persoon was :$

Waar loopt transponeren verkeerd? Misschien kan je een voorbeeld geven?

[ Voor 85% gewijzigd door F_J_K op 26-09-2017 11:05 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Euripides
  • Registratie: November 2016
  • Laatst online: 10:47
Een klein voorbeeld van de opbouw zou het iets gemakkelijker maken om hierop een antwoord te geven.

Is het geen optie om met "=Index()" te werken in een tweede datasheet zodat je data in het gewenste formaat ingevuld wordt?

1x venus C (V151; 1 fase), 1x venus E (V151; 3 fases), HW P1, sagemcom T211 - updated 13MAY25


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Dat ^^^: index of verschuiving icm iets als rij()/5 voor de rij-index en rest(rij();5) voor de kolom-index.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

Anoniem: 975349

Topicstarter
Bedankt voor jullie reacties, ik denk dat ik helaas niet handig genoeg ben om een VBA te maken.
Maar het lukt me ook nog niet met de andere opties ik blijf nog zoeken! haha

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Anoniem: 975349 schreef op dinsdag 26 september 2017 @ 12:17:
Bedankt voor jullie reacties, ik denk dat ik helaas niet handig genoeg ben om een VBA te maken.
Maar het lukt me ook nog niet met de andere opties ik blijf nog zoeken! haha
Index() hielp ook niet?

Geef nu eens een concreet voorbeeld van hoe het nu is en hoe het moet worden? Ik dacht in eerste instantie bijv veel te moeilijk :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

Anoniem: 975349

Topicstarter
Ha FJK,

misschien doe ik het niet goed maar er komt geen geldige waarde uit!
Dit moet:

Piet 09-08-2017 2 23 230 2 08-09-2017 2 02 23 23 21-04-2018 23 23 23 23
Jan 09-09-2017 2 23 4 4

Dit worden

Piet 09-08-2017 2 23 230 2
08-09-2017 2 02 23 23
21-04-2018 23 23 23 23
Jan 09-09-2017 2 23 4 4

Super bedankt voor het mee denken!

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Zoiets?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit

Sub foo()
' data staat in werkblad 'Bronblad', het gaat naar 'Doelblad'

Dim sht As Worksheet
Dim persoon, laatsteRij, laatstKolom, i, doelRij, doelKolom, a As Integer

Set sht = Worksheets("Bronblad")
laatsteRij = sht.Range("A1").End(xlDown).Row

doelRij = 1
For persoon = 1 To laatsteRij
    laatstKolom = sht.Cells(persoon, Columns.Count).End(xlToLeft).Column
    doelKolom = 1
    Worksheets("Doelblad").Cells(doelRij, doelKolom) = sht.Cells(persoon, 1)
    
    For i = 2 To laatstKolom Step 5   'dus i = 2, 7, 12, ...
        doelKolom = doelKolom + 1
        Worksheets("Doelblad").Cells(doelRij, doelKolom).NumberFormat = "dd-mm-yyyy"  'omdat het anders een nummer wordt

        For a = i To i + 4
            Worksheets("Doelblad").Cells(doelRij, doelKolom) = sht.Cells(persoon, a)
            doelKolom = doelKolom + 1
        Next a
        
        doelRij = doelRij + 1
        doelKolom = 0
    Next i
        
Next persoon

End Sub


Aannames: Bronblad en Doelblad beginnen beide in A1 en het is ALTIJD naam + herhaling van steeds 5 velden.
Dan wordt
Piet	9-8-2017	2	23	230	2	8-9-2017	2	2	23	23	21-4-2018	23	23	23	23					
Jan	9-9-2017	2	23	4	4															
Henk	9-9-2017	1	23	3	4	9-9-2017	1	32	43	5	9-9-2017	9	7	4	3	9-9-2017	45	2	12	1

Dit:
Piet	09-08-2017	2	23	230	2
08-09-2017	2	2	23	23	
21-04-2018	23	23	23	23	
Jan	09-09-2017	2	23	4	4
Henk	09-09-2017	1	23	3	4
09-09-2017	1	32	43	5	
09-09-2017	9	7	4	3	
09-09-2017	45	2	12	1	

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Anoniem: 975349 schreef op dinsdag 26 september 2017 @ 12:17:
Bedankt voor jullie reacties, ik denk dat ik helaas niet handig genoeg ben om een VBA te maken.
Maar het lukt me ook nog niet met de andere opties ik blijf nog zoeken! haha
Wie heeft het over VBA?
misschien doe ik het niet goed maar er komt geen geldige waarde uit!
Best, geef dan op zijn minst wat je hebt ingevuld 'waar geen geldige waarde uitkomt'. Je bent op het spoor tvan index gezet en een voorbeeld hoe je de kolommen en rijen zou moeten berekenen: waar loop je dan vast? Of op zijn Brabants: 'kan niet ligt op het kerkhof"

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 11:06
F_J_K schreef op dinsdag 26 september 2017 @ 14:20:
Zoiets?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit

Sub foo()
' data staat in werkblad 'Bronblad', het gaat naar 'Doelblad'

Dim sht As Worksheet
Dim persoon, laatsteRij, laatstKolom, i, doelRij, doelKolom, a As Integer

Set sht = Worksheets("Bronblad")
laatsteRij = sht.Range("A1").End(xlDown).Row

doelRij = 1
For persoon = 1 To laatsteRij
    laatstKolom = sht.Cells(persoon, Columns.Count).End(xlToLeft).Column
    doelKolom = 1
    Worksheets("Doelblad").Cells(doelRij, doelKolom) = sht.Cells(persoon, 1)
    
    For i = 2 To laatstKolom Step 5   'dus i = 2, 7, 12, ...
        doelKolom = doelKolom + 1
        Worksheets("Doelblad").Cells(doelRij, doelKolom).NumberFormat = "dd-mm-yyyy"  'omdat het anders een nummer wordt

        For a = i To i + 4
            Worksheets("Doelblad").Cells(doelRij, doelKolom) = sht.Cells(persoon, a)
            doelKolom = doelKolom + 1
        Next a
        
        doelRij = doelRij + 1
        doelKolom = 0
    Next i
        
Next persoon

End Sub


Aannames: Bronblad en Doelblad beginnen beide in A1 en het is ALTIJD naam + herhaling van steeds 5 velden.
Dan wordt
Piet	9-8-2017	2	23	230	2	8-9-2017	2	2	23	23	21-4-2018	23	23	23	23					
Jan	9-9-2017	2	23	4	4															
Henk	9-9-2017	1	23	3	4	9-9-2017	1	32	43	5	9-9-2017	9	7	4	3	9-9-2017	45	2	12	1

Dit:
Piet	09-08-2017	2	23	230	2
08-09-2017	2	2	23	23	
21-04-2018	23	23	23	23	
Jan	09-09-2017	2	23	4	4
Henk	09-09-2017	1	23	3	4
09-09-2017	1	32	43	5	
09-09-2017	9	7	4	3	
09-09-2017	45	2	12	1	
Werkt prima.. houd er wel rekening mee dat als je meer dan 32.767 rijen in je bronsheet hebt, je bij het bepalen van (bijvoorbeeld) laatsteRij tegen de grenzen van een integer aanloopt (bereik: -32,767 tot 32,767). Dit geldt ook voor alle andere 'tellers' in het script. Je zou deze variabelen voor de veiligheid beter kunnen dimensioneren als Long (-2.147.483.648 tot 2.147.483.647).

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

breew schreef op dinsdag 26 september 2017 @ 14:57:
[...]
Dit geldt ook voor alle andere 'tellers' in het script. Je zou deze variabelen voor de veiligheid beter kunnen dimensioneren als Long (-2.147.483.648 tot 2.147.483.647).
Gelukkig dimensioneert @F_J_K alleen de variabele a als een integer en de rest als een variant. ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 11:06
Lustucru schreef op dinsdag 26 september 2017 @ 15:10:
[...]


Gelukkig dimensioneert @F_J_K alleen de variabele a als een integer en de rest als een variant. ;)
haha, verrek ja.. ik zie het :)

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

...wat dan ook dom is van me aangezien ik dat wel van plan was als integer. Ik heb te lang geen vba gebruikt. Dit is potdorie vast een van top10 meestgemaakte fouten 8)7

VBA van het web overigens NOOIT gebruiken als je niet en een backup hebt en begrijpt wat er staat. Dit is sowieso quick&dirty obv diverse aannames. En van mij is het sowieso fout om een volledig script voor te kauwen ;) Netjes zonder VBA met standaard Excel is beter. Zeker als je niet de enige bent die het gebruikt.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)

Pagina: 1