RijWaarden in een Array

Status
Niet open voor verdere reacties.

c2you

Gebruiker
Lid geworden
16 aug 2007
Berichten
11
Hallo,

Ik heb best goed gezocht, maar niet kunnen vinden wat ik nodig heb.

Ik heb bv het alfabet staan in A1:Z1

Nu wil ik deze waarden in een array lezen. Zeg Alfa(1) t/m Alfa(26)
Dit met behulp van een for/next lus..., denk ik

Ik zou e.e.a natuurlijk in een kolom kunnen zetten ,maar dat is niet de bedoeling.

Weet iemand een oplossing?

M.Vr. Gr.

Arjan
 
Bvb.

Code:
Sub alfabet()

    alfa = Application.Transpose([A1:Z1].Value)
    
    MsgBox UBound(alfa, 1)

End Sub
 
Wim Bedankt,

Maar helaas is 't 'm niet helemaal.

Er zou een array moeten zijn, voorafgegaan aan door DIM ALFA(26) dan toch?

Ik ken:

Dim ALFA(26)
For x = 1 To 26
ALFA(x) = Range("A" & x)
Range("A" & x + 30) = ALFA(x)
Next

Toch?

Maar dat geldt dan voor een kolom.
Ik zou graag de werkwijze voor relatieve verwijzing van de kolommen kennen.

Het resultaat zou bv. bij Range("C9") = alfa(8) moeten resulteren in de letter H in
cel C9.


Zou je nog eens willen kijken?
 
Laatst bewerkt:
Je hoeft vaak niet te "loopen" in Excel, zoals hier. Overigens geeft Transpose wel degelijk een array terug, maar goed.

Wil je dan toch een loop, doe het dan zo:

Code:
Dim ALFA(26)
For x = 1 To 26
    ALFA(x) = Cells(1, x)
Next
 
Het zou je sieren eerst een suggestie te testen alvorens erover te oordelen.

Code:
Sub alfabet()
    sq= Application.Transpose([A1:Z1])
    msgBox sq(8,1)
End Sub
Je hoeft een variabele niet te dimensioneren om hem te vullen (de VBA-compiler is slimmer dan jij denkt).
 
Het zou je sieren eerst een suggestie te testen alvorens erover te oordelen.

Code:
Sub alfabet()
    sq= Application.Transpose([A1:Z1])
    msgBox sq(8,1)
End Sub
Je hoeft een variabele niet te dimensioneren om hem te vullen (de VBA-compiler is slimmer dan jij denkt).

@ SNB
VBA is slimmer, en jullie zijn allemaal zeer zeker slimmer, maar dat wil niet zeggen dat je mij arrogantie kunt verwijten. :) Natuurlijk heb ik de suggestie getest..., Bij mij werkte die niet.., Of ik ging er niet goed mee om.., in elk geval gaf die niet het gewenste resultaat..., Vandaar dat ik om een tweede suggestie durfde te vragen.


@ Wim
Ik ben buitengewoon content met deze oplossing. Probleem opgelost.
Arjan weer een klein stukje wijzer.

Bedankt voor jullie commentaar.

Gr. Arjan
 
Waarom een loop ?? Onderstaande doen toch beiden hetzelfde, alleen een paar regels minder bij sub alfabet en beter te begrijpen
Code:
Sub alfabet()
    sq = Application.Transpose([A1:Z1])
    [c9] = sq(9, 1)
End Sub

Sub test()
Dim ALFA(26)
For x = 1 To 26
    ALFA(x) = Cells(1, x)
Next
[c9] = ALFA(9)
End Sub
 
Ik begreep de functie niet goed. Daardoor kreeg ik bij het testen steeds een verkeerde
waarde. Maar inmiddels ben ik erachter hoe Transpose werkt.., althans in dit voorbeeld, en dat is inderdaad veel beter. Ik wilde het uitlezen in een loop omdat ook het schrijven in een loop gebeurd. Maargoed, Transpose blijft beter.

Voor wie het interesseert doe ik het bestand er even bij. Het is een werkrooster waarbij de bottlenek het schrikkeljaar is. Dus het jaar 2012 heeft 29 dagen in februari. Das een probleem met de roosterlus van 42 dagen.

Maar van jou pak ik toch maar weer mooi de haken mee.., [C9], ik wist niet dat dat zo ook kon, ondanks dat ik alle boeken en sites etc. raadpleeg. :)

Bedankt weer..,

Gr. Arjan
 

Bijlagen

Laatst bewerkt:
Ik wilde het uitlezen in een loop omdat ook het schrijven in een loop gebeurd

En het is net dáár dat je 'winst' boekt door weg te schrijven in 1 beweging, in plaats van in een lus.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan