VBA zum Übertragen von Datum und Wert in Excel
Schritt-für-Schritt-Anleitung
Um die Werte aus einer Tabelle in ein Kalenderblatt zu übertragen, kannst Du den folgenden VBA-Code verwenden. Dieser Code geht davon aus, dass sich die relevanten Daten in "Tabelle1" und "Kalenderblatt" befinden.
- Öffne Excel und drücke
ALT + F11, um den VBA-Editor zu öffnen.
- Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
- Kopiere den folgenden VBA-Code in das Modul:
Sub GrundEintragen()
Dim wks1 As Worksheet, wksKal As Worksheet
Dim varName, varGrund, datStart As Date, datEnde As Date
Dim Zelle As Range
Dim Spalte As Long, Spa1 As Long, Spa2 As Long, Zeile As Long
Set wks1 = ActiveWorkbook.Worksheets("Tabelle1")
Set wksKal = ActiveWorkbook.Worksheets("Kalenderblatt")
With wks1
If .Range("C9") = "" Or .Range("D9") = "" Then
MsgBox "Ende-Datum oder Start-Datum ist nicht eingetragen"
Exit Sub
End If
varName = .Range("C7").Value
varGrund = .Range("E9").Value
datStart = .Range("C9").Value
datEnde = .Range("D9").Value
' Überprüfung der Datumswerte
If datEnde >= datStart Then
For Spalte = 4 To wksKal.Cells(1, wksKal.Columns.Count).End(xlToLeft).Column
If wksKal.Cells(1, Spalte).Value = datStart Then
Spa1 = Spalte
End If
If wksKal.Cells(1, Spalte).Value = datEnde Then
Spa2 = Spalte
Exit For
End If
Next
Zeile = Application.Match(varName, wksKal.Columns(1), 0)
If Zeile > 0 And Spa1 > 0 And Spa2 > 0 Then
With wksKal.Range(wksKal.Cells(Zeile, Spa1), wksKal.Cells(Zeile, Spa2))
If Trim(varGrund) = "" Then
.ClearContents
Else
.Value = varGrund
End If
End With
Else
MsgBox "Einer oder beide Datumswerte liegen außerhalb des Datumsbereiches im Kalenderblatt"
End If
End If
End With
End Sub
- Schließe den VBA-Editor und führe den Code aus, um die Werte zu übertragen.
Häufige Fehler und Lösungen
Alternative Methoden
Falls Du keine VBA-Lösungen verwenden möchtest, kannst Du auch Excel-Formeln nutzen, um ähnliche Ergebnisse zu erzielen. Zum Beispiel könntest Du die WENN-Funktion verwenden, um Bedingungen zu prüfen und entsprechende Werte einzutragen. Diese Methode erfordert jedoch mehr manuelle Arbeit und ist möglicherweise nicht so effizient wie VBA.
Praktische Beispiele
Nehmen wir an, Du hast folgende Daten in "Tabelle1":
- C7: "Max Mustermann"
- C9: "01.01.2018"
- D9: "05.01.2018"
- E9: "Urlaub"
Nach dem Ausführen des Makros wird im "Kalenderblatt" für "Max Mustermann" im Zeitraum vom 01.01.2018 bis 05.01.2018 in den entsprechenden Zellen "Urlaub" eingetragen.
Tipps für Profis
- Achte darauf, dass der Code auf die richtige Excel-Version abgestimmt ist; einige Funktionen könnten in älteren Versionen anders funktionieren.
- Verwende die
Option Explicit-Anweisung am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
FAQ: Häufige Fragen
1. Was ist, wenn das Startdatum und das Enddatum identisch sind?
Der VBA-Code wurde so angepasst, dass beim Startdatum gleich dem Enddatum die Daten korrekt übernommen werden.
2. Kann ich das Makro anpassen, um mehrere Zeilen gleichzeitig zu verarbeiten?
Ja, Du kannst eine Schleife einfügen, die über mehrere Zeilen iteriert, um die Werte für verschiedene Namen zu übertragen.