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

data van verschillende kolommen automatisch in één kolom onder elkaar plakken

Status
Niet open voor verdere reacties.

Rawry

Gebruiker
Lid geworden
18 dec 2014
Berichten
33
Hoi allemaal,

Ik zie mezelf uitgedaagd met het zoeken van een oplossing voor het volgende voorbeeld:

Stel ik heb in sheet 1 een aantal kolommen met data
In kolom A vul ik onder elkaar evenementen voor januari in (op volgorde van datum)
In kolom B doe ik dat voor evenementen van februari
In kolom C voor evenementen van maart
etc.

Hoe kan ik ervoor zorgen dat ik in sheet 2 Alle ingevulde evenementen van sheet1 (kolom A t/m L) op volgorde van datum onder elkaar krijg.
Ik wil dat wanneer ik later bijoorbeeld in sheet 1 kolom B nog een evenement toe moet voegen deze in sheet 2 dus op de goede plek ertussen komt te staan.

Het handigste zal waarschijnlijk een macro achter een button zijn die data kopieert en plakt, maar mijn kennis van macro's is nog niet groot genoeg om te weten hoe ik dit aan moet pakken

Bij voorbaat dank voor het antwoord

Edit: hierbij het gevraagde voorbeeld
Bekijk bijlage voorbeeld document.xlsx
 
Laatst bewerkt:
Denk je ook niet dat hier een voorbeeld document wel op z'n plaats zou zijn?
 
Het is onderdeel van een vrij groot werkboek wat ik hier niet helemaal wil plakken, maar ik zal even een nieuw werkboek maken met de gekopieerde relevante bladen in het originele bericht erbij zetten
 
Laatst bewerkt:
Een voorbeeld van de situatie is inderdaad voldoende.
 
Ok heb een voorbeeld gemaakt en in het oorspronkelijke bericht geplakt.
Relevante kolommen uit sheet 1 hebben ook een gedefinieerde naam.
 
Draai deze code eens.
Code:
Sub hsv()
Dim i As Long
 With Sheets("sheet2")
  .Range("a4", .Range("a4").End(xlDown).Address).Resize(, 5).ClearContents
    For i = 1 To 12
     .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(12, 4) = Range(Application.GetCustomListContents(4)(i) & "_evenement").Offset(, -1).Resize(, 4).Value
    Next
End With
End Sub
 
Dankjewel voor de code
Ik begrijp hem niet helemaal, maar hij doet voor een gedeelte wat ik wilde.
Hij kopieert alleen teveel gegevens uit sheet 1, soort evenement en plaats zijn voor nu nog niet relevant voor sheet 2.

Wat ik dus alleen gekopieerd wil hebben naar sheet 2 is:
(in kolom A) de maand (januari, februari etc.) van het betreffende event, dus niet de dag
In kolom B de evenementnaam, die wordt nu correct gekopieerd.

Verder update hij alleen correct als er een dag is ingevuld in sheet 1 (kolom A, E of I ). Op zich heb ik liever dat hij update zodra er een evenementnaam (kolom B, F of J in sheet 1) is ingevuld

Ik heb de code gekoppeld aan een button, zie:
Bekijk bijlage voorbeeld document.xlsm
 
Laatst bewerkt:
Test het zo eens weer.
Code:
Sub hsv()
Dim i As Long
On Error GoTo einde
 With Sheets("sheet2")
  .Range("a4", .Range("a4").End(xlDown).Address).Resize(, 5).ClearContents
   For i = 1 To 12
     With .Cells(Rows.Count, 2).End(xlUp)
       .Offset(1).Resize(12) = Range(Application.GetCustomListContents(4)(i) & "_evenement").Value
       .Offset(1, -1).Resize(.Parent.Cells(Rows.Count, 2).End(xlUp).Row - .Parent.Cells(Rows.Count, 1).End(xlUp).Row) = Application.GetCustomListContents(4)(i)
    End With
    Next
 End With
einde:
End Sub
 
Dankjewel

Het doet precies wat de bedoeling is nu (ook al overzie ik nog niet waarom helaas ^_^ )
 
Graag gedaan,

Zet de code nog even in een standaard module i.p.v. Thisworkbook.
Vb-editor: Menu invoegen → module.

Als je er uitleg bij moet hebben verneem ik het wel (wordt overigens nu niet meer).
 
Het in de standaard module zetten is wel gelukt

Ik ben nog even bezig geweest ermee, maar het blijkt toch handiger te zijn voor mijn boekhouding om soort evenement (Kolom C in sheet 1) wel mee te nemen als kolom C in het evenementenoverzicht).
Het lukt me zelf alleen niet om uit te vogelen hoe ik de code daarop kan aanpassen.

Ik zie het antwoord wel een keer verschijnen op een Christelijker tijdstip dan dit ^_^
 
De blauwe tekst zorgt ervoor dat kolom C ook wordt meegenomen.
Code:
.Offset(1).Resize(12, 2) = Range(Application.GetCustomListContents(4)(i) & "_evenement")[COLOR=#0000ff].Resize(, 2)[/COLOR].Value
 
Yes, klopt inderdaad.

Ik heb de .resize bovenaan, voor de .clearcontents nog even aan moeten aanpassen naar 3, omdat hij anders teveel kolommen meeneemt met updaten.
Maar nu werkt alles zoals ik het graag wilde.

Hartstikke bedankt voor je hulp!
 
Ik ben inmiddels iets verder gegaan met verbeteren en afmaken van de overzichten en op 2 probleempjes gestuit waar ik niet uitkom:
1) Als ik in de sheet 'Invul 2' een aantal lege regels tussen 2 evenementen laat staan worden die lege regels ook meegenomen, ik zou het handig vinden als die in de sheet evenementen er tussen uit blijven.

2) Ik ben nog aan het zoeken naar een manier om in de sheet 'evenementen' in kolom F en G de relevante data uit de (in het voorbeeld niet meegenomen) sheets Jan, Feb, Mrt, Apr etc te kopiëren.
Een niet elegante oplossing zou zijn om 12 aan elkaar gekoppelde IF formules te gebruiken ( iets als IF A4="Januari";Vlookup uit sheet Jan; IF A4="Februari"; Vlookup uit sheet Feb etc. ), maar dan krijg ik wel een heel erg lange formule.
Ik vroeg me daarom af of het mogelijk is om in mijn voorbeeld in sheet Evenementen, kolom A de maanden afgekort te importeren naar de gangbare drieletter afkortingen die ik in het originele document ook gebruikt heb voor tabbladen met meer data (Jan, Feb etc.)
Ik begrijp namelijk nog niet hoe de code die hierboven staat de maanden naar kolom A importeert.

En dan de erbij behorende vraag. Als de namen van tabbladen / sheets hetzelfde zijn als de rijen in kolom A, hoe kan ik dat dan gebruiken om daarmee de sheet aan te geven waar de informatie uit moet komen.


Zie hieronder de nieuwe voorbeeldsheet die het probleem illustreert.

Bekijk bijlage voorbeeld document v2.xlsm
 
Bij deze zover.

Ik heb het zo aangepast dat de lege rijen verdwijnen, maar een gestructureerde ingave is beter dan domme codes bedenken om zulke slordigheden te omzeilen.
Je formules moesten daar ook weer op aangepast worden.
Zo val je vroeg of laat van het een in het ander.

Bekijk het maar eens.
 

Bijlagen

Dankjewel.
Wellicht heb je gelijk en moet ik gewoon genoegen nemen met een gestructureerde ingave zonder overgeslagen regels.
Het nieuwe voorbeeld werkt ook niet zoals de bedoeling is. Iedere keer dat ik op updaten druk gaan er 2 regels vanaf, bovendien blijven er ook witregels in over.
Dus ik denk dat ik het idee dat witregels door de code weggewerkt moeten worden maar even laat varen, dan maar zorgvuldiger omgaan met de invoer.

Ik heb intussen ook uitgevonden hoe ik mbv de celnaam in kolom A de relevante data uit gelijknamige sheets kan krijgen {bijv met =SUM(INDIRECT(A4&"!K:K")) } dus daarmee kan ik weer vooruit.

Wel heb ik nog een paar vragen voor ik weer vooruit kan:
1) Welk deel van de laatst geupdate code zorgt ervoor dat kolom A Jan zegt ipv Januari en Feb ipv Februari etc.?

2) Ik dacht met for I = 1 to 12 groter te maken tot 1 to 23 ervoor te zorgen dat ik meer invoervelden kan gebruiken in de sheet invul2, maar dat werkt helaas niet.
De code neemt alleen data mee van rij 6 tot 16. Hoe maak ik het gekopieerde invoerveld in invul2 groter?
Het zit hem niet in de gedefinieerde celranges (januari_evenement etc.) want daar in heb ik de extra invulvelden wel al meegenomen.
 
Code:
Application.GetCustomListContents([COLOR=#ff0000]4[/COLOR])(i) 
Application.GetCustomListContents([SIZE=2][COLOR=#ff0000]3[/COLOR][/SIZE])(i)

Als i =1 dan bij de 4 januari en bij de 3 jan.
Als i = 12 dan bij de 4 december en bij de 3 dec.

2e of 3e.
Code:
.Offset(1).Resize([COLOR="#FF0000"]22[/COLOR], 2) = Range(Application.GetCustomListContents(4)(i) & "_evenement").Resize(, 2).Value
 
Laatst bewerkt:
Dit is helemaal helder.

Hartstikke bedankt nogmaals voor je hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan