Excel (Trendberechnung)

Alfred_

Erfahrenes Mitglied
Hallo, Vorweg, eine Feststellung: es hat sich nichts verändert! Man begegnet sich in den Foren durchwegs freundlich und hilfsbereit. Ich kenne dieses Forum schon seit langer Zeit, weshalb ich zu dieser Feststellung berechtigt bin. Mein Interesse an EDV hat sich - altersbedingt - etwas reduziert. Die nachfolgenden Code-Zeilen stammen noch aus grauer Vorzeit und zwar von einem ehem. "Tutorial - Experten. Leider wollte sich kürzlich ein Fake-Mail einnisten, womit eine Bankmitarbeiterin so ziemlich alle Tore kappte. Ergebnis: Chaos auf allen Ebenen. SQL Server 2017 war mit der Einführung von Win 11 zu kübeln. Was nun? Eine neu "Sprache" zu lernen oder sich mit der Excel - Funktion "TREND" auseinander zu setzen. Letzteres scheint mir zielführender zu sein.
Ich habe eine Spalte die Zahlen von 0 bis X aufweist. Ich hätte gerne eine Möglichkeit dass der Trendwert in einer Zelle z.B. "A2" aufscheint. Bisher waren meine Berührungen mit Excel spärlich, weil ich für meine "Haushaltsführung" nicht mehr Kenntnisse erforderte.
Daher meine Bitte um Unterstützung. Es geht mir nur um Excel. Sollte jemand Interesse an dem folgenden Code haben, dann würde es mich freuen und sicher auch jener Forumsteilnehmer der mir seinerzeit behilflich war.
Lg
Visual Basic:
    Private Sub Trend50berechnen(ByVal y As Integer)
        Dim myConn As SqlConnection = New SqlConnection("Data Source=DESKTOP-XXX\" &
        "SQLEXPRESS;Initial Catalog=YYYYY;Integrated security=SSPI")
        '-------------------------------------------------------------------
        Dim lMaxCount() As Double
        Dim trdwert As Double
        Dim mittelwert As Double, mitte As Double, a As Double, b As Double
        Dim max As Integer, i As Integer, n As Integer
        Try
            myConn.Open()
            Dim cmd1 As New SqlCommand("Select COUNT(*) From trd50_" & Format(y, "0#") & "", myConn)
            max = CInt(Format(CType(cmd1.ExecuteScalar, Integer), "##,##0"))
        Catch sqlExc As SystemException
            MessageBox.Show(sqlExc.ToString, "SQL Exception Error!",
            MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            myConn.Close()
        End Try
        '--------------------------------------------------------------
        If max > 2 Then
            Try
                myConn.Open()
                Dim com1 As New SqlCommand("Select * FROM trd50_" & Format(y, "0#") & " " &
                "ORDER BY Datum ASC", myConn)
                Dim da1 As New SqlDataAdapter(com1)
                Dim ds1 As New DataSet()
                da1.Fill(ds1, "trd50_" & Format(y, "0#") & "")
                Dim dt1 As DataTable = ds1.Tables("trd50_" & Format(y, "0#") & "")
                Dim row As DataRow
                mittelwert = 0 : mitte = 0 : a = 0 : b = 0 : n = 0
                n = max

                ReDim lMaxCount(max - 1)
                For Each row In dt1.Rows
                    lMaxCount(i) = CDbl(row!Wert)
                    mittelwert = mittelwert + Math.Log(lMaxCount(i))
                    i += 1
                Next

                mittelwert = mittelwert / max       'die durchschnittliche Eintragsnummer,

                mitte = (n - 1) / 2                 'um b bestimmen zu können.

                b = -mittelwert * mitte * n         'hier muss ein Minuszeichen hin.

                For i = 1 To n - 1
                    b = b + i * Math.Log(lMaxCount(i))
                Next i

                b = b / (n * (1 - 6 * mitte * mitte - 3 * n + 2 * n * n) / 6)
                b = Math.Exp(b)

                a = Math.Exp(mittelwert - (Math.Log(b) * mitte))
                'eingesetzt in die Formel, kann man dann den nächsten Eintrag voraussagen.... ;=))
                ReDim Preserve lMaxCount(n)
                lMaxCount(n) = a * b ^ n
                trdwert = lMaxCount(n)
                '//MessageBox.Show(CStr(lMaxCount(n)))
            Catch sqlExc As SystemException
                MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                myConn.Close()
            End Try
            '---------------------------------------------------------------
            Dim da As New SqlDataAdapter
            da = New SqlDataAdapter("Select * FROM statistik50 ORDER BY ZhgZl ASC", myConn)
            Dim cb As New SqlCommandBuilder(da)
            Dim dt As DataTable
            dt = New DataTable("statistik50")
            da.Fill(dt)
            myConn.Close()
            Try
                myConn.Open()
                For Each cRow As DataRow In dt.Rows
                    If CInt(cRow!ZhgZl) = y Then
                        cRow("trd") = trdwert
                    End If
                Next
                da.Update(dt)
            Catch sqlExc As SystemException
                MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                myConn.Close()
            End Try
            Erase lMaxCount
        Else
            myConn.Close()
            Exit Sub
        End If
    End Sub

.
 
Zuletzt bearbeitet von einem Moderator:
Hallo, es lässt mir keine Ruhe! Es geht mir um den obzitierte Code. Von Zeile 5. 6 bis 7 ist es kein Mirakel. Variable max hole ich mit von select count. Die Zeilen 21 bis 29 ist die erste Hürde. Von 33 bis 38 ist es die zweite Hürde. Der Rest ab 65 ist für mich entbehrlich.
Ich kann nur hoffen, dass man mir hilft.
Ich war sehr frustiert, als ich keine Nachricht erhielt. Es möge mir verzeihen werden, weshalb ich mich von diesem Forum abmeldete. Es war ein Fehler.
Lg
 
Ist das VBA-Code aus Excel? Wenn ja, dann hat sich da einiges geändert in letzter Zeit. Was ist das für eine Library mit den Sql-Klassen?

Zu deinen Hürden. Hast du da konkrete Fragen? Gibt es eine Fehlermeldung, ein Fehlverhalten?
Zeile 26. Was ist DataSet für eine Klasse? Was macht die? Dasselbe mit DataTable auf Zeile 28 etc.
Sprich du hast das ganz viele unbekannte Nicht-Excel Klasssen im Einsatz. Es ist schwer zu helfen, wenn alles voller Blackboxen ist.
 

Neue Beiträge

Zurück