UDF: Adresse einer Zelle ermitteln und in 2 Variablen speichern

02/11/2009 - 11:08 von Marco Schmid | Report spam
Liebe Newsgroup,

Ich komme schon wieder mit einer kleinen Frage... Ich entwickle z.Z.
gerade eine Funktion, die mir einigen finanzmathematischen "Kram"
ausspuckt. Soweit so gut. Dieser Funktion übergebe ich einen Wert,
welcher für die Berechnung des Resultats benötigt wird.

public function kor(tage as double) as double
kor = WorksheetFunction.Correl(Range(Cells(15, 9), Cells(15 + tage,
9)), Range(Cells(15, 3), Cells(15 + tage, 3)))
end function

Das ganze funktioniert auch. Das Problem ist nun aber, dass ich diese
Korrelationsberechnung nicht nur fix für die Bereiche 3 (Spalte C) und
9 (Spalte I) durchführen möchte, sondern für die Spalte, in der Tage
steht(den ich also der Funktion übergebe) und Spalte 3 (fix).

Oder anders ausgedrückt: mit dem Aufruf der Funktion vola(z.B. B2 -->
), soll die Korrelation im Range B15:B25 und C15:C25 ausgerechnet
werden. Rufe ich vola(z.B. F2 --> =5) auf, soll die Korrelation im
Range F15:F20 und C15:C20 berechnet werden.

So wie die Funktion jetzt angelegt ist, ist ja der Zellbezug fix. Er
reagiert nur auf den Übergabewert als Variable. Wie kann ich das
angehen?
Kann ich die Adresse von tage ermitteln und in 2 Variablen (Zeile,
Spalte) speichern und dann weiterverwenden?
Wie geht das?

Besten Dank für Eure Hilfe und freundliche Grüsse

Marco
 

Lesen sie die antworten

#1 Bernhard Sander
02/11/2009 - 14:20 | Warnen spam
Hallo Marco,

public function kor(tage as double) as double
kor = WorksheetFunction.Correl(Range(Cells(15, 9), Cells(15 + tage,
9)), Range(Cells(15, 3), Cells(15 + tage, 3)))
end function

Das ganze funktioniert auch. Das Problem ist nun aber, dass ich diese
Korrelationsberechnung nicht nur fix für die Bereiche 3 (Spalte C) und
9 (Spalte I) durchführen möchte, sondern für die Spalte, in der Tage
steht(den ich also der Funktion übergebe) und Spalte 3 (fix).

Oder anders ausgedrückt: mit dem Aufruf der Funktion vola(z.B. B2 -->
), soll die Korrelation im Range B15:B25 und C15:C25 ausgerechnet
werden. Rufe ich vola(z.B. F2 --> =5) auf, soll die Korrelation im
Range F15:F20 und C15:C20 berechnet werden.

So wie die Funktion jetzt angelegt ist, ist ja der Zellbezug fix. Er
reagiert nur auf den Übergabewert als Variable. Wie kann ich das
angehen?
Kann ich die Adresse von tage ermitteln und in 2 Variablen (Zeile,
Spalte) speichern und dann weiterverwenden?
Wie geht das?


Gib die Adresse der Bezugsspalte als String-Parameter ein:

Public Function kor(TagAdresse As String)
Set TagBereich = Range(TagAdresse)
nTage = TagBereich.Value
nZeile = TagBereich.Row()
nSpalte=TagBereich.Column()
kor = WorksheetFunction.Correl(_
Range(Cells(nZeile, nSpalte), Cells(nZeile+nTage, nSpalte)), _
Range(Cells(nZeile, 3), Cells(nZeile+nTage, 3)))

Die Funktion rufst Du dann so auf:
wert=kor("F10")
und in Zelle F10 muss die Anzahl der Tage stehen.

Gruß
Bernhard Sander

Ähnliche fragen