Werte in einer Kreuztabelle mithilfe von VBA füllen
Schritt-für-Schritt-Anleitung
Um die Werte in einer Kreuztabelle aus einer Lasttabelle mit VBA auszulesen und zu füllen, kannst du die folgenden Schritte befolgen. In diesem Beispiel gehen wir davon aus, dass du Excel 2016 oder höher verwendest.
- Öffne die Excel-Datei mit deiner Lasttabelle.
- Öffne den Visual Basic for Applications (VBA) Editor durch Drücken von
ALT + F11
.
- Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deinDateiname)", dann "Einfügen" > "Modul".
- Kopiere und füge den folgenden VBA-Code ein:
Option Explicit
Const UhrZeit = "E4:K4" 'Uhrzeit Überschriftzeile
Sub Kreuztabelle_erstellen()
Dim DA As Object, AC As Object
Dim Datum As Date, Zeile As Long
Dim Zeit As Date, SZeit As Single
With Worksheets("Tabelle1 (2)")
.Range("C5:K10000").ClearContents
Zeile = 4 'Startzeile
For Each DA In Range("A5", [A5].End(xlDown))
If CDate(Mid(DA, 1, 10)) <> Datum Then
Zeile = Zeile + 1
Datum = CDate(Mid(DA, 1, 10))
Cells(Zeile, 4) = Datum
End If
Zeit = CDate(Mid(DA, 13, 8))
SZeit = CSng(Zeit)
For Each AC In Range(UhrZeit)
If AC.Value = SZeit Then
Cells(Zeile, AC.Column) = DA.Offset(0, 1)
Zeit = Empty: Exit For
End If
Next AC
If Zeit <> Empty Then DA.Offset(0, 2) = "Not Find"
Next DA
End With
End Sub
- Schließe den VBA-Editor und kehre zu Excel zurück.
- Führe das Makro aus: Gehe zu "Entwicklertools" > "Makros", wähle
Kreuztabelle_erstellen
und klicke auf "Ausführen".
Häufige Fehler und Lösungen
Alternative Methoden
Wenn du die Werte nicht über VBA füllen möchtest, kannst du auch Formeln verwenden. Eine mögliche Formel, um Werte in einer Kreuztabelle zu füllen, wäre:
=SVERWEIS($D5 + E$4; $A$4:$B$11; 2; WAHR)
Diese Formel sucht im angegebenen Bereich nach den entsprechenden Werten und kann auch in Verbindung mit bedingter Formatierung für Gantt-Diagramme verwendet werden.
Praktische Beispiele
Hier ist ein Beispielcode, der die Werte einer Lasttabelle in einer Kreuztabelle anzeigt:
Sub put_step1()
Dim ze1 As Long, ze2 As Long
ze1 = 5: ze2 = 5
Range("D5:CV3000").ClearContents
Cells(5, 4) = Cells(5, 1)
Do While Cells(ze1, 1) <> ""
If CDate(Left(Cells(ze2, 4), 10)) <> CDate(Left(Cells(ze1, 1), 10)) Then
ze2 = ze2 + 1
End If
Cells(ze2, 4) = CDate(Left(Cells(ze1, 1), 10))
ze1 = ze1 + 1
Loop
End Sub
Dieses Skript hilft dir, die Zeitstempel in einer neuen Zeile zu organisieren.
Tipps für Profis
- Verwende Arrays: Um die Leistung zu verbessern, kannst du die Daten in Arrays speichern und dann in einem Schritt in die Tabelle schreiben.
- Optimierung der Berechnung: Deaktiviere die automatische Berechnung während der Ausführung des Makros, um die Geschwindigkeit zu erhöhen:
Application.Calculation = xlCalculationManual
'... dein Code ...
Application.Calculation = xlCalculationAutomatic
- Debugging: Nutze
Debug.Print
, um Variablenwerte während der Ausführung des Codes zu überwachen.
FAQ: Häufige Fragen
1. Kann ich die Werte auch ohne VBA füllen?
Ja, du kannst Formeln wie SVERWEIS
oder INDEX
verwenden, um die Werte in einer Kreuztabelle zu füllen.
2. Wie kann ich die Geschwindigkeit meiner Makros verbessern?
Verwende Arrays, deaktiviere Bildschirmaktualisierungen und die automatische Berechnung während der Ausführung deiner Makros.
3. Was ist der Vorteil von VBA gegenüber Formeln?
VBA bietet mehr Flexibilität und kann komplexe Aufgaben schneller und effizienter erledigen, insbesondere bei großen Datenmengen.