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

Kolommen in Tabel verplaatsen met VBA

Status
Niet open voor verdere reacties.

Excelbat

Gebruiker
Lid geworden
23 mrt 2012
Berichten
402
Hallo allemaal,

Via google heb ik wat gevonden, en omgewerkt naar wat ik min of meer wil hebben:

Code:
Sub KolommenVerplaatsen()
 'How to move column "E" to before column "A"
 'Wat laatste kolom moet worden, helemaal vooraan zetten.
 'Dan één na laatste kolom daarvoor zetten
Range("Tabel1[[#All],[KolomE]]").Cut: Range("Tabel1[[#All],[KolomA]]").Insert
Range("Tabel1[[#All],[KolomD]]").Cut: Range("Tabel1[[#All],[KolomE]]").Insert
Range("Tabel1[[#All],[KolomC]]").Cut: Range("Tabel1[[#All],[KolomD]]").Insert
Range("Tabel1[[#All],[KolomB]]").Cut: Range("Tabel1[[#All],[KolomC]]").Insert
Range("Tabel1[[#All],[KolomA]]").Cut: Range("Tabel1[[#All],[KolomB]]").Insert
End Sub

Maar kan dit handiger? Nu moet ik van iedere kolom de header apart benoemen in deze macro. Ik wil dus eigenlijk aangeven dat de vijfde kolom van de tabel naar de eerste plaats moet.
Zoiets dus:

Code:
Range("Tabel1(Columns(5)").Cut: Range("Tabel1(Colums(1)").Insert

Maar dat werkt niet. Wie kan me op de goede weg helpen?

Bekijk bijlage KolomVerplaatsenVBAHelpMij.xlsb

Thanx/Excelbat
 
Verwarrende vraag, want kolommen komen niet overeen met kolomnamen.

Dit is genoeg:

Code:
Sub M_snb()
  sn = Blad1.ListObjects(1).Range
  
  Blad1.Cells(20, 1).Resize(UBound(sn), UBound(sn, 2)) = Application.Index(sn, Evaluate("row(1:" & UBound(sn) & ")"), Array(5, 2, 2, 5, 1))
End Sub

NB. Al dat knippen en plakken maakt de code niet echt sneller. Vermijd dat dus.
 
Goedenavond SNB,

Dank voor deze snelle macro. Ik probeer deze begrijpelijk voor mezelf te maken:

Code:
Index(sn, Evaluate("row(1:" & UBound(sn) & ")"), Array(5, 2, 2, 5, 1))

01. Index is natuurlijk de bekende indexformule uit het alledaags gebruik van excel.
02. sn is dan de matrix waarin index gaat zoeken.
03. Dit zijn de kolomnummers: Array(5, 2, 2, 5, 1)

Zou u echter enige uitleg kunnen geven bij dit: Evaluate("row(1:" & UBound(sn) & ")").
a) Genereert ongetwijfeld de rijnummers, maar ik begrijp niet precies wat evaluate doet.
b) En waarom het &-teken achter UBound(sn)?

Thanx/Excelbat
 
kijk eens wat het resultaat is van

Code:
sp=Evaluate("row(1:200)")

en van

Code:
redim sn(200)
msgbox "row(1:" & ubound(sn) & ")"
sp =evaluate("row(1:" & ubound(sn) & ")")
 
Duurde effe voordat het kwartje een beetje viel (ik kom nog uit de tijd van de gulden). Arrays zijn nog wat acabadabra voor mij.

Code:
sp=Evaluate("row(1:200)") 
Range ("J1") = sp
geeft als resultaat 1

Code:
redim sn(200)
msgbox "row(1:" & ubound(sn) & ")"
sp =evaluate("row(1:" & ubound(sn) & ")")

De msgbox geeft dan row(1:200), en dan geeft sp nog steeds als resultaat een 1

Ik heb dit o.a. gevonden op internet over evaluate:
"The VBA help topic for EVALUATE is a bit vague and probably doesn't do it justice. In fact, after reading through it for yourself, you probably wouldn't see much cause to use it. Here's what it can do:

1. Converts string math expressions to values.
2. Converts 1D and 2D string arrays to their array equivalents.
3. Capable of processing any formula a worksheet cell can process! (wow, WOW)"



Ik blijf het hele gebeuren rondom arrays volgen, en als ik maar simpele voorbeelden genoeg zie, dan kan ik er uiteindelijk ook t.z.t. mee werken.

Thanks SNB, door uw antwoorden wordt je wel getriggered om zelf na te denken en dingen te onderzoeken

Greetz/Excelbat
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan