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
.
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: