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

Forumthread: Variable Spalten und Zeilen definieren

Variable Spalten und Zeilen definieren
08.08.2018 00:56:22
Tino
Hallo liebe VBA Profis
Ich habe eine Tabelle entworfen, die mir eine Verwaltungsübersicht gibt. Nun möchte ich eine Statistische Auswertung erreichen und bin mit meinem Latein fast am Ende.
Aufbau:
In Spalte E-G stehen bis zu drei Nummern von Karten, die in Spalte C ausgewählt werden können und in AA ändere ich den Status der Karte.
Bau der Blackbox (Aufzeichnung der Bewegung):
Die Kartennummer aus C nach BA oder wenn belegt nach BD, etc. kopieren.
BB und BC sowie BE und BF etc. müssen für Status und Datum der Bewegung frei bleiben. Wird in der Spalte E-G eine Nummer gelöscht, soll diese hinten stehen bleiben und den Status „Verlust“ bekommen.
Der Status der Karte wird in der Spalte AA gesetzt. Dieser soll nach BB, BE, etc. zur entsprechenden Karte kopiert werden und sich mit dem Status der Karte ändern.
Die Zelle BC wäre dann für das Datum gedacht, damit Excel erkennen kann, dass eine Karte auf BA oder BG etc. wieder auftaucht, nachdem sie in BD205 als „Verlust“ stand und diese dann wieder als „Zurück“ gebucht wird.
Alle Kartennummern, der Status und das Datum sollen in der Statistik gespeichert bleiben.
Am Ende will ich Zahlen ausgegeben bekommen, die ich als Statistik in ein Diagramm verpacken kann.
Die Schwierigkeit für mich ist, dass ich mit variablen Zeilen und Spalten arbeiten muss und nicht den richtigen Lösungsweg sehe.
Meine Test Mappe habe ich angehangen: https://www.herber.de/bbs/user/123194.xlsx
Kann mir bitte jemand helfen?
Vielen Dank im Voraus!
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable Spalten und Zeilen definieren
09.08.2018 04:22:35
Tino
Guten Morgen Zusammen,
da noch keiner meinen Beitrag kommentiert hat, habe ich mich nochmalig nachgedacht, wie es möglich ist die Daten zu speichern.
Mein Ansatz sieht wie folgt aus:
Private Sub Worksheet_Change(ByVal Target As Range)
'setzt das Datum für die Änderung in der Tabelle auf Spalte AH.
Dim rngz As Range
Dim rngzy As Range
Dim lngLetzte As Long
On Error GoTo Ende
Application.EnableEvents = False
If Target.Column = 27 Then
For Each rngz In Application.Intersect(Columns("AA:AA"), Target).Cells
rngz.Offset(0, 7).Value = Date
Next rngz
End If
'Kopiert die Nummer aus der aktiven Zelle in Spalte C nach BA in die nächste Freie Zelle
If Target.Column = 3 Then
lngLetzte = ActiveSheet.Cells(Rows.Count, "BA").End(xlUp).Row + 1
For Each rngzy In Application.Intersect(Columns("C:C"), Target).Cells
rngz.Offset(lngLetzte, 50).Value = Cells(rngzy, 3)
Next rngzy
End If
Ende:
Application.EnableEvents = True
End Sub
Leider habe ich keine Ahnung wo der Fehler liegt. Das Datum erscheint aber der Zweite Teil, also das kopieren der Zelle z.B. C13 in die Spalte BA führt es nicht durch. Wo habe ich einen Denkfehler oder fehlende Kenntnisse?
Bitte helft mir auf die Sprünge! Vielen Dank!
Anzeige
AW: Variable Spalten und Zeilen definieren
11.08.2018 21:30:35
Sandra
Hallo Tino
Ich weiß jetzt nicht, ob Sie den Fehler schon gefunden haben, jedoch müsste der Code
For Each rngzy In Application.Intersect(Columns("C:C"), Target).Cells
rngz.Offset(lngLetzte, 50).Value = Cells(rngzy, 3)
Next rngzy
wie folgt lauten
For Each rngzy In Application.Intersect(Columns("C:C"), Target).Cells
rngz.Offset(lngLetzte, 50).Value = Cells(rngzy.row, 3)
Next rngzy
Sie müssen die Endung .row für die Wertübernahme anfügen, weil dies sonst von Excel als .value interpretiert wird.
Gruss
Sandra
Anzeige
AW: Variable Spalten und Zeilen definieren
16.08.2018 12:40:37
Tino
Hallo Sandra,
vielen Dank für deine Antwort. Sry das ich heute erst schreibe aber die letzten Tage waren völlig zu.
Ich habe eine Lösung für das Kopieren aus Spalte C gefunden, welche mir sehr gut gefällt.
Hierdurch vermeide ich unnütze doppelte Werte aus C.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("C:C")) Is Nothing Or Target = "" Then Exit Sub
Cells(Cells(Rows.Count, 53).End(xlUp).Row + 1, 53) = Target.Cells.Offset(0, 38).Value
Cells(Cells(Rows.Count, 54).End(xlUp).Row + 1, 54) = Target.Cells.Offset(0, 39).Value
Cells(Cells(Rows.Count, 55).End(xlUp).Row + 1, 55) = Target.Cells.Offset(0, 40).Value
Cells(Cells(Rows.Count, 56).End(xlUp).Row + 1, 56) = Target.Cells.Offset(0, 41).Value
Cells(Cells(Rows.Count, 57).End(xlUp).Row + 1, 57) = Target.Cells.Offset(0, 42).Value
End Sub
Nach einem Gespräch mit meinem Kollegen ist mir aufgefallen das ich immernoch zuviele Daten sammel.
Nun möchte Ich prüfen ob in Spalte „AA“ der Wert Temp.Gesperrt oder der Wert Aktiv zu finden ist und erst dann Kopieren.
Mein Ansatz hierzu ist:
If Target.Cells.Offset(0, 24).Value = "Temp. Gesperrt" or “Active” Then
Und wie von mir schon fast erwartet tut sich nichts  wie müsste ich die Abfrage umbauen damit VBA es schluckt?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Variable Spalten und Zeilen in Excel definieren


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu starten.

  2. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Intersect(Target, Range("C:C")) Is Nothing Or Target = "" Then Exit Sub
       Cells(Cells(Rows.Count, 53).End(xlUp).Row + 1, 53) = Target.Cells.Offset(0, 38).Value
       ' Füge hier weitere Zellen hinzu, die du kopieren möchtest
    End Sub
  4. Datum automatisch setzen: Um das Datum zu setzen, kannst du Folgendes hinzufügen:

    If Target.Column = 27 Then
       For Each rngz In Application.Intersect(Columns("AA:AA"), Target).Cells
           rngz.Offset(0, 7).Value = Date
       Next rngz
    End If
  5. Fehlerbehandlung einfügen: Vergiss nicht, die Fehlerbehandlung einzufügen, um unerwartete Probleme zu vermeiden:

    On Error GoTo Ende
  6. Makro testen: Schließe den VBA-Editor und teste das Makro in deiner Excel-Tabelle.


Häufige Fehler und Lösungen

  • Fehler beim Kopieren: Wenn du beim Kopieren der Zellen einen Fehler erhältst, stelle sicher, dass du .Row wie folgt verwendest:

    rngz.Offset(lngLetzte, 50).Value = Cells(rngzy.Row, 3)
  • Datum wird nicht gesetzt: Prüfe, ob du die richtige Spalte für das Datum angegeben hast und ob die Application.EnableEvents-Einstellung korrekt verwendet wird.

  • Variable Spaltenüberschrift definieren: Wenn du eine Spaltenüberschrift dynamisch definieren möchtest, kannst du den Namen der Spalte in einer Variablen speichern und dann auf diese zugreifen.


Alternative Methoden

  1. Formeln verwenden: Anstatt VBA zu verwenden, kannst du auch mit Formeln arbeiten. Nutze die WENN-Funktion, um Bedingungen zu prüfen und Daten entsprechend zu kopieren.

  2. Pivot-Tabellen: Eine weitere Möglichkeit zur statistischen Auswertung sind Pivot-Tabellen, die dir helfen, Daten schnell zu aggregieren und zu analysieren, ohne VBA zu verwenden.


Praktische Beispiele

  • Beispiel für das Kopieren:

    Wenn du aus Spalte C nach BA kopieren möchtest, kannst du den folgenden VBA-Code verwenden:

    Cells(Cells(Rows.Count, 53).End(xlUp).Row + 1, 53) = Target.Cells.Offset(0, 38).Value
  • Statistische Auswertung:

    Um eine Statistik zu erstellen, kannst du die Werte in einer neuen Tabelle zusammenfassen und ein Diagramm erstellen.


Tipps für Profis

  • Verwendung von benannten Bereichen: Definiere benannte Bereiche in Excel, um den Code lesbarer zu machen, z.B. Kartennummern für Spalte C.

  • Code optimieren: Reduziere die Anzahl der Berechnungen, indem du Application.ScreenUpdating = False zu Beginn deines Codes hinzufügst und am Ende wieder auf True setzt.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um zu wissen, wo der Code möglicherweise fehlschlägt.


FAQ: Häufige Fragen

1. Wie kann ich in Excel eine Spaltenüberschrift definieren?
Du kannst eine Spaltenüberschrift in Excel definieren, indem du in die erste Zeile der gewünschten Spalte den entsprechenden Titel eingibst. Alternativ kannst du VBA verwenden, um dies dynamisch zu gestalten.

2. Wie definiere ich eine Variable in einer Excel-Formel?
In Excel kannst du eine Variable nicht direkt definieren, aber du kannst Namen für Bereiche oder Werte zuweisen, die dann in Formeln verwendet werden können.

3. Warum funktioniert mein VBA-Code nicht?
Überprüfe, ob die richtigen Referenzen gesetzt sind, und achte darauf, dass du die korrekten Zellreferenzen und Bedingungen verwendest. Debugging-Tools im VBA-Editor können dir helfen, Fehler zu identifizieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige