VBA Index und Match = Fehler

SKu

Fleet Admiral
Registriert
Aug. 2012
Beiträge
11.070
Hallo,

ich bin was VBA betrifft, nicht wirklich versiert und probiere mich gerade daran eigene Funktionen in VBA zu schreiben.
Bei ganz simplen Funktionen funktioniert das auch problemlos.

Nun wollte ich mal eine etwas komplexere Excel als Vorlage nutzen und dementsprechend eine Index-Match-Funktion in VBA abbilden.

Ich habe dafür zwei Tabellenblätter, wobei die Index-Match-Funktion auf Tabellenblatt 1 verwendet wird.

Jetzt habe ich mal versucht eine Funktion zu schreiben und die sieht folgendermaßen aus:

Code:
Function ProzVer(GPSys, Jahr)

Set MyRange1 = Worksheets("Sheet2").Range("A1:AU2616")
Set MyRange2 = Worksheets("Sheet2").Range("A:A")
Set MyRange3 = Worksheets("Sheet2").Range("2:2")

ProzVer = Application.WorksheetFunction.Index(MyRange1, Application.WorksheetFunction.Match(GPSys, MyRange2, 0),Application.WorksheetFunction.Match(Jahr, MyRange3, 0)

End Function

Zum einen meckert er, dass die Syntax bei "Function ProzVer(GPSys, Jahr)" fehlerhaft ist.
Und bei der Funktion an sich spuckt er mir Expected: list separator or ) aus.

Kann mir ein VBA-Spezi sagen was ich falsch mache?
 
Versuch mal, hinter "GPSys" das "," durch ein ";" zu ersetzen und berichte dann bitte nochmal.

EDIT:
Ist vermutlich ein doofer Tip, hab's mit ner SQL-Anweisung verwechselt... die Syntax hier sollte mit Komma getrennt eigentlich korrekt sein. Bin raus und ebenfalls auf Lösungsvorschläge gespannt.
 
Die Ergebnis der Funktion muss einer Variablen zugewiesen werden:

Function ProzVer(GPSys, Jahr) Dim X Set MyRange1 = Worksheets("Sheet2").Range("A1:AU2616") Set MyRange2 = Worksheets("Sheet2").Range("A:A") Set MyRange3 = Worksheets("Sheet2").Range("2:2") With Application.WorksheetFunction X = ProzVer(.Index(MyRange1, _ .Match(GPSys, MyRange2, 0), _ .Match(Jahr, MyRange3, 0))) End With End Function

Viel Erfolg
Ergänzung ()

Nachtrag: Alternativ und eigentlich Standard ist bei Funtionen die Deklaration eines Rückgabedatentyps in der Form:

Function XYZ(varA, var...) As Datentyp
 
Zuletzt bearbeitet von einem Moderator:
Ohne mir irgendetwas anderes angesehen zu haben:
Die erste Klammer in Zeile 7 wird nicht geschlossen.
 
  • Gefällt mir
Reaktionen: proserpinus
Okay, ich habe es geschafft keine Syntax-Fehler mehr zu produzieren, allerdings wirft mir die Funktion nur "#VALUE!" aus.

Hier mein Code:

Code:
Function ProzVer(GPSys, Jahr) 

Dim Result

Set Range1 = Worksheets("Sheet2").Range("A1:AU2616")
Set Range2 = Worksheets("Sheet2").Range("A:A")
Set Range3 = Worksheets("Sheet2").Range("2:2")

Result = WorksheetFunction.Index(Range1, WorksheetFunction.Match(GPSys, Range2, 0), WorksheetFunction.Match(Jahr, Range3, 0))

End Function

Jetzt ist es so, dass GPSys einen String darstellt. Zumindest gibt mir Excel mittels TYPE-Funktion den Wert 2 für die Zelle wieder. Ich schätze, dass die Match-Funktion deshalb einen Fehler zurückgibt.

Wie kann man den Eingabewert nun so umwandeln, dass er für die Match-Funktion nutzbar wird?
 
Am Besten laedst du einfach einmal ein Minimalbeispiel hoch.

.Match ist es ansonsten egal, ob es sich um ein String handelt, sofern er auch in einer Matrix mit Strings sucht.
Sind denn die Werte vorhanden und auch korrekt geschrieben?
Stimmen die Formate ueberein?
 
Okay, hier mal ein Aussschnitt.

Das ist Tabellenblatt 1:

1615326720665.png


Die Funktion PROZVER gibt "#VALUE" zurück.

Der Code sieht folgendermaßen aus:

Code:
Function PROZVER(GpSys As String, Jahr As Integer)

Dim Result As Double

Set Range1 = Worksheets("Sheet2").Range("A1:AU2616")
Set Range2 = Worksheets("Sheet2").Range("A:A")
Set Range3 = Worksheets("Sheet2").Range("2:2")

Result = Application.WorksheetFunction.Index(Range1, Application.WorksheetFunction.Match(GpSys, Range2, 0), Application.WorksheetFunction.Match(Jahr, Range3, 0))

PROZVER = Result

End Function

Die Index-Vergleichsfunktion in VBA nimmt Bezug auf Tabellenblatt2

1615326928907.png


Das Ergebnis müsste 107.3 lauten.
 
Zurück
Oben