Geben Sie die Wochentage Mo – Fr in ein Arbeitsblatt mit VBA in Microsoft Excel ein

Anonim

In diesem Artikel erstellen wir ein Makro, um die Wochentage zwischen zwei Datumsangaben zu extrahieren.

In diesem Beispiel müssen wir Start- und Enddatum angeben, bevor das Makro ausgeführt wird. Das Makro wählt den Startdatumswert aus Zelle J8 und den Enddatumswert aus Zelle J9. Nach Angabe des Start- und Enddatums kann das Makro durch Drücken der Schaltfläche „Senden“ oder Drücken der Tastenkombinationen Alt + F8 ausgeführt werden.

Beim Ausführen des Makros gibt es Wochentage zwischen zwei Daten auf einem neuen Blatt zurück. Das neu eingefügte Arbeitsblatt enthält Wochentage in Spalte A, gefolgt vom entsprechenden Datum in Spalte B. Das Ausgabedatum in Spalte B wird im Format TT.MM.JJ.

Auf jede Woche folgt eine leere Zeile, um zwischen zwei aufeinanderfolgenden Wochen zu unterscheiden.

Logikerklärung

Im Makro haben wir die Wochentagfunktion verwendet, um zwischen Wochentagen und Wochenenden zu unterscheiden. Die Formatfunktion wird verwendet, um das Datum im gewünschten Format anzuzeigen.

Wochentagsfunktion

Die Funktion Wochentag gibt einen ganzzahligen Wert zurück, der den Wochentag darstellt.

Syntax

Wochentag( Date_Value, [First_Day_Of_Week] )

Datum_Wert gibt den Datumswert an, für den Sie den Wochentag suchen möchten.

Erster Tag der Woche gibt an, welcher Wochentag als erster Tag der Woche betrachtet werden soll. Als Eingabe wird ein ganzzahliger Wert oder der aus der FirstDayOfWeek-Enumeration gewählte Wert angenommen. Wenn kein Wert angegeben ist, wird FirstDayOfWeek.Sunday als Standardwert verwendet.

Aufzählungswert

Integer Wert

Bemerkungen

FirstDayOfWeek.System

0

Erster Wochentag in den Systemeinstellungen festgelegt

FirstDayOfWeek.Sonntag

1

Sonntag (Standard)

FirstDayOfWeek.Montag

2

Montag

FirstDayOfWeek.Tuesday

3

Dienstag

FirstDayOfWeek.Wednesday

4

Mittwoch

FirstDayOfWeek.Donnerstag

5

Donnerstag

FirstDayOfWeek.Friday

6

Freitag

FirstDayOfWeek.Samstag

7

Samstag

Wie aus dem Code des Makros hervorgeht, haben wir Weekday(i, 2) verwendet, um Montag als ersten Tag der Woche anzugeben.

Formatierungsfunktion

Die Funktion Format nimmt einen Datumsausdruck als Eingabe und gibt ihn als formatierten String zurück.

Syntax der Formatfunktion

Format(Datum_Wert,Format)

Datum_Wert gibt den Wert des Datumsdatentyps an.

Format verwendet den Zeichenfolgenwert, um anzugeben, welche Art von Datumsformat erforderlich ist.

Die folgende Tabelle definiert einige gängige Zeichen, mit denen Sie die erforderlichen Datums-/Uhrzeitformate erstellen können:

Charakter

Beschreibung

D

zeigt den Tag als Zahl ohne führende Null an (1 - 31)

dd

zeigt den Tag als Zahl mit führender Null an (01 - 31)

ddd

zeigt den Tag als Abkürzung an (So - Sa)

dddd

zeigt den Tag als vollständigen Namen an (Sonntag - Samstag)

w

zeigt den Wochentag als Zahl an (1 für Sonntag bis 7 für Samstag)

ww

zeigt die Woche des Jahres als Zahl an (1 - 54)

m

zeigt den Monat als Zahl ohne führende Null an (1 - 12)

mm

zeigt den Monat als Zahl mit führender Null an (01 - 12)

mmm

zeigt den Monat als Abkürzung an (Jan - Dez)

mmmm

zeigt den Monat als vollständigen Monatsnamen an (Januar - Dezember)

Q

zeigt das Quartal des Jahres als Zahl an (1 - 4)

ja

zeigt den Tag des Jahres als Zahl an (1 - 366)

yy

zeigt das Jahr als 2-stellige Zahl an (00 - 99)

yyyy

zeigt das Jahr als 4-stellige Zahl an (100 - 9999)

h

zeigt die Stunde als Zahl ohne führende Nullen an (0 - 23)

hh

zeigt die Stunde als Zahl mit führenden Nullen an (00 - 23)

n

zeigt die Minute als Zahl ohne führende Nullen an (0 - 59)

nn

zeigt die Minute als Zahl mit führenden Nullen an (00 - 59)

S

zeigt die Sekunde als Zahl ohne führende Nullen an (0 - 59)

ss

zeigt die Sekunde als Zahl mit führenden Nullen an (00 - 59)

Um am Ende jeder Woche eine leere Zeile zu lassen, haben wir mit der Wochentagsfunktion auf Sonntage geprüft und den Wert der Variablen „StartingRow“ um 1 erhöht, damit die nächste Zeile leer bleibt.

Wie im Code des Makros zu sehen ist, haben wir die Format-Funktion zweimal auf unterschiedliche Weise verwendet. Erstens haben wir Format(i, "ddd") verwendet, um den Wochentag zu erhalten, und zweitens haben wir Format(i, "dd.mm.yy") verwendet, um das Datum im Format dd.mm.yyyy zu erhalten.

Codeerklärung

Dim NewWorksheet As Worksheet

Set NewWorksheet = Worksheets.Add

Der obige Code wird verwendet, um den Namen des Worksheet-Objekts als "NewWorksheet" zu deklarieren. Die Methode Worksheets.Add wird verwendet, um das neue Arbeitsblatt der Worksheets-Auflistung hinzuzufügen. Die Set-Anweisung wird verwendet, um das deklarierte Objekt mit dem neu eingefügten Blatt zu initialisieren.

For i = StartDate To EndDate

Die FOR-Schleife wird verwendet, um vom Startdatum bis zum Enddatum zu durchlaufen.

Wenn Wochentag(i, 2) < 6 Dann

Die IF-Anweisung wird verwendet, um die Bedingung zu überprüfen und den Code basierend auf der Bedingung auszuführen. Die obige Bedingung prüft die Wertrückgabe durch die Wochentagfunktion. Wenn er kleiner als 6 ist, gibt die IF-Bedingung true zurück und der Code in der IF-Anweisung wird ausgeführt. Andernfalls wird es übersprungen.

Startreihe = 1

StartReihe = StartReihe + 1

Die Variable StartingRow wird verwendet, um sich durch die Zeilen auf dem Arbeitsblatt zu bewegen. Zu Beginn wird die Variable auf die erste Zeile initialisiert. Bei jeder erfolgreichen Ausführung der IF-Anweisung wird der Variablenwert um 1 erhöht und in die nächste Zeile im Arbeitsblatt verschoben.

Zellen(StartingRow, 1)

Cells-Eigenschaft wird verwendet, um auf eine bestimmte Zelle im Arbeitsblatt zu verweisen. Cells(row_number,column_number) kann verwendet werden, um auf eine beliebige Zelle im Arbeitsblatt zu verweisen, indem eine bestimmte Zeilennummer und Spaltennummer als Parameter eingegeben werden. Im Code Cells(StartingRow, 1) gibt 1 die erste Spalte an und die Variable „StartingRow“ definiert die Zeilennummer.

Man kann die Codes leicht verstehen, da ich Kommentare zusammen mit Codes in das Makro eingefügt habe.

Bitte folgen Sie unten für den Code

 Option Explicit Sub ExtractWeekdays() 'Zwei Variablen vom Datentyp Datum deklarieren Dim StartDate As Date, EndDate As Date 'Arbeitsblattvariable deklarieren Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Startdatum- und Enddatumswerte aus dem Arbeitsblatt StartDate = Sheets( "Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Value 'Initialisieren der Startzeilennummer für die Ausgabe StartingRow = 1 'Einfügen eines neuen Arbeitsblatts Set NewWorksheet = Worksheets. Add For i = StartDate To EndDate 'Verwenden der Weekday-Methode, um zu überprüfen, ob es sich um einen Wochentag oder eine Woche handelt und If Weekday(i, 2) < 6 Then 'Wert in neu eingefügtem Arbeitsblatt einfügen 'Format-Methode wird zum Formatieren des Datumswerts verwendet NewWorksheet.Cells( StartingRow, 2) = Format(i, "dd.mm.yy") NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd") 'StartRow-Variablenwert wird aktualisiert, um in die nächste Zeile zu wechseln StartingRow = StartingRow + 1 End If 'Einfügen einer leeren Zeile für das Wochenende If Weekday(i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Set NewWorksheet = Nichts End Sub 

Wenn Ihnen dieser Blog gefallen hat, teilen Sie ihn mit Ihren Freunden auf Facebook. Außerdem können Sie uns auf Twitter und Facebook folgen.

Wir würden uns freuen, von Ihnen zu hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns auf der E-Mail-Site