Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Datum und Wert in Tabelle übertragen

VBA Datum und Wert in Tabelle übertragen
13.02.2018 17:53:11
Zoschke
Hallo!
Folgendes möchte ich realisieren.
In der Tabelle 1 steht in Zelle C7 ein Name, in der Zelle C9 ein Startdatum in Zelle D9 ein Enddatum und in Zelle E9 der Grund (z.B. ur).
In Tabelle 2 (Kalenderblatt) stehen in der 1 Spalte (ab Zeile 2) die Namen, in der ersten Zeile ab D1 das Datum vom 1.1.2018 bis 31.12.2018.
Nun soll per VBA die Werte aus dem Tabellenblatt 1 übertragen werden, dh. das im Kalenderblatt beim entsprechenden Namen der Grund vom Startdatum bis Enddatum eingetragen wird.
Ich hoffe es kann mir jemand helfen.
Stefan
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Datum und Wert in Tabelle übertragen
13.02.2018 20:31:12
fcs
Hallo Stefan,
etwa wie nachfolgend.
Die Blattnamen musst du ggf. anpassen.
Gruß
Franz
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
If datEnde  0 And Spa2 > 0 Then
With .Range(.Cells(Zeile, Spa1), .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

Anzeige
AW: VBA Datum und Wert in Tabelle übertragen
14.02.2018 11:16:35
Zoschke
Moin Moin Franz!
Danke für die schnelle Bearbeitung.
Das ist genau das was ich gesucht habe.
Stefan
AW: VBA Datum und Wert in Tabelle übertragen
14.02.2018 13:09:25
Stefan
Noch mal Hallo zum Thema!
Nach ausführlichem Testen ist mir aufgefallen, das wenn Startdatum = Enddatum ist, nichts eingetragen wird. Sondern die MsgBox "Einer oder beide Datumswerte.....".
Wo und welchen zusätzlichen VBA Code muss ich einfügen, damit die Daten Startdatum =Enddatum übernommen werden?
Stefan
Anzeige
AW: VBA Datum und Wert in Tabelle übertragen
14.02.2018 15:31:49
fcs
Hallo Stefan,
hier der Makro-Abschnitt mit der nötigen Ergänzung
            For Spalte = 4 To .Cells(1, .Columns.Count).End(xlToLeft).Column
If .Cells(1, Spalte).Value = datStart Then
Spa1 = Spalte
End If
If .Cells(1, Spalte) = datEnde Then
Spa2 = Spalte
Exit For
End If
Next

Gruß
Franz
Anzeige
AW: VBA Datum und Wert in Tabelle übertragen
15.02.2018 08:47:32
Stefan
Moin Moin Franz!
Daaaaanke!
Stefan

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

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.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.
  3. 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
  1. Schließe den VBA-Editor und führe den Code aus, um die Werte zu übertragen.

Häufige Fehler und Lösungen

  • Fehler: "Ende-Datum oder Start-Datum ist nicht eingetragen"

    • Lösung: Stelle sicher, dass die Zellen C9 und D9 in "Tabelle1" ausgefüllt sind.
  • Fehler: "Einer oder beide Datumswerte liegen außerhalb des Datumsbereiches im Kalenderblatt"

    • Lösung: Überprüfe, ob die Datumswerte in den Zellen D9 und C9 innerhalb des Datumsbereichs in der ersten Zeile des "Kalenderblatts" liegen.

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige