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:
Zurück