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

Gegevens/Tabel copieren/uitbreiden/transponeren

  • Onderwerp starter Onderwerp starter BDS
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

BDS

Gebruiker
Lid geworden
26 jan 2016
Berichten
5
Hallo,

Ik heb een vraagje dat me al lang bezig houd. Ik zou graag van volgende tabel/situatie:

Value 1 Value 2 Value 3
row A 2 3
row B 3 4 5
row C 4

naar volgende situatie/tabel gaan:

Name Value
row A 2
row A 3
row B 3
row B 4
row B 5
row C 4

Uiteraard is dit slechts een model en beschik ik over meerdere data. Ik wil dit automatiseren - en dit is belangrijk - in Excell zelf. Dus zonder een koppeling te leggen naar Access of andere DB tools (d.m.v. joins in relationele database logica).

Alle hulp welkom

Gr.

Bruno De Schepper
 
Bv.
Code:
Sub hsv()
Dim sn, j As Long, jj As Long, n As Long, arr
With Sheets("blad1")
sn = .Cells(1).CurrentRegion
ReDim arr(UBound(sn) * UBound(sn, 2), 1)
  For j = 2 To UBound(sn)
    For jj = 2 To UBound(sn, 2)
      If Not IsEmpty(sn(j, jj)) Then
         arr(n, 0) = sn(j, 1)
         arr(n, 1) = sn(j, jj)
      n = n + 1
     End If
    Next jj
   Next j
    With Sheets("blad2").Cells(1)
     .CurrentRegion.ClearContents
     .Resize(n, 2).Value = arr
   End With
 End With
End Sub
 
Beste Harry,

Bedankt alvast. Ik ga dit eens uitproberen. Ik weet wel nog niet goed hoe ik Visual Basic scripts moet gebruiken/activeren.

Gr.

Bruno De Schepper
 
Dit heet het "unpivot-en" of normaliseren van een tabel. In Power Query doe je dat in een klik of vijf.
 
Goed om te weten.

Code:
Sub M_snb()
   sn = Sheet1.Cells(1).CurrentRegion
   ReDim sp((UBound(sn) - 1) * (UBound(sn, 2) - 1) - 1, 1)
   
   For j = 0 To UBound(sp)
       x = j \ (UBound(sn, 2) - 1) + 2
       y = j Mod (UBound(sn, 2) - 1) + 2
       
       sp(j, 0) = sn(x, 1)
       sp(j, 1) = sn(x, y)
   Next
   
   Sheet2.Cells(2, 4).Resize(UBound(sp) + 1, UBound(sp, 2) + 1) = sp
End Sub
 
@snb, moet ik de "\" zien als de werkbladfunctie '=afronden.naar.boven' ?
 
@HSV

Nee, als de integer formule =int(A1/5)
 
@snb, Natuurlijk, (even nagebootst in een werkblad) die + 2 deed me de das om.
Bedankt.
 
Hallo Snb,

Ik krijg een fout "Objectvariabele niet ingesteld" op de eerste lijn nl. "sn = Sheet1.Cells(1).CurrentRegion"

Gr.

Bruno
 
En bij de code van Harry krijg ik op lijn 3 "sn = .Cells(1).CurrentRegion" de fout "Sub- of functieprocedure niet gedefinieerd"

Gr.

Bruno De Schepper
 
Niet in het voorbeeld-bestand.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan