Hallo rezwiebel,
Offenbar möchtest du nicht von allen, sondern nur von ausgewählten Kunden die Differenz bilden. Ferner gehe ich davon aus, dass das Array in einer möglichen Ergänzung des Makros hinsichtlich der Kunden erweiterbar sein soll. Dann sollte der letzte Index auf die Kunden verweisen, denn dieser ist mit ReDim Preserve erweiterbar, ohne dass die bisherigen Werte verloren gehen. Ich ändere dies. Warum beginnst du deine Zuweisung nicht bei A(0,0), B(0,0)?
Es wird dir nichts anderes übrig bleiben, als jeweils die gesamten Arrays zu durchsuchen oder, wenn jeder Kundenname nur einmal vorkommt, soweit, bis dieser Name in beiden Arrays gefunden wurde. Ich gehe von letzterem Fall aus. Wenn beide Arrays gleich aufgebaut sind, also zu jedem i A(0,i) und B(0,i) gleich sind, vereinfacht sich die Suche. Dann brauchst du aber auch nicht die Kundennamen doppelt zu führen.
Ich empfehle dir, wenn du dieses Makro tatsächlich einsetzen willst, die Arraydaten in einer Datei zu speichern und eine UserForm anzulegen, in der du die möglichen Kundennamen z.B. in einer ListBox anzeigen lässt.
Für heute verwende ich eine InputBox, in der du den Kundenname eingeben musst.
Sub Abziehen_im_Array()
Dim A(1, 1) As String, B(1, 1) As String, i,j,c
A(0, 0) = "Kunde1"
A(1, 0) = "1000"
A(0, 1) = "Kunde2"
A(1, 1) = "1500"
B(0, 0) = "Kunde1"
B(1, 0) = "200"
B(0, 1) = "Kunde2"
B(1, 1) = "300"
c = InputBox("Kundenname?")
For i = 0 To UBound(A, 2)
If A(0, i) = c Then
For j = 0 To UBound(B, 2)
If B(0, j) = c Then
A(1, i) = A(1, i) - B(1, j)
Exit For
End If
Next j
Exit For
End If
Next i
If i > UBound(A, 2) Or j > UBound(B, 2) Then
MsgBox "Name nicht in beiden Arrays gefunden!"
Else
MsgBox "Neuer Wert für " + A(0, i) + " in Array A: " + vbCrLf + A(1, i)
End If
End Sub
Viel Erfolg
Holger
rezwiebel schrieb am 15.05.2008 17:41:48:
Hallo zusammen,
ich habe 2 mehrdimensionale Arrays A und B.
Von Array A möchte ich die passenden Daten von B abziehen.
Beispiel:
A:
Dim A(2, 2) As String
A(0, 1) = "Kunde1"
A(0, 2) = "1000"
A(1, 1) = "Kunde2"
A(1, 2) = "1500"
B:
Dim B(2, 2) As String
B(0, 1) = "Kunde1"
B(0, 2) = "200"
B(1, 1) = "Kunde2"
B(1, 2) = "300"
Jetzt möchte ich in B die 2. Dimension (300) von "Kunde2" finden und diese von der 2. Dimension (1500) von A abziehen. Anschließend soll die 2. Dimension von A die Differenz als Wert übernehmen, damit A folgenden Inhalt hat:
A(0, 1) = "Kunde1"
A(0, 2) = "1000"
A(1, 1) = "Kunde2"
A(1, 2) = "1200"
Und das ganze ohne jeden einzelnen Wert durchsuchen zu müssen. Wie kann ich das machen?
Gruß
René
PS: Ich hoffe jemand versteht was ich meine... |