Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

Excel data opsplitsen in meerdere rijen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een project moet ik een grote hoeveelheid data in Excel aanleveren.
Momenteel staat de data echter op een verkeerde manier opgelijst.

Nu heb ik per rij een uniek contractnummer en hoeveel keer A inbegrepen is en hoeveel keer B.
Dit zou moeten opgesplitst worden zodat voor elke keer A en/of B inbegrepen is er een nieuwe rij aangemaakt word waarin de nummering bij A en B oploopt per contract. Hieronder een voorbeeld om het duidelijker uit te leggen.

VOOR
ContractnummerAB
100031
100122
100201


NA
1000A1
1000A2
1000A3
1000B1
1001A1
1001A2
1001B1
1001B2
1002B1


Hoe kan ik dit het best bekomen?
Ik wil gerust zelf zoeken en het werk doen uiteraard maar weet niet goed waar ik moet beginnen.

Alvast bedankt.

  • breew
  • Registratie: April 2014
  • Laatst online: 07:43
Dit kun je binnen een minuut regelen met de excel-addon "power query".
Als je even zoekt op dit forum, dan krijg je wel wat hits op recente topics.

Met google is het zoekwoord: excel +unpivot

succes!!

Verwijderd

dit lijkt met met vba ook niet zo heel lastig te bekomen. even in de for-syntax van vba duiken en hoe je een cell kunt uitlezen, dan is het niet zo heel moeilijk om een hele range door te lopen en output te genereren in een nieuwe sheet. speel er eens mee, het lijkt me een leuke casus om vba iets beter te leren kennen :)

Verwijderd

Topicstarter
Bedankt voor de replies, met unpivot ging het helaas niet, ik heb het met vba moeten oplossen en het was inderdaad wel een leuke introductie in vba.

Hieronder de code voor de liefhebbers van slordige code..
Dit was voor een tabel met 4 kolommen ipv 3 zoals in het voorbeeld in de OP.


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
34
35
36
37
Sub Meetpunten()

    Dim rij As Long
    Dim kol As Long
    Dim rij2 As Long
    Dim aant As Long
    Dim aant2 As Long
    
    rij = 2
    kol = 2
    rij2 = 1
    
Start:
    aant = Worksheets("src").Cells(rij, kol).Value
    If aant > 0 Then
    aant2 = 1
Mtp:
    Worksheets("dig").Cells(rij2, 1).Value = Worksheets("src").Cells(rij, 1).Value
    Worksheets("dig").Cells(rij2, 2).Value = Worksheets("src").Cells(1, kol).Value
    Worksheets("dig").Cells(rij2, 3).Value = aant2
    aant2 = aant2 + 1
    rij2 = rij2 + 1
    If aant2 <= aant Then
    GoTo Mtp
    End If
    End If
    kol = kol + 1
    If kol <= 4 Then
    GoTo Start
    End If
    kol = 2
    rij = rij + 1
    If Worksheets("src").Cells(rij, 1) > 0 Then
    GoTo Start
    End If
    
End Sub


Afbeeldingslocatie: https://image.ibb.co/mcMLKw/MTP.png

[ Voor 5% gewijzigd door Verwijderd op 03-01-2018 17:50 ]


  • breew
  • Registratie: April 2014
  • Laatst online: 07:43
Verwijderd schreef op woensdag 3 januari 2018 @ 17:24:
dit lijkt met met vba ook niet zo heel lastig te bekomen. even in de for-syntax van vba duiken en hoe je een cell kunt uitlezen, dan is het niet zo heel moeilijk om een hele range door te lopen en output te genereren in een nieuwe sheet. speel er eens mee, het lijkt me een leuke casus om vba iets beter te leren kennen :)
Correct, en normaal gesproken is vba ook mijn 'weapon of choice'. Maar waarom zou je die moeite nemen als je met power query (gratis te downloaden van M$) dergelijke operaties moeiteloos uit kunt voeren.
breew in "[EXCEL] Draaitabel van gegevens maken"

edit: oh wacht, ik zie nu pas dat je ook reeksen wilt aanleggen tot een maximum... dan is vba idd the way to go (denk ik).

[ Voor 8% gewijzigd door breew op 03-01-2018 17:39 ]


Verwijderd

breew schreef op woensdag 3 januari 2018 @ 17:36:
[...]

Correct, en normaal gesproken is vba ook mijn 'weapon of choice'. Maar waarom zou je die moeite nemen als je met power query (gratis te downloaden van M$) dergelijke operaties moeiteloos uit kunt voeren.
breew in "[EXCEL] Draaitabel van gegevens maken"
er zijn meerdere wegen die naar rome leiden. als je wat vaker met excel werkt zijn zowel vba als power query zeer handige tools om te beheersen :)

  • breew
  • Registratie: April 2014
  • Laatst online: 07:43
@Verwijderd
tip: zet je code even tussen
[code=vb] ........ [/code]

Dan verschijnt het mooi opgemaakt (en beter leesbaar) in je post.

  • breew
  • Registratie: April 2014
  • Laatst online: 07:43
@Verwijderd
Sorry, ik kon het niet laten.. ik ben allergisch voor GoTo's :+ :+
Afbeeldingslocatie: https://imgs.xkcd.com/comics/goto.png


Onderstaande code levert iig de resultaten op in je openingspost O-)
Aangezien het bereik dynamisch wordt vastgesteld (op basis van de onderste rij en de meest rechter kolom in werkblad 'src'), zal het vast ook werken voor het andere voorbeeld (en je productiedata).

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
34
35
36
37
38
Option Explicit

Sub DaarGaanWe()

  Dim wsDig As Worksheet
  Dim wsSrc As Worksheet
  Dim lonLaatsteRijSrc As Long
  Dim lonLaatsteKolomSrc As Long
  Dim lonLaatsteRijDig As Long
  Dim i As Long
  Dim c As Range
  Dim rng As Range
  
  Set wsDig = ActiveWorkbook.Sheets("dig")
  Set wsSrc = ActiveWorkbook.Sheets("src")
  
  With wsSrc
    lonLaatsteRijSrc = .Cells(Rows.Count, "A").End(xlUp).Row
    lonLaatsteKolomSrc = .Cells(1, Columns.Count).End(xlToLeft).Column
    Set rng = .Range(.Cells(2, 2), .Cells(lonLaatsteRijSrc, lonLaatsteKolomSrc))
  End With
  
  For Each c In rng
    If c.Value > 0 Then
      i = 0
      Do While i < c.Value
        i = i + 1
        With wsDig
          lonLaatsteRijDig = .Cells(Rows.Count, "A").End(xlUp).Row + 1
          .Cells(lonLaatsteRijDig, 1).Value = wsSrc.Cells(c.Row, 1).Value
          .Cells(lonLaatsteRijDig, 2).Value = wsSrc.Cells(1, c.Column).Value
          .Cells(lonLaatsteRijDig, 3).Value = i
        End With
      Loop
    End If
  Next c

End Sub

[ Voor 9% gewijzigd door breew op 03-01-2018 18:55 ]


  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 07:03
breew schreef op woensdag 3 januari 2018 @ 18:10:
@Verwijderd
Sorry, ik kon het niet laten.. ik ben allergisch voor GoTo's :+ :+
En toch is een goto soms de beste oplossing (maar meestal een hele foute).

A software developer is someone who looks both left and right when crossing a one-way street.

Pagina: 1