2.3k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

ich habe in Spalte 1 (aktuelle Daten) und Spalte 10 (Vergangenheitsdaten) zwei datenreihen, die Artikelnummern darstellen.
Ich möchte jetzt beide Datenreihen vergleichen und feststellen, welche Artikel (in Spalte1) dazu gekommen sind oder welche Artikel (in Spalte 10) ausverkauft sind und demzufolge in Spalte 1 nicht mehr vorkommen.
Sind Artikel in beiden Spalten vorhanden, dann will ich wissen ob und welche Mengenänderungen eingetreten sind.
Die Ergebnisse will ich jeweils separat auflisten.
Ich habe dazu einen Code, der zwar funktioniert aber sicher ziemlich aufwändig ist, da ich jeweils beide Artikelspalten mit der Suchanforderung durchlaufen lasse. Sicher gibt es da bessere und einfachere Lösungen..
Hat jemand einen Tipp??

Hier mein Code..
..
[code]
For i = 3 To Columns(1).Find("Total").Row - 1
Set rng = Columns(10).Find(Cells(i, 1), lookat:=xlWhole)
If rng Is Nothing Then
Cells(m, 10) = "Kauf : " & Right(Cells(1, 1), 10)
Cells(m, 11) = Cells(i, 1)
Cells(m, 13) = Cells(i, 5)
m = m + 1
Else
If Cells(i, 5) <> Cells(rng.Row, 11) Then
Cells(m, 10) = "Kauf/Verkauf: " & Right(Cells(1, 1), 10)
Cells(m, 11) = Cells(i, 1)
Cells(m, 13) = Left(Cells(i, 5), Len(Cells(i, 5)) - 4) - Left(Cells(rng.Row, 11), Len(Cells(rng.Row, 11)) - 4)
m = m + 1
End If
End If
Next

For i = 3 To Columns(10).Find("Total").Row - 1
Set rng = Columns(1).Find(Cells(i, 10), lookat:=xlWhole)
If rng Is Nothing Then
Cells(m, 10) = "Verkauf : " & Right(Cells(1, 10), 10)
Cells(m, 11) = Cells(i, 10)
Cells(m, 13) = "- " & Cells(i, 11)
m = m + 1
End If
Next
...
Gruß Andreas

6 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

Du machst es Dir oft sehr einfach.

Für einen Helfer wäre eine abgespeckte Beispielmappe mit den entsprechenden Erklärungen sicher verständlicher als der unvollständige Code.

Vor allem solltest Du Dir mal eine sinnvolle Variablen-Deklarierung angewöhnen und "Option Explicit" als zwingend betrachten.

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
sorry, ich wollte es mir wirklich nicht einfach machen, sondern versuchen, das Problem möglichst verständlich zu machen....offensichtlich ist mir das nicht gelungen. Gruß
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

der code ist doch super gelungen fuer dich !

woran hapert es denn ?

vielleicht die Laufzeit ?

dann beschaeftige dich mal mit der arraydarstellung

hab dir mal ein einfaches Beispiel gebastelt

zwei Bereiche werden einem Array uebergeben
zwei schleifen durchlaufen diese

Sub AndreasArray()
Dim BereichA As Variant, BereichB As Variant
BereichA = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
BereichC = Range("C2:C" & ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row)
For ZelleA = 1 To UBound(BereichA)
For ZelleC = 1 To UBound(BereichC)
'2 zeilen zur syntaxveranschaulichung
'BereichA(ZelleA, 1) = BereichA(ZelleA, 1) + BereichC(ZelleC, 1)
'if BereichA(ZelleA, 1)=0 then
'End If
Next ZelleC
Next ZelleA
Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row) = BereichA
Range("C2:C" & ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row) = BereichC
End Sub


gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo nighty,

vielen Dank für dein Beispiel! Du hast mit der Laufzeit Recht und ich weiß, dass es wie du einige Spezialisten bei supportnet gibt, die gute Tipps geben können von denen ich einiges lernen kann. Mit den Array habe ich bisher nicht viel Erfahrung, deshalb vielen Dank. Ich nehme dein Beispiel und passe es an mein Problem an.
Danke und schönen Sonntag.
VG Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

ein Array ist nur eine Kopie der excelzellen ,die im speicher schneller zu verarbeiten geht

bei zellen hast du zeilen,spakten syntax
bei einem Array genauso,da es eine Kopie ist

Bereich=Range("A1:D5")

um spalte D anzusprechen z.b.

Bereich (Zeile,4)

noch ein paar wichtige befehle

lbound
ubound
resize
redim
preserve(nur eindimensionale Arrays)

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo ignty,

prima, danke für die zusätzlichen Hinweise. Bin schon ein ganzes Stück weitergekommen!
Gruß Andreas
...