620 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (769 Punkte)

Guten Tag brauche eure Hilfe, habe in Excel in Spalte N1 das Datum (z.B. 01.01.2023) und in Spalte B3 die Formel =N1 und in Spalte B31 die Formel =B3+1 usw. Nun soll, wenn ich in Spalte B1 das Datum (z.B. 2.1) eingebe der Cursor in die Spalte B31 springen und ganz nach oben scrollen.

Danke.

11 Antworten

0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)

Hi Jelena,

Das würde ich nicht machen. Das kann den Anwender verwirren. Dieser denkt am Ende noch er hätte sich vertippt, weil in B31 ein anderes Datum drinsteht als er eingegeben hat und B31 nun an der Stelle steht wo eben noch B1 war. Schlimmstenfalls überschreibt er dann die Formel in B31 mit einem neuen Fix-Datum.

Technisch ist das allerdings durchaus möglich. Wenn du alleiniger Anwender bist und weißt was du tust, dann gib in das Tabellenmodul, das deiner Tabelle entspricht diesen Code ein:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B1")) Is Nothing Then
    Range("B31").Select
    ActiveWindow.ScrollRow = 31
  End If
End Sub

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (769 Punkte)
Danke für die schnelle Antwort, aber es soll das Datum in Spalte B1 aus Spalte B3:B900 gefunden werden und zu dieser Spalte springen (nichts überschreiben) und ganz nach oben scrollen.
0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)

Hi Jelena, aktuell macht der Code genau das, was du in deiner Frage beschrieben hast. Wenn in B1 ein Datum eingegeben wird, dann springt er zu B31 und scrollt die Zeile 31 nach oben. Ich hab allerdings überlesen, dass du die Eingabe in N1 machst. Ersetzte also im Code B1 durch N1 und es sollte klappen.

Was meinst du mit: 

es soll das Datum in Spalte B1 aus Spalte B3:B900 gefunden werden

Davon war in deiner Frage nichts zu lesen. Laut deiner Beschreibung müsste im Bereich B3:B900 alle Datumsangaben (außer B3) größer als das Eingabedatum sein. Was soll da genau gefunden werden?

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (769 Punkte)
Bearbeitet von jelena

Hallo K. habe zum besseren Verständnis eine Datei hochgeladen. Das Datum steht in Zelle N1 und in Spalte B3 mit Formel =N1 und danach in B31 die Formel =B3+1 und später in B59 die Formel =B31+1 usw. das Tagesdatum befindet sich bis B869. Also wenn ich in Zelle B1 (z.B. das Datum 20.3) eingebe soll das Datum 20.3 gesucht und ganz nach oben gescrollt werden. Danke

0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)
Bearbeitet von xlking

Hi Jelena,

In diesem Fall empfehle ich folgenden Code im Tabellenmodul:

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range
  If Not Intersect(Target, Range("B1")) Is Nothing Then
    Set rng = Range("B2:B1000").Find(Format(Target, "dd""/""mm"), LookIn:=xlValues)
    If Not rng Is Nothing Then
      rng.Select
      ActiveWindow.ScrollRow = rng.Row
    End If
  End If
End Sub

Auf die Zeile rng.Select kannst du auch verzichten (Einfach wieder löschen, wenn du sie nicht brauchst)

Gruß Mr. K.

0 Punkte
Beantwortet von jelena Mitglied (769 Punkte)

Hallo K. Danke aber dieser Code bewirkt nichts. Kann das sein weil in Spalte B3 bis B1000 die Formel z.B. =N1 und =B3+1 und =B31+1 für das Datum eingetragen ist. Die Zelle N1 ist als Datum formatiert.

0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)
Bearbeitet von xlking
Bei mir hats geklappt. Ich hab allerdings auch mit vollständigen Datumsangaben wie 05.03.2023 gearbeitet. Bei Datumsteilen wie in deinem Fall scheint Range.Find Probleme zu haben. Hab den Code aus Antwort 5 nochmal minimal angepasst (siehe oben). Damit sollte es auch bei dir gehen.

Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo K. vielen Dank jetzt klappt es auch bei mir. Danke
0 Punkte
Beantwortet von
Bearbeitet von mickey

Hallo K. bitte schon wieder um Hilfe anstatt .Find(Format(Target, "dd""/""mm") Find ddd dd mm  habe das Format in B3:B869 geändert in ddd dd mm in Zelle B1 wird immer das Datum z.B. 20.3 eingegeben. Danke

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range
  If Not Intersect(Target, Range("B1")) Is Nothing Then
    Set rng = Range("B3:B869").Find(Format(Target, "dd""/""mm"), LookIn:=xlValues)
    If Not rng Is Nothing Then
      'rng.Select
      ActiveWindow.ScrollRow = rng.Row
    End If
  End If
End 

*Admininfo: Bitte stelle dieselbe Anfrage nicht in verschiedenen Threads

0 Punkte
Beantwortet von xlking Experte (1.6k Punkte)
ausgewählt von mickey
 
Beste Antwort

Hi Jelena,

Wie gesagt, scheint Range.Find mit Datumsformaten so seine Problemchen zu haben. Auch Microsoft ist halt nicht vor Bugs gefeit. Soweit ich weiß, gibt's für VBA auch keine Updates mehr. Müssen wir halt mit leben und andere Alternativen suchen.

Eine Alternative wäre z.B. die Match-Funktion. Der ist es egal, welches Datumsformat angezeigt wird, da sie nach der dahinterliegenden Zahl sucht. Probiers also mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, lng
  If Not Intersect(Target, Range("B1")) Is Nothing Then
    lng = Application.Match(Target, Range("B3:B869"), 0)
    If Not IsError(lng) Then
      'Range("B3:B869").Cells(lng).Select
      ActiveWindow.ScrollRow = Range("B3:B869").Cells(lng).Row
    End If
  End If
End Sub

Gruß
Mr. K.

...