Office: VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen

Helfe beim Thema VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Leute, versuche grad die Anzahl Tage der Monate von Jan - Dez in einem Arry abzulegen. Aber irgendwie ist in meinen Zeilen der Wurm drin.... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von jagga007, 28. Januar 2011.

  1. jagga007 Erfahrener User

    VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen


    Hallo Leute,

    versuche grad die Anzahl Tage der Monate von Jan - Dez in einem Arry abzulegen. Aber irgendwie ist in meinen Zeilen der Wurm drin.
    Vieleicht kann mir jemand auf die Sprünge helfen, hier meine Zeilen.

    Private Sub TageimMonat()
    Dim m As Integer, y As Integer, DaysInMonth As Integer, intMonat As Integer
    Dim ws As Worksheet


    Set ws = ActiveSheet

    ' define variable for number of the month
    For intMonat = 1 To 12
    m = intMonat
    Next intMonat
    ' define variable for the year
    y = Worksheets(1).Range("A1")
    DaysInMonth = DateSerial(y, m + 1, 1) - DateSerial(y, m, 1)

    MsgBox "Im Jahr " & y & " " & vbCrLf & vbCrLf & _
    "haben die Monate: " & vbCrLf & _
    DatumAlsText(m1) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m2) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m3) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m4) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m5) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m6) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m7) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m8) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m9) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m10) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m11) & " " & " " & "(" & DaysInMonth & ")" & " Tage " & vbCrLf & _
    DatumAlsText(m12) & " " & " " & "(" & DaysInMonth & ")" & " Tage "

    End Sub


    Function DatumAlsText(ByVal Monat As Byte) As String
    DatumAlsText = Format(CDate("1." & Monat & ".03"), "mmmm")
    End Function
     
    jagga007, 28. Januar 2011
    #1
  2. schatzi Super-Moderator
    Hallo!

    Bis auf den Februar (Schaltjahr) brauchst du doch die Tage eines Monats nicht errechnen! Sie stehen fest!!!
     
    schatzi, 28. Januar 2011
    #2
  3. Exl121150 Erfahrener User
    Hallo!

    Wenn Du wirklich die Anzahl der Monatstage ermitteln möchtest, sollte die SUB in etwa so lauten:

    Code:
    Sub TageimMonat()
      Dim m As Integer, y As Integer, intMonat As Integer
      Dim ws As Worksheet
      Dim DaysInMonth(1 To 12) As Integer
      
      Set ws = ActiveSheet
      ' define variable for the year
      y = Worksheets(1).Range("A1")
      
      ' define variable for number of the month
      For intMonat = 1 To 12
        m = intMonat
        DaysInMonth(m) = DateSerial(y, m + 1, 1) - DateSerial(y, m, 1)
      Next intMonat
        
      MsgBox "Im Jahr " & y & " " & vbCrLf & vbCrLf & "haben die Monate: " & vbCrLf & _
              DatumAlsText(1) & "   (" & DaysInMonth(1) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(2) & "   (" & DaysInMonth(2) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(3) & "   (" & DaysInMonth(3) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(4) & "   (" & DaysInMonth(4) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(5) & "   (" & DaysInMonth(5) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(6) & "   (" & DaysInMonth(6) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(7) & "   (" & DaysInMonth(7) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(8) & "   (" & DaysInMonth(8) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(9) & "   (" & DaysInMonth(9) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(10) & "   (" & DaysInMonth(10) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(11) & "   (" & DaysInMonth(11) & ")" & " Tage " & vbCrLf & _
              DatumAlsText(12) & "   (" & DaysInMonth(12) & ")" & " Tage "
              
      
    End Sub
    
    
    Function DatumAlsText(ByVal Monat As Byte) As String
      DatumAlsText = Format(CDate("1." & Monat & ".03"), "mmmm")
    End Function
    Der gravierendste Unterschied zu Deiner Version besteht darin, dass ich tatsächlich eine ARRAY-Variable namens "DaysInMonth" deklariert habe und diese in der FOR-NEXT-Schleife mit Werte befülle, die dann in der MsgBox angezeigt werden.

    Anmerkung: Anstelle der Funktion "DatumAsText" gibt es in VBA bereits eine vordefinierte Funktion "Monthname(Nr)", die exakt dasselbe bewirkt wie Deine Funktion.
     
    Exl121150, 28. Januar 2011
    #3
  4. Exl121150 Erfahrener User

    VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen

    Hallo!

    Die einfachste Version würde in etwa so lauten:
    Code:
    Option Explicit
    Option Base 1
    Sub TageimMonat()
      Dim y As Integer
      Dim ws As Worksheet
      Dim DaysInMonth As Variant
      
      Set ws = ActiveSheet
      y = ws.Range("A1")
      
      DaysInMonth = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
      If y Mod 4 = 0 Then If (y Mod 400 = 0) Or (y Mod 100 > 0) Then DaysInMonth(2) = 29
      
      MsgBox "Im Jahr " & y & " " & vbCrLf & vbCrLf & "haben die Monate: " & vbCrLf & _
              Monthname(1) & "   (" & DaysInMonth(1) & ")" & " Tage " & vbCrLf & _
              Monthname(2) & "   (" & DaysInMonth(2) & ")" & " Tage " & vbCrLf & _
              Monthname(3) & "   (" & DaysInMonth(3) & ")" & " Tage " & vbCrLf & _
              Monthname(4) & "   (" & DaysInMonth(4) & ")" & " Tage " & vbCrLf & _
              Monthname(5) & "   (" & DaysInMonth(5) & ")" & " Tage " & vbCrLf & _
              Monthname(6) & "   (" & DaysInMonth(6) & ")" & " Tage " & vbCrLf & _
              Monthname(7) & "   (" & DaysInMonth(7) & ")" & " Tage " & vbCrLf & _
              Monthname(8) & "   (" & DaysInMonth(8) & ")" & " Tage " & vbCrLf & _
              Monthname(9) & "   (" & DaysInMonth(9) & ")" & " Tage " & vbCrLf & _
              Monthname(10) & "   (" & DaysInMonth(10) & ")" & " Tage " & vbCrLf & _
              Monthname(11) & "   (" & DaysInMonth(11) & ")" & " Tage " & vbCrLf & _
              Monthname(12) & "   (" & DaysInMonth(12) & ")" & " Tage "
      
    End Sub
     
    Exl121150, 28. Januar 2011
    #4
  5. jagga007 Erfahrener User
    [Excel 2003] VBA In Arry die Anzahl Tage der Monate Jan - D

    Vielen vielen Dank Anton,

    auf die Funktion wäre ich jetzt nicht gekommen. Aber vielen herzlichen Dank für Dein Beispiel genau so wollte ich es haben.

    Gruß Jagga007 (Rudolf) :-D
     
    jagga007, 29. Januar 2011
    #5
  6. jagga007 Erfahrener User
    Hallo Anton beinahe hätt ich es vergessen.

    Kannst du mir erklären, warum du Option Base 1 verwendet hast. Soweit ich weiß, nutzt man diese um eine Untergrenze des Arrys zu definieren oder versteh ich da was falsch?

    Gruß Rudi
     
    jagga007, 29. Januar 2011
    #6
  7. Exl121150 Erfahrener User
    Hallo Rudolf!
    Das hast Du richtig verstanden. Wenn Du die Variable DaysInMonth anschaust, so ist diese äußerlich als VARIANT-Typ deklariert. Tatsächlich wird ihr ein paar Zeilen später mit der ARRAY(...)-Funktion ein Array zugewiesen. Dieses Array könnte nun bei den Indizes entweder mit 0 oder 1 beginnen. Da ich den Index bei 1 beginnen ließ (für Januar=1: DaysInMonth(1)=31), legte ich mit "Option Base 1" dies so fest.

    Würdest Du explizit oder implizit "Option Base 0" verwenden, müsste die Array-Zuweisung wie folgt lauten:
    DaysInMonth = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    um mit DaysInMonth(1)=31 zu erhalten.
     
    Exl121150, 29. Januar 2011
    #7
  8. Beverly
    Beverly Erfahrener User

    VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen

    Hi,

    es geht auch ohne Option Base 1, man nuss nur berücksichtigen, dass standardmäßig ein Array immer mit Feld 0 beginnt, da der Standard Option Base 0 ist:
    Code:
      MsgBox "Im Jahr " & y & " " & vbCrLf & vbCrLf & "haben die Monate: " & vbCrLf & _
              MonthName(1) & "   (" & DaysInMonth(0) & ")" & " Tage " & vbCrLf & _
              MonthName(2) & "   (" & DaysInMonth(1) & ")" & " Tage " & vbCrLf & _
              MonthName(3) & "   (" & DaysInMonth(2) & ")" & " Tage " & vbCrLf & _
              MonthName(4) & "   (" & DaysInMonth(3) & ")" & " Tage " & vbCrLf & _
              MonthName(5) & "   (" & DaysInMonth(4) & ")" & " Tage " & vbCrLf & _
              MonthName(6) & "   (" & DaysInMonth(5) & ")" & " Tage " & vbCrLf & _
              MonthName(7) & "   (" & DaysInMonth(6) & ")" & " Tage " & vbCrLf & _
              MonthName(8) & "   (" & DaysInMonth(7) & ")" & " Tage " & vbCrLf & _
              MonthName(9) & "   (" & DaysInMonth(8) & ")" & " Tage " & vbCrLf & _
              MonthName(10) & "   (" & DaysInMonth(9) & ")" & " Tage " & vbCrLf & _
              MonthName(11) & "   (" & DaysInMonth(10) & ")" & " Tage " & vbCrLf & _
              MonthName(12) & "   (" & DaysInMonth(11) & ")" & " Tage "
    
    Bis später,
    Karin
     
    Beverly, 29. Januar 2011
    #8
  9. jagga007 Erfahrener User
    Danke Anton und Karin, dann war ich ja auf dem richtigen Weg.

    Hätte da noch eine bitte an Euch.
    Da ich ja nun in Verbindung der Jahreszahl die einzelnen Monate deren Anzahl Tage ermitteln kann, ist nun folgendes Problem:

    Da ich ja einen Kalender erstellen will, was ja offensichtlich ist muß ich ein paar Berechnungen durchführen. Dieser Soll ein ein Designer Kalender werden wie ich ihn euch als pdf mal mitgesandt hab und dabei möchte ich, daß die Wochenenden wenn die Monate von A,B.. bis gehen auf gleicher Höhe sind wie in der pdf.
    Doch dazu muß ich wissen wieviel Tage jedes Monat hat und welcher Tag der Monatserste ist ob Mo,Die oder ... . um die einzelnen Monate und Tage so zu verschieben das ich dieses erreiche.

    Liege ich von der Logik her richtig oder falsch?

    Vieleicht gibt es hier schon ein kleines Tut, ansonsten muß ich halt versuchen entweder mit Tipps von Euch, meinen Gedachten roten Faden umzusetzen oder halt weiterkämpfen Schritt für Schritt.

    Dazu wäre dann folgende Frage:
    Wie kann ich an Hand meiner Sub in der MsgBox noch anfügen welcher Tag in Text kurz dieser besagte Monat hat?

    MsgBox "Im Jahr " & y & Schaltjahr(y) & " " & vbCrLf & vbCrLf & "haben die Monate: " & vbCrLf & _
    MonthName(1) & " (" & DaysInMonth(1) & ")" & " Tage " & "Der erste Tag des Monats ist der " & z.b 01.01.2011 & " und dieser ist ein " z.b. So

    Ihr seid schon heftig fit und vieleicht habt Ihr ja eine Lösung.

    Lg Rudolf
     
    jagga007, 31. Januar 2011
    #9
  10. Beverly
    Beverly Erfahrener User
    Hi,

    für die Ermittlung des Wochentages schau mal in die VBA-Hilfe zur Funktion Weekday.

    Übrigens - der 1. Tag eines Monats ist immer der 01.

    Bis später,
    Karin
     
    Beverly, 31. Januar 2011
    #10
  11. Exl121150 Erfahrener User
    Hallo Rudolf,

    beiliegende Excel-Datei enthält im Arbeitsblatt "Jahreskalender" ein Demobeispiel für einen Jahreskalender. Gibt man in der Zelle AA4 dieses Arbeitsblattes eine Jahreszahl zwischen 1 und 9999 ein, wird im Bereich B2:X39 der gewünschte Jahreskalender dargestellt, wobei die Sonntage und österreichischen Feiertage (inklusive Aschermittwoch, Gründonnerstag, Karfreitag und Karsamstag) rot eingefärbt werden.
    Die zugrunde liegende Datumsarithmetik umgeht die Beschränkung der Excel-Arbeitsblattdatumsarithmetik (erst ab 1.1.1900) und berücksichtigt in korrekter Weise den Julianischen Kalender, die Umstellung von Julianisch auf Gregorianisch, und natürlich den Gregorianischen Kalender, beginnend theoretisch beim Jahr 1 n.Chr. bis etwa zum Jahr 9999 n.Chr.
    Da in den einzelnen Ländern und Staaten der letzte Tag im Julianischen Kalender unterschiedlich ausfällt, kann man ihn in Zelle AA1 als Textdatumskonstante eingeben - vorgegeben ist das frühestmögliche Datum (Originaldatum der Gregorianischen Reform). Die Angaben in AA2 und AA5 werden automatisch ermittelt, obwohl in diesen Zellen keine Formel steht.

    Die Datei enthält 3 VBA-Module:
    1) Modul "ModDatum": enthält die Datumsarithmetik
    2) Modul "ModFeiertage": enthält Festlegung der Sonntagsbezeichnungen und der (österreichischen) Feiertage. Will man insbesondere für die Kalenderdarstellung andere Feiertage, so ist die in diesem Modul enthaltene Funktion "Function Feiertag(Datum$) As String" entsprechend anzupassen: im 1.Teil enthält sie die Feiertage mit fixem Kalenderdatum und im 2. Teil die Feiertage, die vom Ostersonntag abhängen.
    Will man für die folgenden 4 Tage (Aschermittwoch, Gründonnerstag, Karfreitag, Karsamstag) keine Rotfärbung im Kalender, so sind die betreffenden Tage aus der "Function Tagesbezeichnung(Datum$) As String" zu entfernen.
    3) Modul "ModJahreskalender": enthält die Steuerung zur Erzeugung des Jahreskalenders des Arbeitsblattes "Jahreskalender".

    Im Arbeitsblatt "Demos" ist eine Kurzbeschreibung der verwendeten Ostersonntagformel enthalten, die sowohl für Julianisches als Gregorianisches Ostern funktioniert (theoretisch erst ab dem Jahr 325 n.Chr. sinnvoll - Konzil von Nizäa). Darüberhinaus sind ein paar Demos der Datumsarithmetik enthalten.
    Die verwendete Ostersonntagsformel wird erklärt in:
    http://www.tondering.dk/main/index.php/calendar-information
    Sie wurde von mir etwas angepasst und vereinfacht.
     
    Exl121150, 31. Januar 2011
    #11
  12. jagga007 Erfahrener User
    Hallo Anton, Karin oder wer immer Lust hat zu helfen,

    dein Beispiel ist ja ganz schön heftig. So weit reicht meine Mathematik natürlich nicht. und wie lange und genau werden diese Berechnungen funktionieren?

    Da brauch ich mit Sicherheit eine ganz schöne Ecke Zeit um vieleicht, wenn überhaupt es zu schaffen, diesen umzubauen in einen der die Monate von links nach rechts und die Tage nach unten anzeigt. jedenfalls ein saftige Fleißaufgabe will man hier sowas Checken.

    Oder gibt es vieleicht ein Beispiel der das möglicherweise macht?

    Ich hab aber eine bitte, solltest du mal ein bisschen Luft haben denn es gibt ja genügend die Lernen wollen, dann wäre es toll wenn du mir in meinem Beispiel das ich mal mit sende und in den beiden Modulen jeweils ein Monat vervollstandigen könntest.

    Das es folgender Maßen aussieht.
    Beispiel Januar 2011
    Monat (Tage), erster Wochent= Nr. diesen Monats =, welcher Tag das ist
    Jan (31), erster Wochent= Nr. = , Sa ..

    Wäre toll wenn mir da jemand helfen würde.

    Liebe Grüße Rudolf
     
    jagga007, 1. Februar 2011
    #12
Thema:

VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen

Die Seite wird geladen...
  1. VBA In Arry die Anzahl Tage der Monate Jan - Dez ablegen - Similar Threads - VBA Arry Anzahl

  2. Datei in mehreren Ordnern suchen und wenn gefunden öffnen?! Macro / VBA

    in Microsoft Excel Hilfe
    Datei in mehreren Ordnern suchen und wenn gefunden öffnen?! Macro / VBA: Hallo Leute, Hoffentlich könnt ihr mir hier helfen, ich krieg den Syntax einfach nicht hin (wahrscheinlich ist es auch totaler käse den ich programmiert habe). Also im Grunde soll eine Datei...
  3. Textteile aus Zelle mit mehreren Absätzen

    in Microsoft Excel Hilfe
    Textteile aus Zelle mit mehreren Absätzen: Hallo, ich habe folgendes Problem: Ich habe in einer Liste in einer Zelle mehrere Angaben aus denen ich Textteile (z.B. alles was in () oder {} ist) herausziehen will, um damit weiter zurechnen....
  4. Aufrufen Datei aus SharePoint per VBA

    in Microsoft Access Hilfe
    Aufrufen Datei aus SharePoint per VBA: Wer kann mir helfen. In meiner Firma gibt es Dateien in diversen Ordner in Form von SharePoints, worauf alle Kolleginnen und Kollegen zugreifen kann. Dort habe ich eine Excel-Vorlage, worin die...
  5. VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.

    in Microsoft Excel Hilfe
    VBA: Spalten auf anderen Worksheeds in der Mappe ausblenden.: Hallo zusammen, Eine Tabelle mit 9 Worksheets, Datenblatt, Studien, Studie_1 ...Studie_7. Auf dem Deckblatt werden in Zelle B4-B10 die Namen der Studien eingetragen. Davon abhängig ob ein Name...
  6. VBA Zeilen kopieren mit Bedingung

    in Microsoft Excel Hilfe
    VBA Zeilen kopieren mit Bedingung: Hallo zusammen, Ich möchte per Makro Zeilen aus Tabelle2 in Tabelle3 kopieren, wenn eine Bedingung erfüllt ist. Bedingung: Der Wert in Spalte E (Tabelle2) kommt in Tabelle1 in Spalte E vor....
  7. VBA - Datensätze ans Ende einer anderen Tabelle kopieren

    in Microsoft Excel Hilfe
    VBA - Datensätze ans Ende einer anderen Tabelle kopieren: Hallo zusammen, ich habe gerade eine "Abrechnungs"-Datei für einen Kindergartenbasar erstellt. Es wäre klasse, wenn man per Schaltfläche die Datensätze aus der Tabelle "Kaeufer" ans Ende der...
  8. Laufzeitfehler 9 VBA

    in Microsoft Excel Hilfe
    Laufzeitfehler 9 VBA: Nschdem ich die Office Version von 2010 auf 2019 aktualisiert habe wird mir der Laufzeitfehler 9 ausgegeben. Das ist der Code Sub FiberCollect() Dim NumRows As Long 'letzte celle Dim Counter As...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden