JKP Application Development Services.

                    Microsoft Office Application Development

Transponeer Tabel

Up • Beschadigde mappen • Macro Verspreiden • Excel Namen • Opstart Problemen • Vergelijking plotten • Show Picture • Round2Digits • Control Events • Custom Find • FormuleFoutControle • Events uitschakelen • WebQuery • Undo met Excel VBA • XML en Excel 2003 • Selecteer een bereik (VBA) • Transponeer Tabel • VBE Vensters dokken • Een invoegtoepassing bijwerken

•  •

Search Zoeken

WWW
This site

Go to Ga Naar
Home
Up

Donate Donaties
Did you find something helpful on my site? Consider a donation!
Heeft u iets gevonden waar u wat aan had? Overweeg dan een donatie!

 

De formules in een tabel transponeren

Recentelijk vroeg mij iemand of het mogelijk is om een tabel met cellen te transponeren, zodanig dat de formule van elke cel intact blijft. Ik besloot dat VBA de aangewezen weg was om dit te bereiken en heb een kleine maar handige subroutine gemaakt die dat doet.

Stel je onderstaand tabelletje voor:

Het is de bedoeling om dit ervan te maken (het geselecteerde bereik bevat het beoogde resultaat):

Als je dat probeert via Kopieren > Plakken Speciaal > Formules > Transponeren, dan is dit het resultaat:

Maar dat was niet de bedoeling!

Met het volgende stukje VBA code gaat deze operatie razendsnel, zonder de formules overhoop te halen:

Option Explicit

Sub TransposeFormulas()
    Dim vFormulas As Variant
    Dim oSel As Range
    If TypeName(Selection) <> "Range" Then
        MsgBox "Selecteer eerst een bereik cellen.", _
                vbOKOnly + vbInformation, "Transponeer formules"
        Exit Sub
    End If
    Set oSel = Selection
    vFormulas = oSel.Formula
    vFormulas = Application.WorksheetFunction.Transpose(vFormulas)
    oSel.Offset(oSel.Rows.Count + 2).Resize(oSel.Columns.Count, oSel.Rows.Count).Formula = vFormulas
End Sub

Hoe werkt dit precies?

Eerst controleren we of de huidige selectie een celbereik is, want anders genereert de code een uitvoeringsfout:

    If TypeName(Selection) <> "Range" Then
        MsgBox "Selecteer eerst een bereik cellen.", _
                vbOKOnly + vbInformation, "Transponeer formules"
        Exit Sub
    End If

Vervolgens slaan we de geselecteerde cellen op in een object variabele (hetgeen niet noddzakelijk is), zodat we er in de code mee kunnen werken:

    Set oSel = Selection

Nu worden de formules van deze cellen in 1 klap in een variabele (van het type variant) gestopt :

    vFormulas = oSel.Formula

Als je door deze code heenstapt (met mijn voorbeeld cellen), dan toont het venster locale variabelen van de Visual Basic Editor (VBE) deze inhoud voor vFormulas na uitvoeren van bovenstaande regel:

Zoals je ziet is vFormulas een 4*3 matrix.

Vervolgens willen we de rijen en kolommen van deze matrix verwisselen. Hiervoor gebruik ik de werkblad functie Transponeren:

    vFormulas = Application.WorksheetFunction.Transpose(vFormulas)

De struktuur van vFormulas verandert naar:

Presto! Een 4 * 3 matrix!

Tenslotten moeten de formules terug naar het werkblad. Om dat te kunnen doen, moeten we een reeks cellen opgeven die exact dezelfde dimensies heeft als de formule matrix die we net hebben gemaakt. Ik heb daarvoor de resize methide gebruikt. Tevens zorg ik er via de Offset methode voor, dat de resulterende tabel onder het origineel komt te staan:

    oSel.Offset(oSel.Rows.Count + 2).Resize(oSel.Columns.Count, oSel.Rows.Count).Formula = vFormulas

Klaar!

Commentaar

Geef dit artikel een cijfer:

(322 keer beoordeeld. Gemiddelde beoordeling: 5.9)

Commentaren op het artikel

Heeft u commentaar? Geef het! Het kan de inhoud van deze site helpen verbeteren

Uw naam: (Wordt getoond):
*
Uw Email adres (Niet verplicht, wordt NIET getoond, noch gebruikt voor verzenden van ongevraagde email):
 
Uw commentaar (wordt getoond na goedkeuring):
 *

    Subscribe in a readerpowered by longhead.com

Use the contact page to issue questions or comments about this website.
Copyright © 2003-2008 JKP Application Development Services