Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[excel] bepaalde kolommen kopieren

Pagina: 1
Acties:

  • stin
  • Registratie: Augustus 2001
  • Niet online
De topictitel dekt niet echt mijn vraag, maar ik weet niet hoe ik het anders kort kan omschrijven. Ik heb ca. 60 excel files (maandelijkse data) waar 110 variabelen in staan. Nu heb ik maar 20 variabelen in ieder bestand nodig. Aangezien de bestanden zo groot zijn en ik niet alle variabelen nodig heb, wil ik dus voor iedere maand een nieuw excelbestand maken. Is het mogelijk om aan te geven dat excel een aantal kolommen kopieert naar een nieuw excel bestand? Dus bijvoorbeeld Kolom A, F, DA, DB, etc?

Via google heb ik al geprobeerd te zoeken naar een oplossing, maar aangezien het nogal lastig te omschrijven is in een aantal woorden vind ik niet echt een oplossing.

  • Rupie
  • Registratie: Augustus 2006
  • Laatst online: 13-11 11:58
het lijkt mij dat het mogelijk moet zijn om via een macro in ieder geval de specifieke kolommen naar een nieuw blad te kopieren, een nieuw bestand zal vast ook mogelijk zijn.

Even snel een macro opnemen en ik heb dit al:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Macro1()
'
' Macro1 Macro
' De macro is opgenomen op 14-3-2011 door Rupie.
'
'
    Range("A:A,B:B,D:D,E:E,H:H").Select
    Range("H1").Activate
    Selection.Copy
    Sheets("Blad2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub


Kolom A, B, D, E en H worden geselecteerd in het actieve blad en naar blad2 gekopieerd.

Desktop | Server | Laptop


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Mooier zou zijn om het aan de bron goed aan te pakken (alleen de gewenste kolommen exporteren, en/of niet Excel-files gebruiken) maar inderdaad lijkt een import/kopieer-macro een handige route.

Dan natuurlijk geen Select of Paste gebruiken (dat zijn functies die IMHO alleen handmatig nodig zijn) maar netjes werken. Dan kan je bijv. iets als http://www.exceltip.com/s..._Microsoft_Excel/556.html als inspiratie gebruiken (en aanpassen naar kopieren uit verschillende bestanden).

Alternatief is overigens een kopie maken van alle bestanden, en dan een script laten lopen die alle kolommen verwijderd waarvan de naam niet in jouw gewenste set variabelen zit.

Pas natuurlijk even op hoe je FOR-loopjes zich gedragen i.c.m. het verwijderen/invoegen van kolommen.

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


  • stin
  • Registratie: Augustus 2001
  • Niet online
Bedankt voor de reacties. Ik heb beide methodes eens geprobeerd, waarbij die van Rupie voor mij wat makkelijker is, aangezien ik daar nog begrijp wat er precies gebeurt. Ik heb namelijk nog niet vaak gewerkt met macro's. In principe werkt het, als ik de macro van Rupie bewerkt, zoals ik het graag zou hebben. Hij geeft alleen een fout aan dat het gebied kopieren en het plakgebied niet dezelfde vorm en grootte hebben. Dit heeft ermee te maken dat blad2/sheet2 maar tot kolom "Z" gaat, terwijl ik bepaalde kolommen kopieer die daarbuiten liggen. Na het runnen van de makro, tot de foutmelding dan, kan ik eventueel ook handmatig alle kolommen direct naar een ander werkblad/excelbestand kopieren, dus het werkt gedeeltelijk. Wat hij nu doet is bijvoorbeeld kolom C, X, AB, etc kopieren naar de exacte kolommen in het volgende werkblad, terwijl het handiger zou zijn als kolom C, X, AB in kolom A, B, C zet in het nieuwe werkblad. Dan zou hij ook geen problemen hebben met het plakken.

  • stin
  • Registratie: Augustus 2001
  • Niet online
Ik heb het nu op de volgende manier gedaan:

code:
1
2
3
4
5
6
7
8
9
10
Sub Macro1()
'
' Macro1 Macro
'

'
    Worksheets("Sheet1").Range("L:L,AG:AG,AK:AK,AM:AM,AD:AD,AC:AC,S:S,T:T,U:U,K:K,AU:AU,AY:AY,DD:DD,DH:DH,BM:BM,BQ:BQ,BV:BV,BY:BY,CC:CC,CF:CF,CT:CT,AJ:AJ,AB:AB").Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial

End Sub


Wellicht niet het beste, maar op deze manier werkt het wel voldoende voor mij. Ik loop alleen tegen een probleem aan en ik ben vergeten hoe ik dat moet oplossen. Er zijn bepaalde kolommen die tot stand komen door een bepaalde berekening waarbij gebruik wordt gemaakt van andere kolommen. Als ik die kolom kopieer, dan klopt de formule niet meer. Nu weet ik nog dat ik bepaalde waardes vast kon zetten, zodat de formule weg valt. Ik ben alleen vergeten hoe dat ook alweer moest.

  • Rupie
  • Registratie: Augustus 2006
  • Laatst online: 13-11 11:58
Werkt deze niet? ik heb "Paste:=xlValues" toegevoegd.

code:
1
2
3
4
5
6
7
8
9
10
Sub Macro1()
'
' Macro1 Macro
'

'
    Worksheets("Sheet1").Range("L:L,AG:AG,AK:AK,AM:AM,AD:AD,AC:AC,S:S,T:T,U:U,K:K,AU:AU,AY:AY,DD:DD,DH:DH,BM:BM,BQ:BQ,BV:BV,BY:BY,CC:CC,CF:CF,CT:CT,AJ:AJ,AB:AB").Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlValues

End Sub

[ Voor 5% gewijzigd door Rupie op 15-03-2011 07:08 ]

Desktop | Server | Laptop


  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 14-11 12:06
stin schreef op maandag 14 maart 2011 @ 18:38:
Ik heb het nu op de volgende manier gedaan:

code:
1
2
3
4
5
6
7
8
9
10
Sub Macro1()
'
' Macro1 Macro
'

'
    Worksheets("Sheet1").Range("L:L,AG:AG,AK:AK,AM:AM,AD:AD,AC:AC,S:S,T:T,U:U,K:K,AU:AU,AY:AY,DD:DD,DH:DH,BM:BM,BQ:BQ,BV:BV,BY:BY,CC:CC,CF:CF,CT:CT,AJ:AJ,AB:AB").Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial

End Sub


Wellicht niet het beste, maar op deze manier werkt het wel voldoende voor mij. Ik loop alleen tegen een probleem aan en ik ben vergeten hoe ik dat moet oplossen. Er zijn bepaalde kolommen die tot stand komen door een bepaalde berekening waarbij gebruik wordt gemaakt van andere kolommen. Als ik die kolom kopieer, dan klopt de formule niet meer. Nu weet ik nog dat ik bepaalde waardes vast kon zetten, zodat de formule weg valt. Ik ben alleen vergeten hoe dat ook alweer moest.
Met welke versie van Excel werk je? Wat is de extensie van je bronbestand? En wat is die van je doelbestand?

Was ik maar rijk en niet zo knap...


  • stin
  • Registratie: Augustus 2001
  • Niet online
Rupie schreef op dinsdag 15 maart 2011 @ 07:08:
Werkt deze niet? ik heb "Paste:=xlValues" toegevoegd.

code:
1
2
3
4
5
6
7
8
9
10
Sub Macro1()
'
' Macro1 Macro
'

'
    Worksheets("Sheet1").Range("L:L,AG:AG,AK:AK,AM:AM,AD:AD,AC:AC,S:S,T:T,U:U,K:K,AU:AU,AY:AY,DD:DD,DH:DH,BM:BM,BQ:BQ,BV:BV,BY:BY,CC:CC,CF:CF,CT:CT,AJ:AJ,AB:AB").Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlValues

End Sub
Bedankt, dat werkt inderdaad. Nu weet ik ook weer hoe ik dat vroeger deed :) Ik moet eigenlijk nog drie calculaties doen. Ik was eigenlijk van plan dat handmatig te doen, maar dat kan ook met een macro denk ik.
Ik heb dit toegevoegd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Worksheets("Sheet1").Select
    Range("DB1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Gross_performance"
    Worksheets("Sheet1").Select
    Range("DD1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Net_performance"
    Worksheets("Sheet1").Select
    Range("DF1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Turnover_stocks_options"
    Worksheets("Sheet1").Range("L:L,AG:AG,AK:AK,AM:AM,AD:AD,AC:AC,S:S,T:T,U:U,K:K,AU:AU,AY:AY,DD:DD,DH:DH,BM:BM,BQ:BQ,BV:BV,BY:BY,CC:CC,CF:CF,CT:CT,AJ:AJ,AB:AB,DB:DB,DD:DD,DF:DF").Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlValues


Nu heb ik de volgende drie formules:
code:
1
2
3
Gross_performance =(AG2-AK2-AM2)/(AD2+AK2)
Net_performance =(AG2-AK2-AM2)/(AD2+AK2)
Turnover_stocks_options =(AU2+AY2+DB2+DB2+BM2+BQ2+CT2)/(AB2+AJ2+AK2)


Het is toch mogelijk om deze in sheet 1 te laten berekenen en vervolgens te kopiëren naar sheet 2? Kun je mij misschien een tip geven hoe ik deze voor alle rijen (zijn verschillend per excelfile) kan laten berekenen. In dit bestand zijn het ca. 6000 rijen, maar het kan soms iets meer/minder zijn.
Sjeik schreef op dinsdag 15 maart 2011 @ 08:31:
[...]

Met welke versie van Excel werk je? Wat is de extensie van je bronbestand? En wat is die van je doelbestand?
Ik werk met Excel 2007. Extensie van bronbestand is .xls. Ik kopieer het op dit moment naar sheet2. Ik kan de xls of xlsx bestanden invoeren in Stata, dus dat wordt ook het doelbestand.

[ Voor 9% gewijzigd door stin op 15-03-2011 11:55 ]


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

stin, niet vervelend bedoeld maar als je geen ervaring hebt met VBA en het via de 'macro-opneemknop-methode' invoert dan wil je IMHO geen logica in de code gaan invoeren. Erg gevaarlijk, garantie op fouten ;) Dus mijn advies zou zijn eerst een tijdje een handleiding of twee lezen & oefenen in een testbestand en daarna pas aan een echt-gebruikt bestand te beginnen.

Dat gezegd hebbende: je kunt daar de For() functie voor gebruiken in VBA, voorbeeld v.w.b. de loopjes:
Visual Basic:
1
2
3
4
5
6
7
8
Dim rij1, kolom1, rij2, kolom2 As Integer
rij2 = 2
kolom2 = 2
For rij1 = 2 To 100
    For kolom1 = 0 To 9
        Worksheets("Sheet1").cell(rij1, kolom1).Formula = Worksheets("Sheet2").cell(rij2, kolom2).Formula
    Next kolom1
Next rij1

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


  • stin
  • Registratie: Augustus 2001
  • Niet online
F_J_K schreef op dinsdag 15 maart 2011 @ 12:18:
stin, niet vervelend bedoeld maar als je geen ervaring hebt met VBA en het via de 'macro-opneemknop-methode' invoert dan wil je IMHO geen logica in de code gaan invoeren. Erg gevaarlijk, garantie op fouten ;) Dus mijn advies zou zijn eerst een tijdje een handleiding of twee lezen & oefenen in een testbestand en daarna pas aan een echt-gebruikt bestand te beginnen.
Daar heb je ook helemaal gelijk in hoor. Ik heb nog geen handleiding o.i.d. erbij genomen, enkel wat ik op websites ben tegengekomen. Dat werkt ook niet echt lekker, aangezien dit volgens mij niet ingewikkeld is maar het is wel een stuk ingewikkelder als je niet precies weet wat je doet. Ik ga eens een manual downloaden en wat oefenen.
Dat gezegd hebbende: je kunt daar de For() functie voor gebruiken in VBA, voorbeeld v.w.b. de loopjes:
Visual Basic:
1
2
3
4
5
6
7
8
Dim rij1, kolom1, rij2, kolom2 As Integer
rij2 = 2
kolom2 = 2
For rij1 = 2 To 100
    For kolom1 = 0 To 9
        Worksheets("Sheet1").cell(rij1, kolom1).Formula = Worksheets("Sheet2").cell(rij2, kolom2).Formula
    Next kolom1
Next rij1
Bedankt.
Pagina: 1