2016-03-29 10 views
0

TL; DR Also mein einziges Problem ist, dass ich die Zellwerte akkumulieren muss, wahrscheinlich die ganze Erklärung wan't notwendig, aber Sie werden ein besseres Verständnis meiner Situation bekommen, wenn Sie es durchlesen .Akkumulieren Sie Zellenwerte in Excel mit VBA

Ich habe gesucht und habe nichts über dieses spezielle Szenario gefunden. Ich habe dieses Excel-Blatt http://i.imgur.com/kDNvwL3.png mit den ersten Spalten/Zeilen-Indizes ausgeschrieben. (ich entfernte unnötige Sachen, um Verwirrung zu vermeiden)

Der Code kann verwirrend sein, aber ich werde schriftlich erklären, wie der Code funktioniert, als ob ich es ausführen würde, während Sie den Code überprüfen können. Das Problem wird am Ende erwähnt.

Also zuerst der Code:

ws1.Activate 
    Dim BLIrows As Integer, A As Range 
    Dim newRow As Integer 


    For BLIrows = 41 To 52 
    For newRow = 14 To 30 
     With ws1 
     If .Cells(BLIrows, 1).Value > 1 Then      'Make sure to only do this for non empty cells 
      Dim x As Long             '(they will be longer than 1 char) 
      Dim y As String 
      Dim element As Variant 
      For Each element In .Cells(BLIrows, 1) 
      y = .Cells(BLIrows, 1).Value        'Save it's value for the search in the EFG14 list 
      If y = .Cells(newRow, 5).Value Then     'The search in the EFG14 list 
       x = .Cells(newRow, 4).Value       'Save the number when found an identical value 
                        '<-- MISSING CODE/PROBLEM 
       If y = .Cells(BLIrows, 1).Value Then    'Make sure to put the number in the correct row 
        .Cells(BLIrows, 5).Value = x      'Putting the number 
       End If 
      End If 
      Next element 
     End If 
     If Not .Cells(BLIrows, 5).Value > 0 Then 'If anything (like Auto-pilot site) isn't in the EFG14 column 
     .Cells(BLIrows, 5).Value = 0     'then give it a 0 
     End If 
     End With 
    Next 
    Next 

Und hier ist, wie es in Text geschrieben funktioniert:

Der Code ausführt und es beginnt in Zelle A41. Es findet zuerst "P4250", da es das erste in dieser Spalte ist, aber ich werde mich auf "P33-0236" konzentrieren, da es nur einmal in der EFG14-Liste erscheint (Sie werden später verstehen, warum). Also findet der Code "P33-0236" in Zelle A44. Nachdem es diesen Wert hat, sucht es jetzt in der EFG14-Spalte danach. Wie Sie vermuten, wird es in der Zelle EFG21 denselben Wert finden. Der Code speichert dann die Nummer, die in derselben Zeile, aber in einer anderen Spalte geschrieben ist, in diesem Fall Zelle D21. Mit der Nummer in D21 durchsucht der Code nun die A40-Spalte (wo er begonnen hat) nach dem Wert, der den ganzzahligen Wert (offensichtlich "P33-0236") gefunden hat und findet ihn in A44, weil die Zahl gleich gesetzt werden muss Reihe, aber unterschiedliche Spalte relativ zu A44 in diesem Fall. So findet es in A44 "P33-0236" und bewegt sich zu einer anderen Spalte in derselben Zeile (E44). Hier wird der ganzzahlige Wert in der Spalte D eingefügt.

Grundsätzlich erklärt dies einen Probelauf meines VBA-Codes.

Nun ist die PROBLEM

Das Problem ist, dass, wenn die ganzzahlige Werte in die Spalte Kosten kopiert werden (E40) nicht die Werte ansammelt. Wenn der Code beispielsweise mit P4250 ausgeführt wird, wird in der Spalte "EFG14" dreimal "P4250" gefunden. Der Wert, der dann in seiner äquivalenten Spalte Cost ist, sollte eigentlich 28440 + 47400 + 47400 = 123240 sein, aber es sind nur 47400 (weil es das letzte "P4250" ist).

Wie der Titel vorschlagen, möchte ich die Werte der gleichen "P" -Zahlen hinzufügen, wenn Sie sie in die Kostenspalte setzen.

Konzentriere dich nicht darauf, wie der Code geschrieben ist - es funktioniert - es sei denn, es ist etwas Wichtiges. Das einzige, was wichtig ist, ist der Akkumulationscode.

+1

Können Sie SUMIF verwenden? –

Antwort

2

Wenn Sie möchten, dass der Wert die Summe aus dem aktuellen Wert plus dem neu gefundenen Wert ist, muss Ihr Code diese zusammenfügen, bevor er der Zelle den neuen Wert zuweist.

Es sieht so aus, als ob Sie der Zelle nur den neuen Wert zuweisen.

Vielleicht so etwas wie dieses (vorausgesetzt, dies ist, wo Sie die Werte wollen additiv sein):

.Cells(BLIrows, 5).Value = .Cells(BLIrows, 5).Value + x 
+0

Verdammt! Wie konnte ich etwas so Einfaches verpasst haben ?! Vielen Dank, es funktioniert wie es soll. –