2016-04-29 8 views
-8

Ich muss öffentliche Funktion tun, die Werte von bestimmten Array und berechnet f (x) -Funktion für jedes x, wobei f (x) = x^3 + 1/5x +2. this is what I am doing but doesnt workWie verwendet man Arrays in VBA-Funktionen?

+4

schreiben Sie den Code in-line, nicht als Bild. Verwenden Sie dazu die Schaltfläche "Bearbeiten". – vacip

+2

Also, was genau meinst du mit "funktioniert nicht"? Fehlermeldung? Falsches Ergebnis? – vacip

+0

Es funktioniert für mich. – vacip

Antwort

2

Jeepeds Kommentar ist ein sehr wahrscheinlicher Grund für die Fehlfunktion Ihres Codes, es sei denn, Sie haben Option Base 1 oben im Codefenster. so haben Sie entweder/Ort, der Anweisung oder Sie ändern die ReDim Aussagen zu ReDim B(1 To nrows, 1 To ncols) As Double

darüber hinaus müssen Sie invertieren Next I und Next j

schließlich würde ich Ihnen vorschlagen zu:

  • Verwendung Long Variablentyp anstelle von integer für nrows und i Variablen, sollten Sie jemals mit einem datarange mit mehr als 32767 Zeilen befassen. und übernehmen die gleiche Art für ncols und j Einfachheit halber

  • verwenden, um einen „einfachen“ (nicht-Array) Doppel Variable für A da Sie brauchen nur als ein temporärer Wert „X“ für die Berechnung der entsprechenden „y“ -Wert und zu speichern Letzteres nur in B() Array, um schließlich von Ihrer Funktion zurückgegeben werden.

so könnte es sein:

Function functionvalue(datarange) 

Dim nrows As Long, ncols As Long 
Dim i As Long, j As Long 

Dim A As Double, B() As Double 

nrows = datarange.Rows.Count 
ncols = datarange.Columns.Count 

ReDim B(1 To nrows, 1 To ncols) As Double 

For i = 1 To nrows 
    For j = 1 To ncols 
     A = datarange.Cells(i, j) 
     B(i, j) = A^3 + A * 1/5 + 2 
    Next j 
Next i 

functionvalue = B 

End Function