index und vergleich
13.07.2022 19:27:56
Björn
Moin Leute,
ich habe eine Formel, die ich gern in VBA nutzen würde. Ich bekomme das in VBA aber nicht umgesetzt - habe mehrere Varianten mit .match versucht, bekomme es aber nicht hin. Kann mir jemand helfen?
=INDEX('Tab1'!M:M;VERGLEICH('Tab2'!D2&'Tab2'!A2;'Tab1'!E$1:E$1000000&'Tab1'!A$1:A$1000000;0))
Danke
sieht nicht so aus als ob du das überhaupt in VBA versucht hast.
Zeig doch mal was der Makrorekorder auswirft und oder was du draus gemacht hast.
Betrifft: AW: index und vergleich
Das ist die Funktion aus Excel, die funktioniert. Die wollte ich gern in VBA umsetzen. Da ich nun unterwegs bin, kann ich die Versuche derzeit nicht hochladen.
Betrifft: AW: index und vergleich
Hi
Das kannst du so nicht direkt in VBA umsetzten, weil hier eine Matrixformel aktiv ist, die zuerst in einer Schleife die Verkettung der Zellen Spalte A und E ausführt und damit dann den Vergleich ausführt.
Diese interne Schleife kann VBA nicht ausführen, die müsstest du explizit als For-Next- Schleife programmieren.
Der Workaround wäre, die Excel-Zellformel-Berechnung zu nutzen, indem man die Formel als Textstring in englischer Schreibweise mit A1-Zellbezügen erstellt und dann mit Evaluate(Formel) berechnen lässt.
Gruß Daniel
Betrifft: AW: index und vergleich
Da die Rückgabe auf wenige Variablen beschränkt ist, habe ich verschiedenen Zahlenwerte auf "Tab2" nun entsprechende Parameterangabe zugeordnet. Und in meiner Ursprungsliste (Tab1) eine Spalte mit den Nummern ergänzt. Vielleicht etwas umständlich, allerdings spare ich mir so die for_next_Schleife und vor allem funktioniert es ;-)
Gruß Björn
If Application.WorksheetFunction.CountIfs(Sheets("Tab1").Range("A1:A1000000"), Cells(i, 1), _
Sheets("Tab1").Range("E1:E1000000"), Cells(i, 4)) > 0 Then
var1 = Application.WorksheetFunction.SumIfs(Sheets(Tab1).Range("N1:N1000000"), _
Sheets(Tab1).Range("A1:A1000000"), Cells(i, 1), _
Sheets(Tab1).Range("E1:E1000000"), Cells(i, 4))
Cells(i, 7) = Application.WorksheetFunction.VLookup(var1, Sheets(Tab2).Range("NrZuordnung"), 2, False)
Else
Cells(i, 7) = "ohne Angabe"
End If