Ich nutze die Fourieranalyse aus dem Analyse Toolpack bisher händisch. Eben über Register Daten, Datenanlyse in Excel 2007.
Nun habe ich viele Daten in Spalten, die ich einer Fourieranalyse zu unterziehen habe. Der Datenumfang ist nicht immer gleich groß.
Nun dachte ich mir, es wäre schön, wenn ich die eingebaute Fourieranalyse wie eine normale Excelfunktion im Arbeitsblatt nutzen könnte. Dazu müsste ich der Fourieranalyse den Bereich der Eingabedaten übergeben sowie einen gleich großen Bereich der Ausgabedaten.
In der konkreten Umsetzung scheitere ich, trotz intensiver Suche hier und anderswo. Am ehesten hat mir https://www.herber.de/forum/archiv/1460to1464/1462166_Data_Analysis_FFT_mit_Variablen.html
geholfen.
Nun habe ich in einer Excelarbeitsmappe ein Modul angelegt, diesem folgenden Code zugewiesen:
Option Explicit
Sub Demo()
Const InverseFFT As Boolean = True
Const ForwardFFT As Boolean = False
Const NoLabels As Boolean = False
Const Labels As Boolean = True
Const FFT As String = "ATPVBAEN.XLAM!Fourier"
Static bInitialized As Boolean
'Die nächsten 4 Zeilen stellen sicher, dass das Analyse Toolpack nicht mindestens einmal _
per Hand
'vor Codeausführung gestartet worden sein muss.
If Not bInitialized Then
Workbooks.Open Application.LibraryPath & "\analysis\procdb.xlam"
bInitialized = True
End If
Run FFT, _
ActiveSheet.Range("$F$21:$F$28"), _
ActiveSheet.Range("$G$21:$G$28"), _
ForwardFFT, _
NoLabels
End Sub
Dieses als erstem Schritt, denn eine Sub ist keine Funktion. Immerhin liest sie meine Daten aus dem Bereich F21:F28 ein und gibt die Fouriertransformation wie gewünscht in G21:B28 aus. Diesen Ablauf konnte ich sogar einer Schaltfläche zuweisen, da sich die Messdaten (in F) ändern können. Soweit so gut.
Nun wollte ich ja eine Funktion schaffen, der ich den Eingabebereich mit bspw. F21:F28 sowie einen Ausgabebereich bspw. mit H21:H28 übergebe.
Hier mein Code:
Option Explicit
Function DFFT(ByRef EingabeArray As Range, ByRef AusgabeArray As Range) As Range
Const InverseFFT As Boolean = True
Const ForwardFFT As Boolean = False
Const NoLabels As Boolean = False
Const Labels As Boolean = True
Const FFT As String = "ATPVBAEN.XLAM!Fourier"
Static bInitialized As Boolean
'Die nächsten 4 Zeilen stellen sicher, dass das Analyse Toolpack nicht mindestens einmal _
per Hand
'vor Codeausführung gestartet worden sein muss.
If Not bInitialized Then
Workbooks.Open Application.LibraryPath & "\analysis\procdb.xlam"
bInitialized = True
End If
'Dim AusgabeArray2 As Range
'Set AusgabeArray2 = AusgabeArray
'AusgabeArray = Range("$H$21:$H$28")
'Dim Zelle As Range
'For Each Zelle In AusgabeArray
' MsgBox Zelle.Address
' MsgBox Zelle.Value
'Next Zelle
Dim EingabeArray_FFT As Range
Dim AusgabeArray_FFT As Range
Set EingabeArray_FFT = EingabeArray
Set AusgabeArray_FFT = AusgabeArray
'Dim Zelle As Range
'For Each Zelle In EingabeArray_FFT
' MsgBox Zelle.Address
' MsgBox Zelle.Value
'Next Zelle
'Run FFT, _
ActiveSheet.Range.EingabeArray_FFT, _
ActiveSheet.Range.AusgabeArray_FFT, _
ForwardFFT, _
NoLabels
Run FFT, _
EingabeArray_FFT, _
AusgabeArray_FFT, _
ForwardFFT, _
NoLabels
'Set DFFT = AusgabeArray_FFT
End Function
Der Bereich F21:F28 enthält bspw. diese Daten:
0,353553391
0,353553391
0,646446609
1,060660172
0,353553391
-1,060660172
-1,353553391
-0,353553391
Wenn ich die Funktion DFFT bspw. in Zelle I21 mit =DFFT($F$21:$F$28;$H$21:$H$28) aufrufe, erhalte ich die Fehlermeldung #WERT! . In meinem Code könnt ihr in den auskommentierten Codezeilen sehen, was ich bisher ebenso erfolglos versucht habe. Selbst als ich =DFFT($F$21:$F$28;$H$21:$H$28) in den Zeilen I21 bis I28 als Arrayformel eingegeben hatte, erscheint #WERT! .
Mir gelingt es nicht, der Fourierfunktion des Analyse Toolpacks einen flexiblen Ein- wie Ausgabebereich zu übergeben. Ich muss etwas grundlegend falsch machen.
Ich hoffe auf Hilfe. Bin wie gesagt absoluter Anfänger in VBA, Excel ohne VBA kann ich ganz gut.
Liebe Greet-Ings Konstantin