Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte auslesen via VBA

Werte auslesen via VBA
31.05.2018 20:23:13
Philipp
Hallo zusammen,
Der Titel könnte etwas irreführend sein, da ich mir nicht so schlüssig bin, wie ich das Problem kurz benennen soll. Grundsätzlich muss ich vorausschicken, dass ich relativ unerfahren bin mit VBA, deshalb Asche über mein Haupt, falls die Lösung offensichtlich ist.
Ich habe das angehängte Excelfile mit rund 200'000 Zeilen, Spalten A - V sind gegeben durch den Output (den ich leider nicht verändern kann!) und ab Spalte X habe ich selber die Werte berechnet das ist nicht das primäre das Problem. Der letzte Schritt in Spalte AD und AL bringe ich jedoch nicht zu Stande.
Es geht in dem File um Trades im zwischen zwei Gesellschaften, immer 4 aufeinanderfolgende, aber nicht immer gleich sortierte Zeilen gehören zusammen und stellen einen Trade dar aus der Optik der jeweiligen Gesellschaft. Relevant für mich sind die Trades in welchen Asset ABC, DEF oder GHI vorkommen. Entweder verkauft Gesellschaft 1 eines der drei Assets oder es kauft eines der drei Assets basierend auf der Richtung des Trades werden die Werte in die Spalten X - AC oder AF - AK eingetragen. Soweit so gut. Was ich nun jedoch noch benötige in den Spalten AD und AL ist:
AD: In jener Zeile des Trades (der 4 zugehörigen Zeilen), in welcher die Werte in Spalte AC nicht 0 sind soll in Spalte AD der Name des Assets stehen, welches gekauft wurde. Für Reihe 2 - 5 wäre dies ABC, es wird ABC gekauft im Austausch für Asset XYZ. Da diese Werte immer aufderselben Zeile stehen ist dieser Teil eigentlich kein Problem und ist über eine simple wenn Formel lösbar.
AL: Hier soll auch in der Zeile des 4er Pakets, welches in der Spalte AK nicht 0 ist der Wert des zugehörigen Assets stehen. Hier ist jedoch das Problem, dass dies NICHT auf derselben Zeile steht wie die Zeile welche einen positiven Wert ausweist.
Bsp. Zeilen 6 - 9: In Zeile 6 steht das eine Asset und in Spalte AL auf Zeile 6 sollte somit das andere Asset, in dem Fall ABC stehen, dieser Wert steht jedoch nur in Zeile 8 und oder 9.
Als weiteres Erschwernis kommt hinzu, dass die Trades nicht immer in derselben Reihenfolge erfasst sind, wie es in den Beispieldateien ist. Somit müsste das VBA in der Lage sein, basierend auf des Wertes in der Spalte D, T oder U das 4er Packet zu identifizieren und dann den entsprechenden Wert zu suchen.
Die angestrebte Lösung wäre somit:
Zeile 1, Spalte AD: "ABC"
Zeile 6, Spalte AL: "ABC"
Zeile 12, Spalte AL: "DEF"
Zeile 16, Spalte AL: "GHI"
Am Schluss sollte ich in der Lage sein die Summen der Werte aus Spalte N zu bilden, wenn in Spalte AD das Asset ABC / DEF oder GHI steht und dasselbe wenn sie in Spalte AL stehen. Dies kann ich jedoch über einfach Filter lösen.
Ich hoffe ich habe mich verständlich ausgedrückt und jemand kann mir helfen. Bereits jetzt ein herzliches Dankeschön meinerseits.
LG
Philipp
https://www.herber.de/bbs/user/121916.xlsx

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte auslesen via VBA
01.06.2018 11:22:14
MCO
Moin!
Hab es mal nach meinem Verständnis umgesetzt. Das Trade-Ergebnis kommt auf jeden Fall raus, mit der Summe musst du noch weiter tricksen, da du keine Komma-werte sondern im Ami-Format Werte gegeben hast.
Hier der Code:
Sub test()
Application.ScreenUpdating = False
Set Rng = [A2].CurrentRegion
Range("AC2").FormulaLocal = "=(X2*Z2*AA2+X2*AB2)"
Range("AD2").FormulaLocal = "=WENN(AC2>0;H2;"""")"
Range("AC2:AD2").AutoFill Range("AC2:AD" & Rng.Rows.Count)
Range("AK2").FormulaLocal = "=(AF2*AH2*AI2+AF2*AJ2)"
Range("AK2").AutoFill Range("AK2:AK" & Rng.Rows.Count), xlFillValues
Range("AK:AK").Copy
Range("AK:AK").PasteSpecial xlPasteValues
Range("AK:AK").Replace "0", "", xlWhole
Set Rng_sp = _
Range("AK2:AK" & Rng.Rows.Count).SpecialCells(xlCellTypeConstants).Offset(0, 1)
For Each cl In Rng_sp
cl.Value = gegentrade(cl.Row)
Next cl
Range("AC:AC").Copy
Range("AC:AC").PasteSpecial xlPasteValues
Range("AK:AK,AC:AC").Replace "0", "", xlWhole
Application.CutCopyMode = False
'Range("N:N").Replace ".", ",", xlPart
End Sub
Function gegentrade(zeile As Long)
On Error Resume Next
For i = WorksheetFunction.Max(zeile - 3, 1) To zeile + 3
If Cells(zeile, 4) = Cells(i, 4) And Cells(zeile, 8)  Cells(i, 8) Then
gegentrade = Cells(i, 8)
Exit For
End If
Next i
End Function
Gruß, MCO
Anzeige
AW: Werte auslesen via VBA
02.06.2018 20:02:53
Philipp
Wow MCO, vielen herzlichen Dank funktioniert tadellos.

18 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige