Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1032to1036
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

Runde Geb.

Runde Geb.
28.12.2008 17:06:17
ABO
Hallo Excel Profis,
ich habe folgendes Macro:
Function GebRund(gebDate As Range) As Variant If Not IsDate(gebDate.Value) Or IsNull(gebDate.Value) Then GebRund = Null Exit Function End If Select Case Year(Now) - Year(gebDate.Value) 'Case Is 90 GebRund = "X" 'Gibt ein "X" aus 'GebRund = Year(Now) - Year(gebDate.Value) 'Gibt das Alter aus 'GebRund = Year(gebDate.Value) 'Gibt das Geburts-Jahr aus End Select End Function


Ich würde es gerne in soweit verändern, das ich nicht von dem jetzigen Datum ( Select Case Year(Now)) ausgehe, sonder das ich ein Datum auswählen kann.
Ich hoffe es kann mir jemand weiterhelfen,
mfg ABO

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Runde Geb.
28.12.2008 17:13:27
Ramses
Hallo
Verweise auf eine Zelle in die du NUR das Jahr, z.B. 2010, schreibst
Select Case Range("A1") - Year(gebDate.Value)
Im Beispiel muss das Jahr in A1 stehen.
Alles andere macht keinen Sinn, da dies eine Funktion ist und sonst sooft auswählen müsstest, wie du die Funktion in deiner Tabelle verwendest.
Gruss Rainer
AW: Runde Geb.
28.12.2008 17:34:13
ABO
Hallo Rainer,
erst einmal danke für deine schnelle Antwort!
Deine Antwort kann ich nachvollziehen.
Besteht denn irgendwie die Möglichkeit eine Liste aus einer Gesamt-Liste zu erstellen (neues Tabellenblatt)?
Das heißt ein neues Tabellenblatt mit den Runden Geb. ab dem jetzigen Tag für die nächsten 365 Tage zu erstellen.
Gruß ABO
Anzeige
AW: Runde Geb.
28.12.2008 18:15:16
Ramses
Hallo
probier das mal aus
Sub Find_GebRund()
    'by Ramses
    'Erstellt Tabelle mit runden Geburtstagen
    'Variablen Deklaration
    Dim lastRow As Long, srcCol As Long, i As Long, tarRow As Long
    Dim Qe As Long
    Dim srcWks As Worksheet, tarWks As Worksheet
    Dim tarName As String, overWrite As Boolean
    'Name für Zieltabelle definieren
    tarName = "Geb. vom " & Format(Now, "dd.mm.yy") & " bis " & Format(Now, "dd.mm.yy")
    'Name der Quelltabelle mit den Geburtsdaten anpassen !!
    Set srcWks = Worksheets("Sheet1")
    overWrite = False
    'Prüfen ob die Tabelle schon existiert
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = tarName Then
            Qe = MsgBox("Die Tabelle für heute wurde schon erstellt." & vbCrLf & "Soll sie überschrieben werden ?", vbQuestion + vbYesNo, "Frage")
            If Qe = vbYes Then
                Worksheets(tarName).Cells.Clear
                overWrite = True
            Else
                '... Tabellenname mit Erweiterung "_X" erstellen
                tarName = tarName & "_" & Worksheets.Count
            End If
        End If
    Next i
    'Wenn die Tabelle noch nicht existiert...
    If overWrite = False Then
        '... dann neu erstellen
        Set tarWks = Worksheets.Add
        With tarWks
            .Name = tarName
            .Move after:=Worksheets(Worksheets.Count)
        End With
    Else
        'bzw. Variable auf Zieltabelle zuweisen
        Set tarWks = Worksheets(tarName)
    End If
    'Spalte mit den Geburtsdaten
    srcCol = 1
    'Letzten Eintrag in dieser Spalte bestimmen
    lastRow = srcWks.Cells(Rows.Count, srcCol).End(xlUp).Row
    'Erste Zeile der neuen Tabelle definieren
    tarRow = 1
    With srcWks
        '2 = Zeile wo die Daten beginnen
        For i = 2 To lastRow
            If IsDate(.Cells(i, srcCol)) Then
                'alle 5 jährigen über 50
                Select Case (Year(Now) - Year(.Cells(i, srcCol))) Mod 5
                    Case 0 And Year(Now) - Year(.Cells(i, srcCol)) >= 50
                        .Rows(i).Copy tarWks.Cells(tarRow, 1)
                        tarRow = tarRow + 1
                End Select
            End If
        Next i
    End With
End Sub

Gruss Rainer
Anzeige
AW: Runde Geb.
28.12.2008 18:46:01
ABO
Hallo Rainer,
Grundsätzlich funktioniert dein Macro!
Danke erst ein mal.
Kann mann dieses Makro noch von den Runden Geb. ändern?
Runde Geb.
50, 60, 65, 70, 75, 80, 85, 90
ab 90 jedes Jahr
Gruß ABO
AW: Runde Geb.
28.12.2008 18:47:18
ABO
Hallo Rainer,
Grundsätzlich funktioniert dein Macro!
Danke erst ein mal.
Kann mann dieses Makro noch von den Runden Geb. ändern?
Runde Geb.
50, 60, 65, 70, 75, 80, 85, 90
ab 90 jedes Jahr
Gruß ABO
AW: Runde Geb.
28.12.2008 19:02:00
Ramses
Hallo
Sub Find_GebRund()
    'by Ramses
    'Erstellt Tabelle mit runden Geburtstagen
    'Variablen Deklaration
    Dim lastRow As Long, srcCol As Long, i As Long, tarRow As Long
    Dim Qe As Long
    Dim srcWks As Worksheet, tarWks As Worksheet
    Dim tarName As String, overWrite As Boolean
    'Name für Zieltabelle definieren
    tarName = "Geb. vom " & Format(Now, "dd.mm.yy") & " bis " & Format(Now, "dd.mm.yy")
    'Name der Quelltabelle mit den Geburtsdaten anpassen !!
    Set srcWks = Worksheets("Sheet1")
    overWrite = False
    'Prüfen ob die Tabelle schon existiert
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = tarName Then
            Qe = MsgBox("Die Tabelle für heute wurde schon erstellt." & vbCrLf & "Soll sie überschrieben werden ?", vbQuestion + vbYesNo, "Frage")
            If Qe = vbYes Then
                Worksheets(tarName).Cells.Clear
                overWrite = True
            Else
                '... Tabellenname mit Erweiterung "_X" erstellen
                tarName = tarName & "_" & Worksheets.Count
            End If
        End If
    Next i
    'Wenn die Tabelle noch nicht existiert...
    If overWrite = False Then
        '... dann neu erstellen
        Set tarWks = Worksheets.Add
        With tarWks
            .Name = tarName
            .Move after:=Worksheets(Worksheets.Count)
        End With
    Else
        'bzw. Variable auf Zieltabelle zuweisen
        Set tarWks = Worksheets(tarName)
    End If
    'Spalte mit den Geburtsdaten
    srcCol = 1
    'Letzten Eintrag in dieser Spalte bestimmen
    lastRow = srcWks.Cells(Rows.Count, srcCol).End(xlUp).Row
    'Erste Zeile der neuen Tabelle definieren
    tarRow = 1
    With srcWks
        '2 = Zeile wo die Daten beginnen
        For i = 2 To lastRow
            If IsDate(.Cells(i, srcCol)) Then
                'alle 5 jährigen über 50
                Debug.Print (Year(Now) - Year(.Cells(i, srcCol))) Mod 5
                Debug.Print (Year(Now) - Year(.Cells(i, srcCol)))
    
                Select Case (Year(Now) - Year(.Cells(i, srcCol))) Mod 5
                    Case 0 And Year(Now) - Year(.Cells(i, srcCol)) >= 50
                        .Rows(i).Copy tarWks.Cells(tarRow, 1)
                        tarRow = tarRow + 1
                    Case Else
                        If Year(Now) - Year(.Cells(i, srcCol)) > 90 Then
                            .Rows(i).Copy tarWks.Cells(tarRow, 1)
                            tarRow = tarRow + 1
                        End If
                End Select
            End If
        Next i
    End With
End Sub

Gruss Rainer
Anzeige
AW: Runde Geb.
28.12.2008 17:27:52
Daniel
HI
du müsstest das Makro so erweitern, das Bezugdatum muss dann als 2 Parameter in der Funktion mit angegeben werden:

Function GebRund(gebDate As Range, Opional BezugsDatum as Date =0) As Variant
 if Bezugdatum = 0 then Bezugdatum = Now
If Not IsDate(gebDate.Value) Or IsNull(gebDate.Value) Then
...


im restlichen Code musst du noch alle "Now" durch "BezugsDatum" ersetzen.
durch Optional ist es nicht zwingend Erforderlich, das Bezugsdatum einzugeben
wenn du es weglässt, wird stattdessen das aktuelle Datum verwendet
Gruß, Daniel

Anzeige
AW: Runde Geb.
28.12.2008 17:54:00
Uwe
Hi,
ich hatte mir da was zurechtgebastelt, was in etwa Daniels Beschreibung entspricht, allerdings ohne das Optional (kann man ja noch einbauen):

Function GebRund(gebDate As Range, intRefJahr As Integer) As Variant
If Not IsDate(gebDate.Value) Or IsNull(gebDate.Value) Then
GebRund = Null
Exit Function
End If
Select Case intRefJahr - Year(gebDate.Value)
Case 50, 60, 65, 70, 75, 80, 85, 90
'GebRund = "X"                                  'Gibt ein "X" aus
GebRund = intRefJahr - Year(gebDate.Value)     'Gibt das Alter aus
'GebRund = Year(gebDate.Value)                  'Gibt das Geburts-Jahr aus
Case Is > 90
'GebRund = "X"                                  'Gibt ein "X" aus
GebRund = intRefJahr - Year(gebDate.Value)     'Gibt das Alter aus
'GebRund = Year(gebDate.Value)                  'Gibt das Geburts-Jahr aus
Case Else
GebRund = "-"
End Select
End Function


(Ich habe auch noch aus Case Sähe dann z.B. so aus:

 BCDE
1Geb.DatumJubiläum?im Jahr:2008
201.01.191692  
301.01.191890  
401.01.192385  
501.01.1930-  
602.01.193375  
701.01.194860  
801.01.1953-  
901.01.195850  
1001.01.1963-  
1101.01.1968-  

Formeln der Tabelle
ZelleFormel
C2=gebrund(B2;$E$1)
C3=gebrund(B3;$E$1)
C4=gebrund(B4;$E$1)
C5=gebrund(B5;$E$1)
C6=gebrund(B6;$E$1)
C7=gebrund(B7;$E$1)
C8=gebrund(B8;$E$1)
C9=gebrund(B9;$E$1)
C10=gebrund(B10;$E$1)
C11=gebrund(B11;$E$1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß
Uwe
(:o)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige