Kann jemand raten, warum die Excel-Trend-Funktion (in VBA) gibt kein Ergebnis, wenn mit einem Array der Variante arbeiten und warum gibt es ein falsches Ergebnis beim Arbeiten mit einem Dim arr() als Integer Art von Array?Feed Arrays in Trend-Funktion in VBA, Ergebnisse falsch
Ich versuche, zwei Arrays mit y und x Werte in die Excel-Trend-Funktion zu füttern, um einen neuen y-Wert für einen neuen x-Wert zu erhalten. Die resultierenden Werte sind jedoch falsch. Es hat etwas damit zu tun, ein variant/integer-Array in die Excel-Funktion zu übergeben.
Ich erhalte eine Matrix über SQL, die Tag Werte in einer Spalte enthält und Zahlenwerte in einer anderen Spalte (es gibt mehrere Spalten mit Zahlenwerten, aber das ist hier nicht das Problem, also habe ich nur eine Spalte mit Zahlenwerten als ein Beispiel).
FMV_Day FMV_10000
365 65
548 63
730 61
913 59
1095 57
1278 55
1460 53
1643 51
1825 49
365 65
548 63
Ich verwende VBA, um die Werte aus der SQL-Abfrage in einem Array zu speichern. Ein Array für die Tage, ein Array für die Zahlenwerte. Die Arrays werden als "Dim Prozents() As Integer Dim Tage() As Integer" deklariert. Dies führt zu Ergebnissen, aber sie sind weit entfernt. Wenn ich die Arrays als "Dim-Werte als Variante" usw. deklariere, wird das Skript nicht ausgeführt und die folgende Fehlermeldung wird ausgegeben: "Die Trend-Eigenschaft der Worksheet-Funktionsklasse konnte nicht abgerufen werden." Der wichtigste Teil des Skripts sieht wie folgt aus ...
Hier ist ein Beispiel für die fehlerhaften Ergebnisse, die ich bekomme, wenn sie mit einem Array arbeiten, definiert als eine Integer-Array war:
Days-Array: 365, 548, 730, 913, 1095, 1278, 1460, 1643, 1825
Values-Array: 65, 63, 61, 58, 56, 54, 52, 50, 48
Age 126
Result from Trend_fnc 41.7662243865297
Das korrekte Ergebnis für das obige Beispiel wäre 67,75165. Dies wird von mir abgeleitet, indem ich einfach die gleichen Werte aus dem Array Tage und Werte in einem Excel-Tabellenblatt verwende und die Trendfunktion anwende.
EDITEDITEDIT
ich nicht Excel bin. Ich benutze ausschließlich Zugriff, um dieses Problem zu lösen, da alles andere von diesem ziemlich großen Skript im Zugriff ist und ich eine Datenbank abfrage.
Ok habe ich versucht, die Vorschläge und verändern die folgend in den beiden Do von oben Schleifen:
ReDim days(1 To intArraySize, 1 To 1)
und
ReDim value(1 To intArraySize, 1 To 1)
ich eine neue Dimension für das Array hinzugefügt. außerhalb des zulässigen Bereichs Fehler nicht wissen, was diese ... wie auch immer helfen sollte, jetzt bin ich ein Sub-Skript für Zeile verwendet
days(iCounter) = lrs1.Fields("FMV_" & mileage_element)
EDIT2 I
Debug.Print days(0) & ", " & days(1) & ", " & days(2) & ", " & days(3) & ", " & days(4) & ", " & days(5) & ", " & days(6) & ", " & days(7) & ", " & days(8)
Debug.Print values(0) & ", " & values(1) & ", " & values(2) & ", " & values(3) & ", " & values(4) & ", " & values(5) & ", " & values(6) & ", " & values(7) & ", " & values(8)
sicher, dass ich die Werte machen bekommen retrieve via sql sind korrekt und korrekt in das Array eingefügt. Alle Eingaben sind korrekt, aber die Trendfunktion vermasselt das Ergebnis. Ich glaube, es hat etwas mit dem Datentyp der Arrays zu tun, die in die Trendfunktion eingehen. Ich glaube, wenn ich einen Variant-Datentyp verwenden würde, würde dieser Fehler nicht passieren, aber ich bekomme einen weiteren Fehler, wenn ich versuche, ein Variant-Array in die Trend-Funktion einzugeben. "Die Trend-Eigenschaft der Worksheet-Funktionsklasse konnte nicht abgerufen werden."
Ich kann das nicht replizieren (obwohl ich denke, dass Ihr Ergebnis 67.75165 basierend auf diesen Werten sein sollte) - ich bekomme das gleiche Ergebnis in VBA wie in der Zelle. Welche Version von Excel verwenden Sie? – Rory
Ich baue diesen Code in Access, ich bin nicht mit Excel, ich benutze nur die Excel-Funktion .. Sowohl Excel und Access sind Version 2010 – jonas778
Sie haben Recht, ich verrechnet das Beispiel. Der wahre Wert sollte 67.75165 – jonas778