2016-11-26 1 views
0

Hallo Leute, ich hoffe, Sie können mir mit diesem helfen. Ich schrieb eine einfache Funktion, um Renditen in Preise umzurechnen. Es ist nutzlos, aber ich werde es benutzen, um mein Problem zu erklären. Die Funktion funktioniert. Es macht was ich will.VBA-Funktion, die ein Array in Excel zurückgibt

Function ret2prices(ByVal r As Range) 

    Dim temp() As Variant 
    temp = r 

    Dim prices() As Variant 
    ReDim prices(1 To (UBound(temp, 1) + 1), 1) 
    prices(1, 1) = 1 

    For i = 2 To UBound(prices, 1) 
     prices(i, 1) = 1 + temp(i - 1, 1) 
     prices(i, 1) = prices(i - 1, 1) * prices(i, 1) 
    Next i 

    ret2prices = prices 

End Function 

das Problem ist, dass, wenn ich es in Excel-Arbeitsblatt verwenden, es gibt immer 0. Ich möchte in der Lage sein, um es auf die gleiche Weise ich MMULT mit STRG + SHIFT verwenden + ENTER. Irgendein Vorschlag?

Vielen Dank für Ihre Zeit

+2

Die zweite Dimension von 'prices' sollte' 1 To 1' sein, jetzt ist es '0 To 1' und die Funktion gibt Array mit 2 Spalten zurück. – BrakNicku

+1

versuchen Sie, Ihr Array für einen Bereich mit 2 Spalten mit CSE zu verwenden, und Sie werden sehen, dass @BrakNicku richtig ist –

+0

Es tut mir leid, Jungs, die ich Ihren Punkt nicht bekommen –

Antwort

3

Arrays in VBA sind 0-basiert, so:

ReDim prices(1 To (UBound(temp, 1) + 1), 1) 

entspricht

ReDim prices(1 To (UBound(temp, 1) + 1), 0 To 1) 

Der Code in Frage zurück erwarteten Ergebnisse, aber in der zweiten Spalte des Ergebnisarrays. Ändern der unteren Grenze der zweiten Dimension auf 1 behebt das Problem.

+3

'Option Base 1' würde es auch reparieren. Allgemein mag ich 'Option Base 1' nicht, aber wenn alle Arrays in einem bestimmten Modul Daten zwischen VBA und Bereichen übertragen sollen, ist es vielleicht ein gültiger Anwendungsfall. –

Verwandte Themen