2017-06-28 3 views
0

Ich arbeite mit VBA und ich bin sehr ein Neuling. Ich habe grundsätzlich 3 Datenspalten, die als unabhängige Variable (MSCI Value, Growth und Small Cap) fungieren und dann eine leere Spalte gefolgt von zahlreichen Spalten mit Fondsdaten (abhängige Variablen). Die meisten von ihnen haben die gleiche Anzahl von Zeilen, aber einige nicht.Verwenden einer Linest-Funktion innerhalb einer geschachtelten Schleife

Ich bin auf der Suche nach der Linest-Funktion in Excel, um den Koeffizienten (Beta) jedes Fonds mit jeder unabhängigen Variable separat zu produzieren (MSCI Wachstum, Value, Small Cap). Ich bin mir nicht sicher, was der beste Weg ist, um meine Daten und VBA zu definieren. Und Gedanken/Ideen würden sehr geschätzt werden.

Momentan sind meine Gedanken eine verschachtelte Schleife. Wobei ich die Linest-Funktion verwende, um die erste unabhängige Variable (MSCI Growth, Spalte 2) gegen die erste abhängige Variable (Spalte 6) zurückzufahren und diese Spaltennummer im Bereich jedes Mal zu inkrementieren, bis die Spalte leer ist (es gibt keine Mittel mehr)), und wenn dies geschieht, kehrt es zum ersten Fonds zurück, wechselt jedoch zur nächsten unabhängigen Variablen (MSCI-Wert, Spalte 3). Dieser Prozess wird wiederholt, bis die letzte unabhängige Variable (MSCI Growth, Spalte 4) gegen den letzten Fonds regressiert ist.

Mein Problem war bisher 1) Erstellen einer Linest-Funktion mit benannten Bereichen 2) Erstellen einer Tabelle, wo die Ergebnisse der Schleife platziert werden.

Set StartCell = Range("B9") 

LastRow = Cells(Rows.Count, 1).End(xlUp).Row 

Set gRange = Range(StartCell, Cells(LastRow, 2)) 'MSCI growth range 

Range("M21").value = Evaluate("Linest(gRange,G9:G112)") 'column G contains the first fund. 

Dieser Code nicht ausgeführt wird, ich denke, dass es etwas mit der Matrixformel zu tun hat, ich brauche nur die Koeffizienten so brauche nicht die ganze Reihe laufen.

Ich versuchte Zellbezüge verwenden, aber wenn ich den Code lief habe ich #VALUE

Range("M22").value = Evaluate("Linest(Range((cells(9,2):cells(112,2)),Range(cells(9,7):cells(112,7)))") 

Vielleicht auf anderen Blättern kann ich werde den falschen Weg, um darüber, ich will ich ein globales Makro erstellen, aber Ich bin unsicher, wie ich mich der Aufgabe annähern soll.

Antwort

1

Sie müssen den VBA-Teil aus den Anführungszeichen entfernen und verketten.

ActiveSheet.Range("M21").value = ActiveSheet.Evaluate("Linest(" & gRange.Address(0,0) & ",G9:G112)")(1) 

Die zweite:

With ActiveSheet 
    .Range("M22").value = .Evaluate("Linest(" & .Range(.cells(9,2),.cells(112,2)).Address(0,0) & "," & .Range(.cells(9,7),.cells(112,7)).Address(0,0) & ")")(1) 
End With 

Dies wird auch Fehler, wenn sich die beiden Bereiche nicht die gleiche Größe haben. Also stellen Sie sicher, dass sie es sind.