2 dimensionele array

  • Onderwerp starter Onderwerp starter bifi
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

bifi

Gebruiker
Lid geworden
20 apr 2007
Berichten
34
hallo

Kan er iemand mij helpen of een voorbeeld geven van een 2 dimensionele array met vba. ik heb dit nog nooit gebruikt en weet niet hoe ik eraan moet beginnen

groeten
 
Dat kun je doen door " 1 dimensionele" arrays te maken en de ene array te vullen met de ander
 
ok.

Mr het probleem is dus dat ik moet gaan kijken welke waarden van kolom B horen bij kolom A in Excel. Nu heb ik mijn aantal punten al geteld in kolom en moet ik alleen nog gaan kijken welke waarden van kolom B hierbij horen.

Dit is mijn programma wat ik al heb,

Sub VBA_Vincent()

Dim i, j, y, z As Integer
Dim test_waarde As String
Dim test_waarde2 As String
Dim x_value As String
Dim punten_array() As String
Dim elementen() As String
Dim aantal_elementen As Integer
Dim aantal_verschillende_elementen As Integer
Dim index As Integer
Dim test As Boolean


'ReDim punten_array(1)
i = 1
Do
ReDim Preserve punten_array(i)
x_value = Cells(i, 1)
punten_array(i - 1) = x_value
i = i + 1
Loop While Cells(i, 1) <> ""
ReDim Preserve punten_array(i - 1)

j = 1

Do While punten_array(j) <> ""
MsgBox (punten_array(j))
j = j + 1
Loop

'Detectie van aantal waarden in onze array
aantal_elementen = UBound(punten_array)
MsgBox ("Het aantal elementen van de array: " & Str(aantal_elementen) & " ")

index = 0
ReDim Preserve elementen(1)
elementen(index) = punten_array(index)
index = 1

For y = 0 To UBound(punten_array)
test = False
For z = 0 To UBound(elementen)
If (test = False) Then
If (punten_array(y) = elementen(z)) Then
test = True
End If
End If
Next z
If (test = False) Then
index = index + 1
ReDim Preserve elementen(index)
elementen(index - 1) = punten_array(y)

End If
Next y

MsgBox ("Aantal verschillende elementen:" & Str(UBound(elementen)))

End Sub


Hoe zou ik hier een 2 dimensionele array aan kunnen toevoegen.

Heb er nog nooit mee gewerkt

groeten
 
ok.

Mr het probleem is dus dat ik moet gaan kijken welke waarden van kolom B horen bij kolom A in Excel. Nu heb ik mijn aantal punten al geteld in kolom en moet ik alleen nog gaan kijken welke waarden van kolom B hierbij horen.


Hoe zou ik hier een 2 dimensionele array aan kunnen toevoegen.

Heb er nog nooit mee gewerkt

groeten

hoi bifi
waarom wil je met een array werken?
je kan toch direct cellen met elkaar vergelijken
twee kolommen vormen samen toch een 2D gebied

vb:
kolom1 = 1
kolom2 = 2
enz
en dan een loopje maken met zoiets er in
if cells(rij1,kolom1)=cells(rij2,kolom2) then
teller=teller + 1)
enz.
endif

groet sylvester
 
Bifi

Zet de code eens tussen code tags aub. Selecteer de code als je het bericht aanpast en klik op het # teken.
 
Ja da zou ik ook kunnen maar mij is gevraagd om dat met een array te doen. Zou je dan ook weten hoe ik dan ongeveer moet werken. ik heb het nog altijd niet gevonden

Code:
Sub VBA_Vincent()

Dim i, j, y, z As Integer
Dim test_waarde As String
Dim test_waarde2 As String
Dim x_value As String
Dim punten_array() As String
Dim elementen() As String
Dim aantal_elementen As Integer
Dim aantal_verschillende_elementen As Integer
Dim index As Integer
Dim test As Boolean


'ReDim punten_array(1)
i = 1
Do
ReDim Preserve punten_array(i)
x_value = Cells(i, 1)
punten_array(i - 1) = x_value
i = i + 1
Loop While Cells(i, 1) <> ""
ReDim Preserve punten_array(i - 1)

j = 1

Do While punten_array(j) <> ""
MsgBox (punten_array(j))
j = j + 1
Loop

'Detectie van aantal waarden in onze array
aantal_elementen = UBound(punten_array)
MsgBox ("Het aantal elementen van de array: " & Str(aantal_elementen) & " ")

index = 0
ReDim Preserve elementen(1)
elementen(index) = punten_array(index)
index = 1

For y = 0 To UBound(punten_array)
test = False
For z = 0 To UBound(elementen)
If (test = False) Then
If (punten_array(y) = elementen(z)) Then
test = True
End If
End If
Next z
If (test = False) Then
index = index + 1
ReDim Preserve elementen(index)
elementen(index - 1) = punten_array(y)

End If
Next y

MsgBox ("Aantal verschillende elementen:" & Str(UBound(elementen)))

End Sub

toch bedankt om al te reageren

groeten
 
Dag Bifi,

Dim a() as string
Dim i as integer
Dim j as integer
Dim m as integer
Dim n as Integer

With Activeworkbook.Sheets(1)
m=.Cells(1,1).CurrentRegion.Rows.Count 'bepaal het aantal rijen
n=-1
Redim a(1,m)
For i = 1 to m
n=n + 1
a(0, n') = .Cells(i, 1).Value
a(1, n) = .Cells(i, 2).Value
Next
End With
Redim Preserve a(1,n)
' Tweedimensionele array is gereed.

Nu cellen vergelijken:

With Activeworkbook.Sheets(1)
m=.Cells(1,1).CurrentRegion.Rows.Count
For i = 1 to m
For j = 1 To m
If .Cells(i,1).value = .Cells(j,2) then
Next
Next
End With

Gegroet,

Axel.
 
merci axel

Maar als ik dit toevoeg aan mijn programma dan bekom ik dit

Code:
Sub VBA_Vincent()
' Written by Vincent Claes - XIOS Hogeschool Limburg
' 18/04/2007
' For educational Purposes of Yf Brems :-)


Dim i, j, y, z, m, n As Integer
Dim test_waarde As String
Dim test_waarde2 As String
Dim x_value As String
Dim punten_array() As String
Dim elementen() As String
Dim aantal_elementen As Integer
Dim aantal_verschillende_elementen As Integer
Dim index As Integer
Dim test As Boolean
Dim a() As String




'ReDim punten_array(1)
i = 1
Do
    ReDim Preserve punten_array(i)
    x_value = Cells(i, 1)
    punten_array(i - 1) = x_value
    i = i + 1
Loop While Cells(i, 1) <> ""
ReDim Preserve punten_array(i - 1)

j = 1

Do While punten_array(j) <> ""
    MsgBox (punten_array(j))
    j = j + 1
Loop

'Detectie van aantal waarden in onze array
aantal_elementen = UBound(punten_array)
MsgBox ("Het aantal elementen van de array: " & Str(aantal_elementen) & " ")

'Detectie van het aantal verschillende waarden in onze array
'aantal_verschillenden_elementen = UBound(punten_array)
    'For y = 0 To (UBound(punten_array))
 '       For z = y + 1 To (UBound(punten_array))
  '          If (punten_array(y) = punten_array(z)) Then
   '         aantal_verschillenden_elementen = aantal_verschillenden_elementen - 1
    '        End If
     '   Next z
  '  Next y
index = 0
ReDim Preserve elementen(1)
elementen(index) = punten_array(index)
index = 1

For y = 0 To UBound(punten_array)
    test = False
    For z = 0 To UBound(elementen)
        If (test = False) Then
            If (punten_array(y) = elementen(z)) Then
              test = True
            End If
        End If
    Next z
    If (test = False) Then
    index = index + 1
    ReDim Preserve elementen(index)
    elementen(index - 1) = punten_array(y)

    End If
Next y

        MsgBox ("Aantal verschillende elementen:" & Str(UBound(elementen)))
    
    


With ActiveWorkbook.Sheets(1)
m = .Cells(1, 1).CurrentRegion.Rows.Count 'bepaal het aantal rijen
n = -1
ReDim Preserve a(1, m)
For i = 1 To m
n = n + 1
a(0, n) = .Cells(i, 1).Value
a(1, n) = .Cells(i, 2).Value
Next
End With
ReDim Preserve a(1, n)
' Tweedimensionele array is gereed.

'Nu cellen vergelijken:

With ActiveWorkbook.Sheets(1)
m = .Cells(1, 1).CurrentRegion.Rows.Count
For i = 1 To m
For j = 1 To m
If .Cells(i, 1).Value = .Cells(j, 2) Then
Next
Next
End With

End Sub

Hier zit nog iets mis denk. Maar ik ben niet zo gevorderd om dit probleem te achterhalen

groeten
 
merci Axel

Maar hier heb ik nog geen 2 dimensionale array.

Wanneer ik nu in Kolom B ook nog waardes invul moet ik kunnen zien welke waarden bij elkaar horen. dus wanneer er lang letter A bv B staat dan moet er in bv een matrix geschreven worden dat bij letter A, letter B hoort en zo verder als er nog letters A zijn moet dit allemaal hieronder geschreven worden. Dit is eigenlijk het grote probleem

groeten Bifi
 
Dag Bifi,

Omschrijf eens duidelijk wat je eigenlijk wilt. En onder welke voorwaarden horen de waardes in kolom A en B bij elkaar?

Gegroet,

Axel
 
alles van dezelfde regel hoort bij elkaar. dus alles wat in dezelfde regel staan in kolom A en kolomB moet ik onder elkaar kunnen zetten 2 dimensionale array. Als iets in kolom A dubbel voorkomt mag dat toch mr in 1 keer voor komen in mijn matrix en moet ik alles van kolom B wat hierbij hoort gewoon eronder zetten. Dus bv in Kolom A staat 2 keer A10 dan komt dat dus mr 1 keer voor in de matrix en wat bij beide A1's staat komt hier gewoon onder te staan

Je bent echt enorm fel bedankt voor uw hulp Axel

groeten
 
hoi Bifi

wat moet er gebeuren als dit voor komt?

HTML:
kolom A	kolom B	wordt dit	kolom A	kolom B	of	kolom A	kolom B

piet	marie		jan	marie		jan	marie
jan	marie		klaas	an		klaas	an
piet	marie		piet	marie		piet	marie
piet	an			marie			an
klaas	an			an

groet sylvester
 
hoi Bifi

een array is in vba altij een 1D omgeving niet 2D

inde help van exel staat
HTML:
Array, functie
      

Geeft als resultaat een Variant met een matrix.

Syntaxis

Array(argumenten)

[B]Het vereiste argument argumenten bestaat uit een lijst met waarden die met een komma zijn gescheiden[/B]. 
Deze waarden worden toegewezen aan de onderdelen van de matrix die in de Variant is opgenomen. 
Als u geen argumenten opgeeft, wordt een matrix met een lengte nul gemaakt.

Notities

De notatie die u gebruikt om te verwijzen naar een onderdeel van een matrix, 
bestaat uit de naam van de variabele gevolgd door het indexnummer tussen haakjes van het gewenste onderdeel. 
In het volgende voorbeeld stelt de eerste instructie een variabele A in als Variant. 
De tweede instructie wijst een matrix toe aan de variabele A. 
De laatste instructie geeft aan hoe de waarde die in het tweede matrixonderdeel is opgenomen, 
aan een andere variabele wordt toegewezen.

Dim A As Variant
A = Array(10,20,30)
B = A(2)
misschien bedoelje een 2D matrix dat is een stuk makkerlijker

je kunt zoals eerder vermeld wel in een Array meerdere Array's opslaan
dat is niet handig werken

groet sylvester
 
Laatst bewerkt:
ja kweet niet juist wat het makkelijkste is.

Code:
kolom A	kolom B	wordt dit	kolom A	kolom B	

piet	marie		jan	marie		
jan	marie		klaas	an		
piet	marie		piet	marie		
piet	an			marie	
klaas	an			an

Dit is het juiste voorbeeld wat het moet worden. Ik denk dat het de bedoeling is dat ik dan met een matrix werk.
Als dit voorbeeld niet met een 2 dimensionele array gaat

groetjes Bifi
 
Dag Bifi,

Wat dacht je van een Combobox waar alle items van kolop A eenmaal in staan en een Listbox waarin – als je op een item van de Combobox klikt – alle bijbehorende items van kolom B staan.

Ik begrijp nog vsteeds niet wat je er mee wilt bereiken?

Gegroet,

Axel.
 
Ja da kan ook. ik zal het doel eventjes uitleggen. Ik moet die punten moet ik lijnen trekken in autocad. Die waarden van kolom 1 is mijn begintpunt en de waarde van kolom 2 is mijn eindpunt.

Hiervoor heb ik dit nodig

groeten
bifi
 
ik heb het probleem opgelost

dit is de code. Nu moet ik eigenlijk alleen nog een X zetten in de matrix wanneer er de 2 waarden bij elkaar horen. Jij weet misschien niet hoe ik dat het eenvoudigste oplos.

Groeten

Code:
Sub VBA_Vincent()


Dim i, j, y, z, x As Integer
Dim test_waarde As String
Dim test_waarde2 As String
Dim x_value As String
Dim y_value As String
Dim punten_array() As String
Dim eindpunten_array() As String
Dim elementen() As String
Dim eindelementen() As String
Dim aantal_elementen As Integer
Dim aantal_eindelementen As Integer
Dim aantal_verschillende_elementen As Integer
Dim index As Integer
Dim test As Boolean
Dim vertrekpunt_eindpunt_kabellijst() As String
Dim vertrekpunt_eindpunt_kabellijst_comments() As String
Dim dimpoint As Integer
Dim dimpoint2 As Integer

 

'ReDim punten_array(1)

i = 1
Do
    ReDim Preserve punten_array(i)
    x_value = Cells(i, 1)
    punten_array(i - 1) = x_value
    i = i + 1
Loop While Cells(i, 1) <> ""
ReDim Preserve punten_array(i - 1)

j = 0

 

'Do While punten_array(j) <> ""

'    MsgBox (punten_array(j))

'    j = j + 1

'Loop

 

'Detectie van aantal waarden in onze array

aantal_elementen = UBound(punten_array)
MsgBox ("Het aantal elementen van de array: " & Str(aantal_elementen) & " ")
 

index = 0
ReDim Preserve elementen(1)
elementen(index) = punten_array(index)
index = 1

For y = 0 To UBound(punten_array)
    test = False
    For z = 0 To UBound(elementen)
        If (test = False) Then
            If (punten_array(y) = elementen(z)) Then
              test = True
            End If
        End If
    Next z
    If (test = False) Then
    index = index + 1
    ReDim Preserve elementen(index)
    elementen(index - 1) = punten_array(y)
    End If
Next y

        MsgBox ("Aantal verschillende elementen in kolom 1:" & Str(UBound(elementen)))
     dimpoint = UBound(elementen)

i = 1
Do
    ReDim Preserve eindpunten_array(i)
    y_value = Cells(i, 2)
    eindpunten_array(i - 1) = y_value
    i = i + 1
Loop While Cells(i, 2) <> ""
ReDim Preserve eindpunten_array(i - 1)

j = 0

 

'Do While punten_array(j) <> ""

'    MsgBox (eindpunten_array(j))

'    j = j + 1

'Loop

aantal_eindelementen = UBound(eindpunten_array)
MsgBox ("Het aantal elementen van de array: " & Str(aantal_eindelementen) & " ")

index = 0
ReDim Preserve eindelementen(1)
eindelementen(index) = eindpunten_array(index)
index = 1

For y = 0 To UBound(eindpunten_array)
    test = False
    For z = 0 To UBound(eindelementen)
        If (test = False) Then
            If (eindpunten_array(y) = eindelementen(z)) Then
              test = True
            End If
        End If
    Next z
    If (test = False) Then
    index = index + 1
    ReDim Preserve eindelementen(index)
    eindelementen(index - 1) = eindpunten_array(y)
    End If
Next y

        MsgBox ("Aantal verschillende elementen in kolom 2:" & Str(UBound(eindelementen)))

dimpoint2 = UBound(eindelementen)

ReDim vertrekpunt_eindpunt_kabellijst(dimpoint, dimpoint2)
ReDim vertrekpunt_eindpunt_kabellijst_comments(dimpoint, dimpoint2)

For y = 1 To (UBound(elementen))
    vertrekpunt_eindpunt_kabellijst(y, 0) = elementen(y - 1)
    vertrekpunt_eindpunt_kabellijst_comments(y, 0) = elementen(y - 1)
Next y

For x = 1 To (UBound(eindelementen))
    vertrekpunt_eindpunt_kabellijst(0, x) = eindelementen(x - 1)
    vertrekpunt_eindpunt_kabellijst_comments(0, x) = eindelementen(x - 1)
Next x

MsgBox ("Done")

End Sub
 
Nee ik bedoel nog iets anders.

Wanneer je mijn progromma laat lopen. dan krijg je een matrix. Nu moet ik kijken welke waarden van kolom 2 langs de waarde in kolom in staat. hierin moet ik dan een kruisje zetten. achteraf kan ik dan met behulp van x een lijn in autocad plaatsen.

groeten

bifi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan