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

Transponeren Array in VBA en toch meerdere dimensies behouden

Status
Niet open voor verdere reacties.

Ginger

Terugkerende gebruiker
Lid geworden
29 dec 2006
Berichten
2.972
Als je in VBA een selectie van cellen in een variabele propt, krijg je een array met meer dimensies.
Dus een reeks cellen in een regel geeft (bijvoorbeeld bereik A1:G1) bij q1 = Range("A1:G1") een array van "1 to 1, 1 to 7".
Een reeks cellen in een kolom geeft (bijvoorbeeld bereik A1:A7) bij q1 = Range("A1:A7") een array van "1 to 7, 1 to 1".
Mijn vraag is dus hoe je de array q1 kan transponeren naar de array q2 maar dat WEL beide dimensies blijven bestaan. Want als je het zo doet: q2 = application.transpose(q1) verandert de array q2 in een één-dimensionale array. Daarop liep dan m'n code stuk toen ik nog niet de functie er bij had die het element voor element omzet.

Het gaat er dus om dat ik één kolom met meerdere regels óf één regel met meerdere kolommen kan selecteren en dat in 1 procedure kan afvangen. Nu doe ik dat door de array's element voor element om te zetten, maar vroeg me af of dat toch nog eenvoudiger met de transpose functie kan. (Ik gebruik deze procedure voor het snel opzetten van bijvoorbeeld puntkomma gescheiden strings.)

Voor de goede orde... M'n procedure werkt zo prima! DAAR hoeft dus opzich niets meer aan te veranderen. Het is voor mij puur het "leer momentje" van die application.transpose....
 

Bijlagen

  • Voorbeeld voor Helpmij.NL.xlsm
    23,8 KB · Weergaven: 35
Laatst bewerkt:
Je kunt eventueel, een Listbox op de achtergrond gebruiken:

Dan heb je geen transpose nodig (2D blijft 2D) en loop je ook niet tegen de beperkingen aan van deze funktie. let wel de Lbound wordt 0 ipv 1:


Code:
    q = Selection
    With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
        .Column = q
         q1 = .List
    End With
 
of
Code:
Sub M_snb()
   sn = Application.Index(Cells(1).CurrentRegion, [transpose(row(1:33))], [row(1:2)])
   Cells(40, 1).Resize(, UBound(sn, 2)) = sn
End Sub
 
Ai ai ai.... Eric wees mij in een ander topic héél terecht op dit openstaande draadje... :eek:

mea culpa,
mea culpa,
mea maxima culpa.

Twee mooie oplossingen waarbij die van Erik flexibeler is omdat je de grootte niet hoeft aan te geven. Beide mijn dank voor de oplossing en sorry dat ik 'm uit het oog was verloren...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan