Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variablen Zuweisung nicht möglich

Variablen Zuweisung nicht möglich
05.01.2020 21:43:48
Hasty
Hallo liebes Forum,
heute bin ich auf ein Probelm gestoßen, welches ich zwar umgehen konnte, wobei ich aber immer noch nicht die genaue Ursache des Fehlers kenne. Vielleicht könnt ihr mir hier ja eine Begründung nennen.
Und zwar Folgendes:
Die Variablenzuweisung von "KJ1_Row", "KJ3_Row" und "KJ5_Row" wird nicht durchgefürht, die Variable bleibt also leer, obwohl ihnen eigentlich laut dem Debugger in der Step by Step Analyse ein Code zugewiesen wird.
Sobald ich jetzt die Variable Bezeichnung dahingehend ändere, dass sie nicht mehr mit "KJ" beginnt, funktioniert alles wie erwartet.
Könnt ihr mir sagen warum?
Folgender Code macht Probleme:

Sub neu()
K_Row_dyn = 7
K_LastRow = 3500
For Jahr = 1 To 5
If Jahr Mod 2  0 Then
For K_Row = K_Row_dyn To K_LastRow
If ActiveSheet.Cells(K_Row, 1) = ActiveSheet.Cells(7, 1) - Jahr * 365 Then
If Jahr = 1 Then
KJ1_Row = K_Row
ElseIf Jahr = 3 Then
KJ3_Row = K_Row
ElseIf Jahr = 5 Then
KJ5_Row = K_Row
End If
K_Row_dyn = K_Row
Exit For
ElseIf ActiveSheet.Cells(K_Row, 1) 

Danke und viele Grüße
Michael

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variablen Zuweisung nicht möglich
05.01.2020 22:04:54
onur
1) Wenn du mit Option Explicit arbeiten würdest, müsstest du deine Variablen auch mal dimensionieren und es würde auffallen, dass unten
KJ = K_Row steht statt KJ1_Row = K_Row.
2) Warum
For Jahr = 1 To 5
If Jahr Mod 2  0 Then

und nicht
For Jahr = 1 To 5 step 2

3) Für mehr musst du schon die Datei posten.
AW: Variablen Zuweisung nicht möglich
05.01.2020 22:11:21
Hasty
Hey Onur,
danke für den Hinweis mit step 2, hatte das im Eifer des Gefechts übersehen.
Dass unten nur KJ steht liegt daran, dass ich mit den Bezeichnungen herum experimentiert hatte und vergaß, es hier für das Forum rückgängig zu machen. Ändert aber nichts an dem Problem. Die Zuweisung funktioniert nämlich auch beim Namen "KJ" nicht.
Die ganze Datei darf ich leider nicht posten. Sie wäre ohnehin viel zu größ und unübersichtlich.
Anzeige
AW: Variablen Zuweisung nicht möglich
05.01.2020 22:14:21
onur
Du kannst eine Beispieldatei (genauso aufgebaut wie das Original) posten oder das Original anonymisieren.
AW: Variablen Zuweisung nicht möglich
06.01.2020 10:34:44
Zwenn
Hallo Hasty,
neben dem was onour schon geschrieben hat, erkläre mal den Unterschied zwischen den beiden folgenden Code-Blöcken:

If Jahr = 1 Then
KJ1_Row = K_Row
ElseIf Jahr = 3 Then
KJ3_Row = K_Row
ElseIf Jahr = 5 Then
KJ5_Row = K_Row
End If
K_Row_dyn = K_Row
Exit For
Und nach dem ElseIf:

If Jahr = 1 Then
KJ1 = K_Row
ElseIf Jahr = 3 Then
KJ3_Row = K_Row
ElseIf Jahr = 5 Then
KJ5_Row = K_Row
End If
K_Row_dyn = K_Row
Exit For
Da steht doch exakt das Gleiche. Was willst Du denn da unterscheiden? Mein Rat an dieser Stelle ist: Kommentiere Deinen Code, damit Du selber weißt, was Du da eigentlich machst.
Viele Grüße,
Zwenn
Anzeige
AW: Variablen Zuweisung nicht möglich
06.01.2020 11:42:38
Zwenn
Auch wenn ich nicht weiß, was Du erreichen willst, hier nochmal als konstruktiver Ansatz folgendes Makro. Wenn keine Werte zugewiesen werden, tippe ich darauf, dass die If-Bedingung nie zu True ausgewertet wird. Um das sehen zu können, muss man aber Deine Daten kennen, auf die geprüft wird.

Sub neu1()
Dim K_Row_dyn As Long
Dim K_LastRow As Long
Dim Jahr As Long
Dim k_row As Long
Dim KJ1_Row As Long
Dim KJ3_Row As Long
Dim KJ5_Row As Long
K_Row_dyn = 7
K_LastRow = 3500
Jahr = 1
Do
For k_row = K_Row_dyn To K_LastRow
If ActiveSheet.Cells(k_row, 1) 

Viele Güße,
Zwenn
Anzeige
AW: Variablen Zuweisung nicht möglich
06.01.2020 14:01:08
Hasty
Hallo zusammen,
nochmal vielen Dank für die Rückmeldungen. Ich hatte den Code gestern Nacht so runter geschrieben, wie er mir in den Kopf kam. Sorry für die Unübersichtlichkeit. Ich habe ihn jetzt noch mal etwas aufgeräumt. Das Problem allerings bleibt weiter bestehen:
Sub neu()
Dim K_Row As Integer 'Reihennummer ausgelesen aus Tabelle
Dim K_LastRow As Integer 'Letzte Reihe in Tabelle
Dim K_Row_dyn As Integer 'Dynamischer Startpunkt für FOR Schleife
Dim Jahr As Integer 'Betrachtungszeitraum, Jahr 1, Jahr 3 und Jahr 5
Dim KJ1_Row As Integer 'Reihe des Wertes aus Jahr 1
Dim KJ3_Row As Integer 'Reihe des Wertes aus Jahr 3
Dim KJ5_Row As Integer 'Reihe des Wertes aus Jahr 5
K_Row_dyn = 7
K_LastRow = 3500
For Jahr = 1 To 5 Step 2
For K_Row = 7 To K_LastRow
If ActiveSheet.Cells(K_Row, 1) 

Zum Hintegrund: Ich habe eine Tabelle mit Aktienkursdaten. In der ersten Spalte steht das Datum des Handelstags, in der zweiten der Wert der Schlußkurse. Diese Tabelle beinhaltet die historischen Kurzdaten der letzten 10 Jahre.
Ich möchte nun die Aktienkurs Volatilität für drei Zeiträume berechnen: 1 Jahr, 3 Jahre und 5 Jahres. Da die Volatilität im Grund nichts anderes ist als die Varianz der Rendite über zB. 1 Jahr, muss ich wissen, in welcher Zeile ich den Wert von vor einem Jahr (oder vor 3 bzw. vor 5 Jahren) finde.
Leider ist die Tabelle nicht vollständig. Feiertage sowie Wochenenden sind nicht enthalten. Wenn ich die Tabelle z.B. nach dem 01.01.2018 durchsuche, werde ich keine Werte finden.
Daher geht die FOR Schleife solange die Einträge durch bis ich das "aktuelle Datum minus 365 Tage" gefunden habe, oder ich auf den nächst kleineren Datumseintrag stoße. Diese Zeile verwende ich dann für die Berechnung der Varianz.
Diese Berechnung wiederhole ich für die Jahre 1, 3 und 5. Da ich die FOR Schleife nicht jedes mal wieder bei der ersten Reihe starten möchte, nutze ich die Variable "K_Row_dyn", um dort weiter zu machen, wo ich zuvor aufgehört habe.
Wie gesagt, der Code funktioniert, er macht im Grunde genaue das, was er soll. Nur halt nicht, wenn die Variable mit "KJ" beginnt. Aktuell arbeiter ich mit den Variablen-Bezeichnungen "K_J1_Row" und habe keinerlei Problem damit. Es stört mich auch nicht. Ich würde halt nur gerne den Grund herausfinden.
PS: Ich habe keine andere Variable die mit "KJ" beginnt.
Danke und viele Grüße
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige