Abfrage von Zeitreihe (ohne Wochenende) - Fehler bei Loop

Dieses Thema Abfrage von Zeitreihe (ohne Wochenende) - Fehler bei Loop im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von JonnyHeart, 16. März 2006.

Thema: Abfrage von Zeitreihe (ohne Wochenende) - Fehler bei Loop In Spalte A steht eine Zeitreihe OHNE Wochenendtage. In Zelle B1 soll ein Eingabefeld für ein Datum stehen, welches...

  1. In Spalte A steht eine Zeitreihe OHNE Wochenendtage. In Zelle B1 soll ein Eingabefeld für ein Datum stehen, welches im VBA-Code über die Range Funktion wie folgt ausgelesen werden soll :
    ----------------------------------------------------------------------------------------------------
    Dim da As Single

    i = 5

    Do Until Cells(i, 1) = Range(O14)

    i = i + 1

    Loop

    m = i

    For X = 1 To 12

    Cells(X, 19) = Cells(m, X)

    Next X

    End Sub

    Problem bei der Abfrage ist, wenn in Zelle B1 ein Datum eingegeben wird, welches nicht in Spalte A verfügbar ist.

    -> 12.03.2006 nicht drin da Sonntag
    13.03.2006
    14.03.2006
    15.03.2006
    16.03.2006

    Wie kann nun der Code dahingehend verändert werden dass entweder das Loopen abgebrochen wird sofern der Tag nicht gefunden wird bzw. dass sofern der TAG nicht gefunden wird - 1TAG gerechnet wird, sofern dieser nicht drin ist -2TAGE .

    Vielen Dank

    JONNY
     
  2. Hi.

    So würd ich das Lösen:

    Code:
    Sub aufruf()
    Dim dDate As Date
    Dim i As Integer
    Dim strTemp As String
    dDate = #3/18/2006#
    
    For i = 0 To 2
      strTemp = FindeDatum(dDate - i)
      If strTemp <>  Then
        MsgBox strTemp
        Exit For
      End If
    Next i
    
    End Sub
    
    
    
    Function FindeDatum(dSearchDate As Date) As String
    
    Dim rng As Range
      Set rngSearch = Worksheets(1).Range(a1:a30)
      Set rng = rngSearch.Find(dSearchDate)
      If rng Is Nothing Then
        FindeDatum = 
      Else
        FindeDatum = rng.Address
      End If
    End Function
    
    Gruß
     
  3. Vielen Dank für deinen Ansatz, leider klappt das bei mir nicht.

    Da ich noch VBA_NEWBIE bin bräuchte ich noch etwas Hilfe.

    Was muss ich bei deinem CODE verändern, dass er in meiner Excelfile läuft.

    Spalte A enthält bei mir die Datumswerte (ohne Wochenenden)

    Spalte B1 enthält das gesuchte Datum (bsp 19.03.2006 , welches händisch eingetragen wird
    -> Danach soll per Makro Spalte A nach dem Datum B1 durchsuchen.

    Sofern Datum nicht gefunden wird (wie in diesem Fall, da 19.03 = Sonntag, soll
    von diesem Datum 1 Tag abgezogen werden.

    a) ist dieser Tag (hier 18.03.2006) vorhanden - so endet die Suche

    b) wenn nicht wird nochmals um -1 Tag reduziert


    Da in diesem Fall 19.03 Sonntag und 18.03 Samstag ist wird der Code erst bei -2 Tage fündig.


    Die gefundene Zeile sieht in meinem Fall so aus :

    Zeile Spalte A B C D
    1 19.03.06
    2
    3
    4 17.03.2006 56 66 55



    MfG

    JONNYHEART
     
  4. Hallo,

    ich muss gestehen, dass gänzlich unkommentierter Code nicht nur für Newbies schwer zu verstehen ist.

    Ebenso das obige Beispiel. Allerdings werden nur die Zeilen 1-30 berücksichtigt.
    Einfach die Zeile Set rngSearch = Worksheets(1).Range(a1:a30) anpassen.

    Im Beispiel wird das Datum nicht aus B1 ausgelesen. Der Einfachheit halber steht es im Quellcode, in der Variablen dDate. Wenn dDate der Wert von B1 zugewiesen werden soll, würde das so aussehen:
    Code:
    If IsDate(Cells(1, 2).Value) Then 	'Prüfen ob in B1 wirklich ein Datum steht
      ddate = Cells(1, 2).Value		'Zuweisen
    End If
    
    Genau so läufts ;)
    Die Funktion FindeDatum gibt ein String mit der Zellenadresse zurück, wenn das entsprechende (= als Parameter übergebene) Datum gefunden wurde. Wenn es nicht gefunden wurde wird ein leerer String zurückgegeben.
    Weil ein leerer String nicht gewünscht ist (Wochenendproblem), wird in diesem Fall die Funktion nocheinmal aufgerufen, als Parameter wird das dDate-1 übergeben.
    Wenn immer noch kein Datum gefunden wurde (leerer Rückgabe-String), wird es mit dem Parameter dDate-2 versucht.

    Das Wochenendproblem wird im Code an dieser Stelle berücksichtigt
    Code:
    For i = 0 To 2				'Die Schleife soll max 3 mal durchlaufen werden
      strTemp = FindeDatum(dDate - i)	'Der Funktionsaufruf: In dDate ist das Datum(B1) gespeichert
      If strTemp <>  Then		'Der Rückgabewert ist nicht leer, d.h. ein Datum wurde gefunden
        MsgBox strTemp				'Ausgabe der Zellenadresse
        Exit For				'Verlassen der Schleife, das Datum wurde gefunden
      End If
    Next i
    'Bei einem Wochentag wird die Schleife nur ein mal durchlaufen (i=0)
    'Bei einem Samstag wird die Schleife zwei mal durchlaufen (i=1)
    'Bei einem Sontag drei mal (i=2)
    
    Ich hoffe Du kommst klar damit, wenn nicht sag noch mal Bescheid ;)
     
Die Seite wird geladen...

Abfrage von Zeitreihe (ohne Wochenende) - Fehler bei Loop - Ähnliche Themen

Forum Datum
Abfrage der Anmeldedaten bei Zugriff auf Netzlaufwerke Windows 7 Forum 30. März 2016
Abfrage des Speicherorts beim Download Web-Browser 22. Dez. 2015
Passwort abfrage nur nach Standby Windows 7 Forum 14. Mai 2015
Google Chrome Abfragebild Windows 7 Forum 22. Feb. 2015
Warum Paßwortabfrage nach 1,5 Jahren Windows 7 Forum 1. Feb. 2015