VBA-Funktionen aus Sheet aufrufen (Matrix als Arg)



Excel-Version: 2000
nach unten

Betrifft: VBA-Funktionen aus Sheet aufrufen (Matrix als Arg)
von: Maxi Allwein
Geschrieben am: 11.07.2002 - 10:57:33

Hallo Forum!

Ich habe eine Funktion geschrieben, die ich aus einer Excel-Tabelle aufrufen will:


Public Function LPM(r As Range, Optional Target, Optional Ordnung)
    If Ordnung < 0 Or r.Columns.Count > 1 Then Exit Function
    n = r.Count
    For i = 1 To n
        If r(i) < Target Then LPM = LPM + ((Target - r(i)) ^ Ordnung) / n
    Next i
End Function


Soweit funktioniert das auch prima! Man kann in eine Zelle z.B. schreiben =LPM(A2:A11).

Allerdings mußte ich bemerken, dass Excel einen Unterschied zwischen Ranges und Matrizen kennt. Wenn ich =LPM(0,5*A2:A11) eingebe erhalte ich #WERT!

[Hintergrund: Ich möchte eine Spalte in einer Tabelle, in der jeweils die Funktion aufgerufen wird. Das Argument soll dabei die Summe zweier Vektoren sein, jeweils gewichtet mit den Werten der Zeile der Tabelle:

MS Excel von Maxi Allwein
 ABC
1Gew1Gew2LPM
210=LPM(A1*anderesblatt!A2:A500+B2*andresblatt!B2:B500)
30,50,5etc.
40,90,1...

Insgesamt sollen das dann halt 1000 Zeilen werden...]

Angemerkt sein noch dass "eingebaute" Funktionen teils ähnlich reagieren: =Summe(0,5*A2:A10) liefert #WERT!
Was mir allerdings Hoffnung macht ist, dass es auch Matrix-Funktionen gibt, die solche Argumente "fressen": =MTRANS(0,5*A2:A10) funktioniert!!
[mtrans() macht aus Spalten Zeilen einer Matrix; korrekte Matrix im Sheet marieren Formel eingeben und Strg-shift-Eingabe]

FÜR SACHDIENLICHE HINWEISE BIN ICH DANKBAR!!

Maximilian



nach oben   nach unten

Re: VBA-Funktionen aus Sheet aufrufen (Matrix als Arg)
von: Hans W. Hofmann
Geschrieben am: 11.07.2002 - 14:02:43

Also der Reihe nach zur Unterschiedung zwischen Array/Range benötigst Du einen Variant als Übergabe und dann
If TypeName(pArray) = "Range" Then
n = pArray.Count
Else
n = UBound(pArray)
End If

Die Übergabe von Array-Bezügen mit arithm. Operationen zu handeln ist mir nicht geläufig. Wobei Dein Beispiel aber auch ziemlich unsinnig ist. Grundsätzlich kannst Du den Faktor diskret im Funktionskopf übergeben und in einer Schleife mit dem Vektor multiplizieren

Gruß HW


nach oben   nach unten

Re: VBA-Funktionen aus Sheet aufrufen (Matrix als Arg)
von: Hans W Hofmann
Geschrieben am: 11.07.2002 - 14:28:18

Noch schnell zur Ergänzung:
Auch bei einer UDF kommt ein Argument (Variant) wie 0,5*A2:A10 bei Eingabe als Arrayfunktion "richtig" (ausmultipliziert) an.
Additionen werden allerdings nicht erkannt.
BTW: Kann man Dein Problem nicht mit SUMMENPRODUKT erschlagen?

Gruß HW

nach oben   nach unten

Vielen Dank!
von: Maxi Allwein
Geschrieben am: 11.07.2002 - 14:55:02

..... werd mir das mal in Ruhe anschauen, ich denke, dass ist aber die Lösung.
(Ich sehe ein Array immer auch als Matrix und deswegen möchte ich auch damit rechnen :-))

Maxi

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "VBA-Funktionen aus Sheet aufrufen (Matrix als Arg)"