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

Application.index in combinatie met een Array [VBA]

Status
Niet open voor verdere reacties.

Ginger

Terugkerende gebruiker
Lid geworden
29 dec 2006
Berichten
2.972
Wie geeft mij raad? Naar mijn idee heb ik vaker gewerkt met de combinatie van een Application.Index en daarbinnen een Array om de kolommen aan te geven die ik wil. Maar of ik NU iets fout doe? Het wil in elk geval niet werken. In het hele simpele voorbeeld vul ik 3 array's. De eerste aan de hand van een bereik uit de sheet, de 2e en de 3e als poging om een array te vullen met een kleiner bereik.
Code:
Sub MaakTabel()

    q1 = ActiveSheet.Cells(1).CurrentRegion
    q2 = Application.Index(q1, 0, Array(3, 4, 5, 6, 7, 8, 9))
    q3 = Application.Index(q1, 0, Application.Transpose(Array(3, 4, 5, 6, 7, 8, 9)))
    
End Sub

De array q1 geeft een 2 dimensionaal bereik 1 to 11, 1 to 10
De array q2 geeft een 1 dimensionaal bereik 1 to 7 (verwacht: 2 dimensies 1 to 11, 1 to 7)
De array q3 geeft een 2 dimensionaal bereik 1 to 7, 1 to 1 (verwacht: 2 dimensies 1 to 11, 1 to 7)

Waarom ziet VBA het kolombereik 3, 4, 5, 6, 7, 8, 9 als regels en dus niet als kolommen? En waarom gaat het nou fout?
 

Bijlagen

  • Array-Index_probleem.xlsm
    12,2 KB · Weergaven: 46
Laatst bewerkt:
Hallo Leo,

Code:
 q3 = Application.Index(q1,[row(1:11)], Array(3, 4, 5, 6, 7, 8, 9))
 
Ola,

Code:
q2 = Application.Index(q1, [row(1:11)], [transpose(row(3:9))])

Het tweede argument in Index - de rijen - moet een 2-dimensionale array bevatten.
Het derder argument in Index - de kolommen - behoeft een 1-dimensionele array.

Hoe index een 0 verwerkt is in evaluate(" ") of [index(q1,1,0)] anders dan in Application.Index. (vraag me niet waarom).
 
waw, je kan daar leuke dingen mee doen !!!
Code:
  q2 = Application.Index(q1, Application.Transpose(Array(1, 5, 9)), Array(3, 6, 9))
 
@snb,

alles staat daar netjes uitgelegd, ik zal het in mijn achterhoofd houden dat ik het daar kan vinden, top !
 
@HSV, @snb, @cow18, ik begin met mijn excuses. Een vraag aanmaken en dan niet meer reageren.... Da's niet zo fraai. :(
Maar collega's met vakantie geeft lange werkdagen en weinig zin meer om nog 's avonds achter de pc te kruipen. Gelukkig is mijn vakantie bijna in zicht en zijn er al weer collega's terug op de afdeling. :D

Mijn dank voor jullie geboden oplossingen. Waar ik nog wel mee zit - geloof ik - is dat ik niet op voorhand weet hoeveel regels er zijn. Het opvoeren van een array op de regels is daarmee wel lastig. Jammer dus dat bij het gebruik van de array van kolommen dat dan de "0" voor de regels niet werkt.
 
Dan kan het zo:

Code:
Sub M_snb()
   sn=sheet1.cells(1).currentregion

   sp=application.index(sn, evaluate("row(1:" & ubound(sn) & ")"),Array(3, 4, 5, 8, 9))
End Sub

of met een benoemd bereik:

Code:
Sub M_snb()
   sheet1.cells(1).currentregion.name="snb"

   sp=application.index([snb], [row(snb)],Array(3, 4, 5, 8, 9))
End Sub
 
Laatst bewerkt:
snb die is OKE olé olé... :thumb:
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan