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

Variabel bereik selecteren en kopiëren

Status
Niet open voor verdere reacties.

deleeter

Gebruiker
Lid geworden
22 sep 2010
Berichten
56
Beste specialisten

Ik heb een programma waarin ik een tijdsregistratie doe. De output die hieruit komt is een .CSV bestand waarvan ik bepaalde velden nodig heb en andere niet. Ik heb hier een macro voor gemaakt die prima werkt (zie bijlage: "Data formaat aanpassen") . Ik wil echter nog een stapje verder gaan.

Nadat de eerste macro klaar is zou heel het bereik geselecteerd en gekopiëerd moeten worden behalve de rij waarin "Total" staat.

Aangezien ik niet steeds evenveel rijen in de output heb staan kan ik geen gebruik maken van een vaste range voor de rijen, voor de kolommen gaat dit wel want dat zijn steeds dezelfde (A:H).

Om de rij waar "total" in staat te zoeken heb ik een functie toegevoegd die gaat zoeken naar de eerste lege cel in de 2de kolom. Dit lijkt te werken maar dan zou ik 1 rij naar boven moeten om die te selecteren en te wissen. Ik heb al geprobeerd om met een offset te werken maar het lukt me niet om een rij naar boven te gaan. Waarschijnlijk is dit ook niet de beste manier om te zoeken naar de rij waar "Total" in staat... :confused:

Vraag is nu hoe ik best dat variabele bereik kan selecteren en kopieren (zonder "Total").

Alvast bedankt.

Bekijk bijlage Var Range selecteren.xlsm
 
Laatst bewerkt:
Geef uw gegevenstabel een naam en werk daar mee, bv:
Code:
'=INDIRECT("'Var range kopieren'!$A$1:$F$"&AANTALARG('Var range kopieren'!$A:$A)-1)
 
Dat begrijp ik niet volledig.

Het is de bedoeling om de macro ergens lokaal op te slaan zodat ik die telkens kan gebruiken. De output is immers telkens een nieuw .csv bestand dat ik via mijn mailbox binnenkrijg. Ik gebruik nu een "persoonlijke macro" die ik opstart vanuit het .csv bestand. Ik zou alles (in het juiste formaat zetten = ok, selecteren van juiste bereik en kopiëren van dat bereik = nog niet ok) willen doen met "1 druk op de knop".
 
Laatst bewerkt door een moderator:
Zo dan?

Code:
Sub Timerec_formaat()
'
' Timerec_formaat Macro
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Columns("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:C").Select
    Selection.EntireColumn.Hidden = True
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Cut
    Columns("F:F").Select
    ActiveSheet.Paste
    Columns("G:G").EntireColumn.AutoFit
    Columns("G:G").Select
    Selection.Cut
    Columns("H:H").Select
    ActiveSheet.Paste
    Columns("I:I").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Columns("D:E").Select
    Selection.EntireColumn.Hidden = True
    Range("A1").Select
    Call Lege_Cel
    ActiveCell.Offset(0, 1).Select
[COLOR="#FF0000"]'Het hele gebied selecteren - één regel(Total)
    Range("A1:I" & Range("A65000").End(xlUp).row - 1).Copy
'Nu kun je het plakken waar je wil[/COLOR]    End Sub
 
Ja in principe wel maar er gaat iets fout. Ik krijg een foutopsporingsdialoog... :(
 
Ik heb nog iets anders geprobeerd maar dat levert ook niet echt 100% het resultaat dat ik nodig heb.

Code:
Range("B1", Range("B1").End(xlToRight).End(xlDown)).Select

Dit geeft me als resultaat dat de range B:F geselecteerd wordt. Helaas moet ik tot en met H geraken (en ook de rij van "Total" wordt nog meegenomen in de selectie) :(

Bekijk bijlage Var Range selecteren 2.xlsm
 
@deleeter Onnodige quotes verwijderd. Wanneer je direct reageert op een reactie is het niet nodig om dat bericht te quoten. Onnodig quoten heet dat, hetgeen niet gewenst is.
 
En toch doet deze het
Code:
'Het hele gebied selecteren - één regel(Total)
    Range("A1:H" & Range("A1").End(xlDown).row - 1).Copy
'Nu kun je het plakken waar je wil
End Sub

ik weet niet of de rest van de macro doet wat die moet doen.
 
Bedankt voor het zoeken naar een goeie oplossing. Ik heb wel de indruk dat bij deze oplossing het volledige verticale bereik geselecteerd wordt.

Code:
Sub Timerec_formaat()
' Timerec_formaat Macro
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Columns("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:C").Select
    Selection.EntireColumn.Hidden = True
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Cut
    Columns("F:F").Select
    ActiveSheet.Paste
    Columns("G:G").EntireColumn.AutoFit
    Columns("G:G").Select
    Selection.Cut
    Columns("H:H").Select
    ActiveSheet.Paste
    Columns("I:I").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Columns("D:E").Select
    Selection.EntireColumn.Hidden = True
    Range("A1").Select
    Range("A1:H" & Range("A1").End(xlDown).row - 1).Copy
    End Sub

Het eerste deel van de macro doet wat het moet maar het bereik dat ik in dit geval wil kopieren lukt niet (B1:H90).

2de probleem dat ik ontdek: Als ik het bereik (zoals het nu gekopiëerd wordt) plak in het doelbestand dan krijg ik een foutmelding dat het formaat niet hetzelfde is. In dat bestand staan kolom C, D, E verborgen (en dat mag ik helaas niet aanpassen). Als ik handmatig B1:H90 selecteer (met verborgen kolommen) dan wordt alles in dat formaat gekopiëerd.
 
Welke gegevens juist wil je naar waar verplaatsen?
Geef dat eens correct aan in je bestand.
Wat moet er gebeuren met de oorspronkelijke gegevens? mogen die gewist worden?
 
Volgens mij moet deze code werken. Gebruik ik zelf ook....

Range("A1:H1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Groeten,

Cees
 
Welke gegevens juist wil je naar waar verplaatsen?
Geef dat eens correct aan in je bestand.
Wat moet er gebeuren met de oorspronkelijke gegevens? mogen die gewist worden?

Ik wil het gebied waar data in staat (nadat je op de knop "dataformaat aanpassen" geklikt hebt) kopi�ren zonder de rij waar "Total" in staat.

In dit voorbeeld is dat B1 tot en met H90. De laatste rij kan evenwel H50 zijn, al naargelang het .csv bronbestand.
De oorspronkelijke gegevens mogen gewist worden nadat ze op het klembord gezet worden. Bedoeling is om die te plakken in een andere excel die een standaard formaat heeft (met verborgen kolommen).

@Cees
De kolommen worden juist geselecteerd maar de rij "Total" word nog wel meegenomen. Ik heb geprobeerd met volgende codes:
Code:
Range(Selection, Selection.End(xlDown)).Select
en met

Code:
Range(Selection, Selection.End(xlup)).Select

Helaas lukt het nog niet volledig. Zou het een oplossing zijn om eerst te zoeken naar de waarde "Total" en dan die rij selecteren en wissen? Hoe kan ik dat best doen in VBA?
 
Code:
With Sheets("Var range kopieren")
    .Range("A1:H" & .Cells(Rows.Count, 1).End(xlUp).Offset(-1).row).Copy
End With
 
Rudi

Bedankt voor je input. Ik heb apart getest en dan werkt het perfect. Aangezien de layout (verborgen kolommen, invoegen van lege kolommen) heel belangrijk is voor het doelbestand heb ik uw code na die van mij gezet maar dan werkt het niet meer... :(

Wat gaat er fout?

Uiteindelijk gebruik ik deze code:

Code:
Function Lege_Cel()
leeg = zoek(1, 2)
Rows.Cells(leeg, 1).Select
End Function

Private Function zoek(row As Integer, col As Integer) As Integer
While (Rows.Cells(row, col) <> "")
row = row + 1
Wend
zoek = row
End Function
Sub Timerec_formaat()
'
' Timerec_formaat Macro
    Columns("A:A").Select
    Columns("A:A").EntireColumn.AutoFit
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Columns("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Delete Shift:=xlToLeft
    Columns("C:C").Select
    Selection.EntireColumn.Hidden = True
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.Cut
    Columns("F:F").Select
    ActiveSheet.Paste
    Columns("G:G").EntireColumn.AutoFit
    Columns("G:G").Select
    Selection.Cut
    Columns("H:H").Select
    ActiveSheet.Paste
    Columns("I:I").Select
    Selection.Delete Shift:=xlToLeft
    Selection.Delete Shift:=xlToLeft
    Columns("D:E").Select
    Selection.EntireColumn.Hidden = True
    Range("A1").Select

With ActiveSheet
.Range("A1:H" & .Cells(Rows.Count, 1).End(xlUp).Offset(-1).row).Copy

End With

End Sub

Verder heb ik ook nog wat gezocht naar een mogelijkheid om de rij waar "Total in staat te zoeken en te verwijderen. Gelukkig heb ik dat hier kunnen vinden op het forum.

Code:
Cells.Find(What:="Total", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.EntireRow.Delete

De oplossing die Rudi bied lijkt me op zich wel beter.

Voorbeeldje met nieuwe code: Bekijk bijlage Var Range selecteren Rudi.xlsm
 
Code:
With ActiveSheet
.Range("B1:H" & .Cells(Rows.Count, 2).End(xlUp).Offset(-1).row).Copy

End With
Nu ook zonder rij Totaal dus heb je die code om de rij Totaal te zoeken en wissen niet meer nodig.
 
Laatst bewerkt:
Rudi, Prachtig! Dat is exact wat ik moet hebben.

Bedankt voor de hulp iedereen! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan