Excel - (Deel) regels omhoog of omlaag verplaatsen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 24-05 15:06
Hallo,

Ik heb in excel voor het gemak een tabel van 6 bij 6 cellen. Op de horizontale as (rij 1) omschrijvingen en verticaal (kolom A) de nummers 1 t/m 5

Nu blijven de nummers gelijkt, maar wil ik de inhoud van B2:F2 1 rij omlaag verplaatsen, waarbij vervolgens de inhoud van B3:F3 naar B2:F2 verplaatst (een rij omhoog).

Hetzelfde idee voor als ik alles van B6:F6 naar B5:F5 verplaats, waarbij dat van B5:F5: naar B6:F6.

excel

Nu zou ik dat graag met een macro zodanig willen maken dat als er in een willekeurige cel van een rij (maar als dat lastig is dan maar kolom B ) op omhoog of omlaag wordt geklikt dat de rij dan 1 plaats omhoog of omlaag gaat en daarmee dus de inhoud wisselt met de cel waar het heen verplaatst.

Ik zou haast denken dat het wel met een standaard excelknop moet kunnen.

Ik zat zelf te denken om een macro op te nemen door eerst de inhoud van een boven- of onderstaande rij even ergens heen te kopiëren (een verborgen tabblad bijvoorbeeld), de inhoud die verplaatst moet worden te verplaatsen en dan de verplaatste inhoud weer terug te zetten in de cel erboven of onder.

Nadeel is dat deze opname dan gebonden is aan de rijen en cellen waar de opname op plaats vind, maar ik zoek dan eigenlijk een oplossing die 'relatief' is aan de gekozen cel.

Iets als

1: Selecteer de cellen $B:$F in boven/onder de gekozen rij
2: Kopieer deze cellen naar een verborgen tabblad
3: Selecteer de cellen $B:$F in van de initieel gekozen rij
4: Kopieer deze cellen naar de boven- / onderliggende rij
5: Selecteer de cellen $B:$F op het verborgen blad
6: Plak die cellen op de initieel gekozen rij

Maar dit werkt naar mijn idee alleen als je op een bepaalde manier de relativiteit van de gekozen cel kunt bepalen. Dus dat de macro-code niet per rij (en de aantallen kunnen verschillen) moet worden opgesteld.

Ik hoop stiekem dat ik dit hele verhaal helemaal voor niks heb getypt vanwege een standaard knopje in excel, maar anders hoop ik ook dat deze uitleg duidelijk is voor wat ik wil bereiken :).

Litebit.eu voorraad check :).


Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 23:37
@BLACKfm Dit werkt voor het omlaag verplaatsen ... met een beetje fantasie kom je er vast wel uit hoe je omhoog zou moeten schuiven }:O
Ik heb e.e.a. voorzien van commentaar, zodat je de code functioneel kunt volgen.

De code volgt jouw stappenplan, maar in plaats van een verborgen tabblad, schrijft hij waarden tijdelijk weg naar een array.
De relativiteit komt doordat het rijnummer van de huidig geselecteerde cel ('c' in de code) wordt gebruikt om de twee bereiken te bepalen (op basis van het rijnummer 'c.row' en 'c.row + 1' (dat is dan het rijnummer van de geselecteerde cel, opgehoogd met 1)).

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Option Explicit

Sub WisselMetRijOnderGeselecteerdeCel()
  
  Dim arrRij() As Variant
  Dim c As Range
  Dim rngDezeRij As Range
  Dim rngVolgendeRij As Range
  
  'bepaal de huisidige geselecteerde cel
  Set c = ActiveCell
  With ActiveSheet
    'bereik in de rij met de geselecteerde cel bepalen (B t/m F in dit voorbeeld)
    Set rngDezeRij = .Range(.Cells(c.Row, 2), .Cells(c.Row, 6))
    'hetzelfde bereik, maar dan op de volgende rij (c.Row + 1)
    Set rngVolgendeRij = .Range(.Cells(c.Row + 1, 2), .Cells(c.Row + 1, 6))
    'stop de waarden van de volgende rij in een array
    arrRij = rngVolgendeRij.Value
    'vervang de waarden in de volgende rij met de waarden uit de huidige rij
    rngVolgendeRij.Value = rngDezeRij.Value
    'vervang de waarden in de huidige rij met de waarden uit de array
    rngDezeRij.Value = arrRij
  End With
  
  'KOFFIE!!!

End Sub

[ Voor 19% gewijzigd door breew op 03-01-2018 17:03 . Reden: meer tekst = meer beter ]


Acties:
  • 0 Henk 'm!

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 24-05 15:06
Haha, die koffie doet het hem :).

Hopelijk heb ik morgen even niks te doen op het werk (zoals vandaag :X) om dat eens nader te bestuderen. Het ziet er zo op het oog met de uitleg al veelbelovend uit.

Ik ga er mee aan de slag! In ieder geval al bedankt @breew!

Litebit.eu voorraad check :).