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

kopiëren

Status
Niet open voor verdere reacties.

ExcelAmateur

Terugkerende gebruiker
Lid geworden
25 aug 2010
Berichten
3.333
Beste forum leden,

Ik vraag mij af of dat het mogelijk is om van 2 Tabbladen een Range gelijk te kopiëren en dan op een ander Tabblad als waarden te plakken?
In het voorbeeldje wil ik van Tabblad1 Range("E13:I20") en van Tabblad2 Range("D6:H16") kopiëren en dit op Tabblad3 op Range("A1") plakken.

Graag zie ik een positief antwoord tegemoet.

B.V.B. dank
 

Bijlagen

  • Test Kopieren.xlsx
    9,4 KB · Weergaven: 29
EA,

Helaas dit is niet mogelijk, ik heb het getest met onderstaande macro maar deze werkt niet.
Code:
Public Sub TestKopieeren()

    Range(Sheets("Blad1").Range("E13:I20"), Sheets("Blad2").Range("D6:H16")).Copy _
    Destination:=Sheets("Blad3").Range("A1")

End Sub
Het lukt wel als je beide reeksen van dezelfde sheets af haalt maar niet van verschillende, het copy_object staat
dit vrees ik niet toe.
Ik denk dat je een aanpassing zal moeten bedenken.

Veel Succes.
 
Het kan wel dmv Arrays.
Ik heb even snel wat geprogrammeerd.

Code:
Sub kopieren()
Dim rb()
    r1 = Blad1.Range("E13:I20")
    r2 = Blad2.Range("D6:H16")
    ReDim rb(1 To 5, 1 To 11)
    For r = 1 To 8
        For c = 1 To 5
            rb(c, r) = rb(c, r) & r1(r, c)
        Next
    Next
    For r = 1 To 11
        For c = 1 To 5
            rb(c, r) = rb(c, r) & r2(r, c)
        Next
    Next
    Blad3.Range("A1:E11").Value = WorksheetFunction.Transpose(rb())
End Sub

Met vriendelijke groet,


Roncancio
 
Roncancio,

Dank je wel voor de code, ik ga het vanavond uit proberen.
We moesten eerst even naar het ziekenhuis, was belangrijker.
 
Roncancio,

Het werkt, alleen zet hij de 2 bereiken over elkaar.
De bedoeling is dat ze onder elkaar komen.
Is dit nog aan te passen?

Ik denk (weet het wel zeker) was dat vergeten te melden.
 
Ziekenhuis is inderdaad veel belangrijker.

Ik was in de veronderstelling dat je de cellen bij elkaar gevoegd wilde hebben.
De code is nu een stuk korter geworden.

Code:
Sub kopieren()

Set r1 = Blad1.Range("E13:I20")
Set r2 = Blad2.Range("D6:H16")
With Blad3.Range("A1")
    .Resize(r1.Rows.Count, r1.Columns.Count).Value = r1.Value
    .Offset(r1.Rows.Count, 0).Resize(r2.Rows.Count, r2.Columns.Count).Value = r2.Value
End With
End Sub

Met vriendelijke groet,


Roncancio
 
Code van Roncancio iets aangepast.
Code:
Sub kopieren()
Dim rb()
    r1 = Blad1.Range("E13:I20")
    r2 = Blad2.Range("D6:H16")
    ReDim rb(1 To 19, 1 To 5)
    For r = 1 To 8
        For c = 1 To 5
            rb(r, c) = r1(r, c)
        Next
    Next
    For r = 1 To 11
        For c = 1 To 5
            rb(r + 8, c) = r2(r, c)
        Next
    Next
    Blad3.Range("A1").Resize(19, 5).Value = rb
End Sub

Edit: Dat kon inderdaad stukken korter :)
 
Laatst bewerkt:
Roncancio & HSV,

Roncantio, hartelijk bedankt voor het aanpassen van de code, het werkt uitstekend. :thumb::thumb:

HSV, ook uw code werkt uitstekend. :thumb:

Ik was al bezig geweest om de code van Roncantio aan te passen maar zat verkeerd te zoeken.
De code is zelfs een stuk korter geworden.

Ik ga het nu in de goede file toepassen.

Nogmaals beide hartelijk bedankt.
 
goedemiddag heren,

mag ik even een vraagje stellen? hoe bekijken jullie de " ReDim rb(1 To 19, 1 To 5)" in de code? Ik vind dit een mooi bestandje om zelf te proberen in bepaalde bestanden op mijn werk.

als ik enkel de ranges veranderen naar de benodigde gegevens van mijn bestanden, is dit dan voldoende of moet ik meerdere zaken aanpassen in de code?

mvg,

Spiesse
 
rb is in dit geval een array.

Wat is een array?
Een array is een reservering van een bepaald bereik in het geheugen waarin je gegevens kan plaatsen. Simpel gezegd een ladenkast met allerlei vakjes. In het voorbeeld is er sprake van een 2 dimensionale array. (1 tot 19 ) en ( 1 tot 5).
Deze waarde heb ik er vast ingezet maar je zou het flexibel kunnen maken via ReDim.

Een simpel voorbeeld:
Code:
Dim rb()
For x = 1 To 5
    ReDim rb(x)
Next
MsgBox UBound(rb)
De uitkomst = 5
Het bereik van rb is van 0 tot 5. (6 vakken dus).

Let op!
Als je de array uitbreidt met ReDim om gegevens te plaatsen dan moet je Preserve gebruiken.
Code:
Dim rb()
For x = 1 To 5
    ReDim Preserve rb(x)
    rb(x) = x
Next
Met Preserve houdt de array de waardes vast.
Zonder Preserve wordt wel de array uitgebreid maar worden de eerder ingevoerde waardes verwijderd!

Mocht je echter 1 cellenbereik willen samenvoegen dan zou ik gebruik maken van Join.
Code:
With Application
    Range("A12").Value = Join(.Transpose(Range("A6:A11").Value), "")
    Range("G1").Value = Join(.Transpose(.Transpose(Range("A1:F1").Value)), "")
End With

- De 1e Join zet de inhoud van de cellen A6 t/m A11 in cel A12.
- De 2e Join zet de inhoud van de cellen A1 t/m F1 in cel G1.

Dus:
A1 = h
B1 = e
C1 = l
D1 = p
E1 = m
F1 = ij

Cel G1 wordt na het runnen van de code: helpmij

Ik hoop dat ik wat licht heb gebracht in de duisternis.
Mocht er nog vragen zijn, dan hoor ik het wel.

Met vriendelijke groet,


Roncancio
 
roncancio, dat wordt een testertje voor mij :)

klinkt nog moeilijk voor de moment maar oefening en aanpassing baart kunst en kunde zeker? :)

toch sjiek hoe jullie dit allemaal met gemak doen!

ik heb hier al véél geleerd en zal nog véél leren ook!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan