Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen

Bestimmte Tage auflisten | Herbers Excel-Forum


Betrifft: Bestimmte Tage auflisten von: hary
Geschrieben am: 19.01.2010 20:56:08

Einen schoenen guten Abend zusammen
Hab mal ein Formelfrage. In SpalteA sollen fuer's Jahr, jeweils monatlich der erste Freitag, der dritte Freitag und der dritte Sonntag, aufgelistet werden. siehe Beispiel
Mit einzel Formel kein Problem, aber geht es auch mit Formel kopierbar(runterziehen)??
Formel oder VBA ist egal.
Danke schon mal fuer's Gedanken machen.
Gruss hary

Tabelle1

 AB
1   
201.01.2010<-- 1.Freitag
315.01.2010<--2.Freitag
417.01.2010<--3.Sonntag
505.02.2010<-- 1.Freitag
619.02.2010<--2.Freitag
721.02.2010<--3.Sonntag
8usw. 

Tabellendarstellung in Foren


  

Betrifft: AW: Bestimmte Tage auflisten von: Christian
Geschrieben am: 19.01.2010 22:22:06

Hallo hary,

mit Unterstützung von http://www.excelformeln.de/formeln.html?welcher=187

als Ansatz:
Jahr steht in B1 Formel ab A1 eintragen:

=WERT(DATUM($B$1;GANZZAHL((ZEILE()-1)/3+1);1))-1-WOCHENTAG(DATUM($B$1;GANZZAHL((ZEILE()-1)/3+1);1) -WENN(REST(ZEILE();3)>0;5;7);3)+7*WENN(REST(ZEILE();3)=0;3;WENN(REST(ZEILE();3)=2;3;REST(ZEILE(); 3)))

MfG Christian


  

Betrifft: AW: Bestimmte Tage auflisten von: Daniel
Geschrieben am: 19.01.2010 22:24:46

Hi

hier mal als Ansatz, Ausgangspunkt ist die WAHL-Funktion in Verbindung mit Zeile und Rest, die Einzelnen Parameter musst du abhängig von der Startzeile noch anpassen.

da du die einzelformeln ja hast, brauche ich mir darüber keine Gedanken zu machen.

=WAHL(REST(ZEILE()-2;3)+1;Formel für ersten Freitag;A1+14;A1+2)
Gruß, Daniel


  

Betrifft: AW: Bestimmte Tage auflisten von: Josef Ehrensberger
Geschrieben am: 19.01.2010 22:44:24

Hallo Harry,

hier eine VBA-Lösung.

Sub DatumSpezial()
  Dim intIndex As Integer, intYear As Integer, intDay As Long, intMonth As Integer
  Dim vntDate() As Variant
  
  intYear = Application.InputBox("Bitte das gewünschte Jahr eingeben", "Datumsfolge", Year(Date), Type:=1)
  
  Redim vntDate(1 To 1)
  
  If intYear < 1 Or intYear > 3999 Then Exit Sub
  For intMonth = 1 To 12
    For intDay = 1 To 22
      If Weekday(DateSerial(intYear, intMonth, intDay), 2) = 5 Then
        Redim Preserve vntDate(1 To UBound(vntDate) + IIf(UBound(vntDate) = 1, 2, 3))
        vntDate(UBound(vntDate) - 2) = Clng(DateSerial(intYear, intMonth, intDay))
        vntDate(UBound(vntDate) - 1) = Clng(DateSerial(intYear, intMonth, intDay + 14))
        vntDate(UBound(vntDate)) = Clng(DateSerial(intYear, intMonth, intDay + 16))
        Exit For
      End If
    Next
  Next
  
  Range("A2").Resize(UBound(vntDate), 1) = Application.Transpose(vntDate)
End Sub



Gruß Sepp



  

Betrifft: @ Sepp - OT von: Beate Schmitz
Geschrieben am: 19.01.2010 22:58:35

Hallo Sepp,

schau bitte mal ins Inside-Forum von Online-Excel, oberster Beitrag.

Gruß,
Beate


  

Betrifft: vielen Dank ihr Drei owT Gruss hary von: hary
Geschrieben am: 19.01.2010 23:05:17

.


  

Betrifft: @ Josef E. von: Christian
Geschrieben am: 19.01.2010 23:47:53

Hallo Josef,

bei Deiner VBA-Lösung zeigt sich, das wenn der Monatserste auf Sa. oder So. fällt, das dann bereits der 2. Sonntag aufgelistet wird. Bitte nicht als bösgemeinte Kritik nehmen, aber da ich mich nun immer mehr an VBA rantaste, wüsste ich gerne warum, da ich den Code eigentlich recht schlüssig fand.

MfG Christian


  

Betrifft: AW: @ Christian von: hary
Geschrieben am: 20.01.2010 00:11:13

Hallo Christian
also bei mir zeigt es richtig an. Jedenfalls wie ich es brauche. 1.August ist ein Sonntag.

Tabelle2

 A
2306.08.2010
2420.08.2010
2522.08.2010

Tabellendarstellung in Foren


gruss hary


  

Betrifft: AW:LoL... von: hary
Geschrieben am: 20.01.2010 00:20:34

Hallo Christian
musste doch noch mal in Deine Formel schauen. Das passt nicht fuer meine Beduerfnisse ;-)))
Obwohl es doch richtig ist!!!!!!!
Hatte mich schlecht ausgedrueckt. T'schuldigung.Haette es so beschreiben sollen:
Jeden ersten und dritten Freitag ist unser Vereinsheim auf und am Sonntag nach dem dritten Freitag haben wir Vereinssitzung. da passt der VBA Code und Deine Formel im August nicht. Formel ist aber nicht umsonst geschrieben!!!!!

Tabelle1

 C
2206.08.2010
2320.08.2010
2415.08.2010

verwendete Formeln
Zelle Formel
C22 =WERT(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1))-1-WOCHENTAG(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1) -WENN(REST(ZEILE();3)>0;5;7);3)+7*WENN(REST(ZEILE();3)=0;3;WENN(REST(ZEILE();3)=2;3;REST(ZEILE(); 3)))
C23 =WERT(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1))-1-WOCHENTAG(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1) -WENN(REST(ZEILE();3)>0;5;7);3)+7*WENN(REST(ZEILE();3)=0;3;WENN(REST(ZEILE();3)=2;3;REST(ZEILE(); 3)))
C24 =WERT(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1))-1-WOCHENTAG(DATUM($H$1;GANZZAHL((ZEILE()-1)/3+1);1) -WENN(REST(ZEILE();3)>0;5;7);3)+7*WENN(REST(ZEILE();3)=0;3;WENN(REST(ZEILE();3)=2;3;REST(ZEILE(); 3)))

Tabellendarstellung in Foren


gruss hary


  

Betrifft: AW: @ Josef E. von: Josef Ehrensberger
Geschrieben am: 20.01.2010 00:14:44

Hallo Christian,

du hast rech, aber wie Harry schon sagte, braucht er es so.

Der grund dafür ist einfach erklärt. Immer wenn der 1. eines Monats auf Sa oder So fällt,
dann ist der 3. Sonntag vor dem 3. Freitag. Der folgende Code berücksichtigt das.

Sub DatumSpezial()
  Dim intIndex As Integer, intYear As Integer, intDay As Long, intMonth As Integer
  Dim vntDate() As Variant
  
  intYear = Application.InputBox("Bitte das gewünschte Jahr eingeben", "Datumsfolge", Year(Date), Type:=1)
  
  Redim vntDate(1 To 1)
  
  If intYear < 1 Or intYear > 3999 Then Exit Sub
  For intMonth = 1 To 12
    For intDay = 1 To 22
      If Weekday(DateSerial(intYear, intMonth, intDay), 2) = 5 Then
        Redim Preserve vntDate(1 To UBound(vntDate) + IIf(UBound(vntDate) = 1, 2, 3))
        vntDate(UBound(vntDate) - 2) = Clng(DateSerial(intYear, intMonth, intDay))
        vntDate(UBound(vntDate) - 1) = Clng(DateSerial(intYear, intMonth, intDay + 14))
        vntDate(UBound(vntDate)) = Clng(DateSerial(intYear, intMonth, intDay + IIf(intDay > 5, 9, 16)))
        Exit For
      End If
    Next
  Next
  
  Range("A2").Resize(UBound(vntDate), 1) = Application.Transpose(vntDate)
End Sub



Gruß Sepp



  

Betrifft: Sepp, danke für die Aufklärung!! o.T. von: Christian
Geschrieben am: 20.01.2010 00:17:30




  

Betrifft: AW: @ Josef E. Danke auch owT. von: hary
Geschrieben am: 20.01.2010 00:24:45

.


Beiträge aus den Excel-Beispielen zum Thema "Bestimmte Tage auflisten"