Ga naar inhoud

Vanuit tabel meerdere waarden oplijsten


Dixon

Aanbevolen berichten

Beste,

 

 

Ik heb een bestand met twee tabbladen, nl.:

  1. Gegevens
  2. Lijst

 

Gegevens

In het tabblad "Gegevens" staat een tabel / kalender met allerlei gegevens.

Ik zou via een macro deze tabel moeten kunnen omzetten in een lijst zoals op tabblad "Lijst".

De weergave zou dus voor elke dag de waarde bij een bepaald nummer moeten weergeven.

 

Bijkomend probleem:

De kalender telt nu 10 rijen (nummers) en 15 kolommen (dagen). Ik weet nooit hoe lang de lijst zal zijn en hoe lang de kalender zal zijn.

D.w.z. dat er volgende keer 15 of 20 rijen (nummers) kunnen staan OF dat er 30 of 31 kolommen (dagen) in kunnen staan.

 

Ter info:

Het max. aantal nummers is ongekend (t.e.m. de eerste blanco)

Het max aantal dagen is 31.

 

Hoe zou ik dit door een macro kunnen laten transformeren?

 

 

Hartelijk dank.

 

 

Dixon

 

Voorbeeld.xlsx

aangepast door Dixon
Link naar reactie
Delen op andere sites

Hey JeanPaul28,

 

 

Dat werkt ongelooflijk goed, maar in de omgekeerde richting.

De basis is het tabblad gegevens en de output zou de lijst moeten zijn.

 

Tabblad gegevens is een kalender dat aangeleverd wordt. Ik zou dit in lijst vorm moeten kunnen verwerken.

 

Bedankt!

 

 

Dixon

Link naar reactie
Delen op andere sites

@Dixon,

Je hebt 10 nummers in kolom A en 15 datums in rij 1
In blad "Lijst" moeten de datums vertikaal komen in kolom A, en elk nummer moet bij elke datum weergegeven worden, wat wil zeggen dat elke datum vertikaal 10 x moet worden weergegeven. Dat worden dan 15 x 10 = 150 datums. In A2:A11 komt dan 01-09-17, in A12:A21 komt 02-09-17, enz. Programmatisch kopieer je 01-09-17 naar A2:A11, 02-09-17 naar A12:A21, enz.
De nummers 1 t/m 10 kopieer je naar B2:B11, B12:B21, enz., totaal 15 x.
De gegevens in de kolommen B t/m P van het blad "Gegevens" moeten in Blad "Lijst" onder elkaar komem in kolom C (vanaf C2). Dat betekent ook weer 15 x kopiëren, waarbij het kolomnr. telkens met 1 en  het rijnr. met 10 moet worden opgehoogd.
De getallen 10 en 15 van hierboven maak je variabel (je noemt ze bv. a en b, waarbij a kan staan voor het aantal nummers en b voor het aantal datums), zodat ze niet alleen voor de getallen 10 en 15 maar voor elk aantal nummers en elk aantal datums gelden.
Dat is in het kort het belangrijkste wat programmatisch moet gebeuren.
Het kost een aantal uren tijd, maar dan heb je ook wat.

 

Link naar reactie
Delen op andere sites

  • 2 weken later...

Er gaat veel tijd verloren met over en weer kopieëren van gegevens, daarom bouw je best je array op in het geheugen en schrijf deze dan in 1X naar je werkblad Lijst.

Test deze maar eens met een variabel aantal rijen en kolommen.
 

Sub tst()
    Dim sn, sq, j As Long, i As Long, ii As Long
    't = Timer
    sn = Blad1.Cells(1).CurrentRegion.Value
    ReDim sq(1 To (UBound(sn) * UBound(sn, 2)), 1 To 3)
    j = 1
    
    For i = 2 To UBound(sn, 2)
        For ii = 2 To UBound(sn)
            sq(j, 1) = sn(1, i)
            sq(j, 2) = sn(ii, 1)
            sq(j, 3) = sn(ii, i)
            j = j + 1
        Next
    Next
    
    With Blad2
        .Cells(1).CurrentRegion.Offset(1).ClearContents
        .Cells(2, 1).Resize(UBound(sq), 3) = sq
    End With
    'MsgBox Timer - t
End Sub

 

Link naar reactie
Delen op andere sites

×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.