Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte in erste freie Spalte einfügen

Werte in erste freie Spalte einfügen
Ralf
Hallo miteinander,
ich habe hier eine Mapppe in der ich in einer Tabelle alle Aktuell laufenden Aufträge sehe.
Durch einen Buttonklick komme ich auf die Tabelle des jeweiligen Auftrags (Tabellenname 1 -20).
Hier werden die jeweiligen Schichtleistungen eingegeben und in der Übersichtsseite kummuliert angezeigt.
Mit folgendem Makro wird von der Übersichtsseite nach Beendigung eines Auftrags die jeweiligen Daten des datugehörenden Auftrags gelöscht.
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    Sheets("2").Select
    Range("A1").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Momentan muss ich noch vor Makrostart die Spalten A2 bis T2 der aktuellen Tabelle (in denen die Leistungswerte des dann abgeschlossenen Auftrags stehen) von Hand ausschneiden und in die erste freie Zeile meiner Archivierungsliste (Tabellenname 'Liste' - Zielbereich auch A - T) einfügen.
    Was muss in das Makro, damit vor dem Löschen die Werte in die erste freie Zeile meiner Liste kopiert werden?
    Denke für einen Profi ist das kein Problem, ich stehe allerdings auf dem Schlauch.
    Vielen Dank im Voraus
    Ralf
    Anzeige

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Werte in erste freie Spalte einfügen
    08.12.2010 10:55:33
    marcl
    Hallo Ralf,
    hier mal ungetesteter Beitrag
    ' Auftragsblatt muss ausgewählt sein
    activesheet.range("A2:T2").copy
    sheets("Liste").select
    dim zeile as long
    zeile = activesheet.usedrange.rows.count ' findet die letzte verwendete Zeile im Blatt
    cells(zeile+1,1).select
    activesheet.paste
    gruß
    marcl
    Anzeige
    AW: Werte in erste freie Spalte einfügen
    08.12.2010 11:12:40
    Ralf
    Hallo marcl,
    danke für deine Antwort.
    Vom Ansatz richtig. Habs folgendermaßen eingebaut:
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("2").Select
    ActiveSheet.Range("A2:T2").Copy
    Sheets("Liste").Select
    Dim zeile As Long
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).Select
    ActiveSheet.Paste
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    Sheets("2").Select
    Range("A1").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Nur kopiert er die Formeln an die Stelle. Ich benötige die Werte.
    Hast du noch einen Tip ?
    Gruß Ralf
    Anzeige
    ohjeh, select select select select
    08.12.2010 11:23:18
    Matthias
    Hallo
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Range("B3:G3").ClearContents
    Das ist zu viel Wirrwarr mit den vielen Select
    Gruß Matthias
    Anzeige
    AW: ohjeh, select select select select
    08.12.2010 11:37:09
    Ralf
    Hallo Matthias,
    das sieht ja mal Übersichtlich aus.
    Weiß nur nicht, wo ich es reinpacken soll, da ich z.B. die Tabelle 'Liste' nirgends sehe.
    Gruß Ralf
    na einfach ersetzen ...
    08.12.2010 11:47:14
    Matthias
    Hallo
    Ich habe nur diesen Teil Deines Codes ersetzt
      zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).Select
    ActiveSheet.Paste
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    
    Du brauchst kein Select um Inhalte zu löschen, wenn Du das Tabellen richtig referenzierst.
    also anstatt
      Sheets("2").Select
    Range("A5:F300").ClearContents
    

    eben
     Sheets("2").Range("A5:F300").ClearContents
    
    Bin jetzt weg, Gruß Matthias
    Anzeige
    AW: na einfach ersetzen ...
    08.12.2010 13:57:06
    Ralf
    Vielen Dank Matthias,
    hat soweit geklappt. Nachdem ich noch eine letzte Änderung gemacht habe stehe ich wieder vor Problemen und werde das Projekt wohl doch aufgeben.
    Da ich auch die einzelnen Schichten archivieren will, kopiere ich diese in die Tabelle 'Auswertung'.
    Im Vorfeld weiß ich nicht wieviele Schichten vorhanden sind. Darum habe ich generel 100 Zeilen angesetzt, da ich nicht weiß wie die tatsächliche Anzahl abgefragt wird.
    Soweit klappt alles auch. Nur wird erst bei Zeile 6649 eingefügt, obwohl die erste freie 797 wäre.
    Ich bin ratlos und werde wohl aufgeben.
    Hier der Code:
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("Zusammenf.").Select
    ActiveSheet.Range("B3:Q3").Copy
    Sheets("Liste").Select
    Dim zeile As Long
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Select
    ActiveSheet.Range("A5:Q105").Copy
    Sheets("Auswertung").Select
    Dim zeile1 As Long
    zeile1 = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile1 + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Range("B3:G3").ClearContents
    Sheets("Zusammenf.").Select
    Range("B2").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Nochmals vielen Dank für deine Unterstützung
    Ralf
    Anzeige
    wirklich aufgeben ? ...
    09.12.2010 23:50:49
    Matthias
    Hallo
    Wenn Du aufgeben willst - bitte, dann tu es. (das ist aber immer die schlechtere Variante)
    Ansonsten könnte ich/man Dir das mit dem UsedRange ja mal erklären.


    Also nimm mal eine neue leere Tabelle.
    Schreibe in A1 einfach mal Hallo
    Schreibe in E10 auch Hallo
    Nun drücke bitte mal Strg +Pos1 - Es wird A1 aktiviert
    Nun drücke bitte mal Strg +Ende - Es wird E10 aktiviert.
    Wenn Du nun den Inhalt aus E10 löschst, könnte man glauben das UsedRange hätte sich geändert.
    Hat es aber nicht!
    Drücke bitte Strg +Pos1 - Es wird A1 aktiviert
    Drücke bitte Strg +Ende - Es wird wieder E10 aktiviert. (obwohl inhaltlich leer).
    UsedRange ist also der Bereich, der bereits benutzt wurde, egal ob Du später Inhalte entfernst.
    Fazit:
    Du mußt also die Zeilen ab dem letzten Eintrag bis Ende komplett löschen und die Datei speichern!
    Dann findet Excel auch die erste freie Zelle in Zeile 797
    Gruß Matthias
    Anzeige
    Copy Destination:=
    08.12.2010 11:11:04
    Matthias
    Hallo Ralf
    probier mal ...
    Code in ein Modul:
    Dim Variable
    Variable = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Tabelle1.Range("A2:T2").Copy Destination:=Tabelle2.Range("A" & Variable)
    
    Tabelle2 ist Deine Tabelle mit dem RegisterNamen "Liste"
    Gruß Matthias
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    Werte in die erste freie Spalte einfügen


    Schritt-für-Schritt-Anleitung

    Um Werte in die erste freie Spalte einer Excel-Tabelle einzufügen, kannst Du das folgende VBA-Makro verwenden. Dieses Makro kopiert die Werte vor dem Löschen der Daten in der Übersicht.

    1. Öffne den Visual Basic for Applications (VBA) Editor mit ALT + F11.
    2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinWorkbookName)" > Einfügen > Modul.
    3. Kopiere den folgenden Code in das Modul:
    Sub Kopie2()
        Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
        Stil = vbYesNo  ' Schaltflächen definieren.
        Titel = "Achtung !!!!"    ' Titel definieren.
        Antwort = MsgBox(Mldg, Stil, Titel)    ' Meldung anzeigen.
    
        If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
            Sheets("2").Range("A2:T2").Copy
            Sheets("Liste").Select
            Dim zeile As Long
            zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile
            Cells(zeile + 1, 1).PasteSpecial Paste:=xlValues
            Sheets("2").Range("A5:F300").ClearContents
            Sheets("Zusammenf.").Range("B3:G3").ClearContents
            Sheets("2").Select
            Range("A1").Select
        Else    ' Benutzer hat "Nein" gewählt.
            MsgBox "Dann eben nicht"    ' Operation ausführen.
        End If
    End Sub
    1. Schließe den VBA-Editor und speichere Deine Datei als Makro-fähige Arbeitsmappe (.xlsm).
    2. Führe das Makro aus, indem Du auf "Entwicklertools" > "Makros" klickst und Kopie2 auswählst.

    Häufige Fehler und Lösungen

    1. Formeln werden kopiert anstatt Werte: Stelle sicher, dass Du PasteSpecial Paste:=xlValues verwendest, um nur die Werte zu kopieren. Das ist wichtig, wenn Du keine Formeln in der Zielzelle haben möchtest.

    2. Falsche letzte Zeile wird erkannt: Wenn Du die UsedRange-Eigenschaft verwendest, kann es zu unerwarteten Ergebnissen kommen. Manchmal muss der Bereich manuell bereinigt werden. Lösche die Zeilen unterhalb der letzten aktiven Zeile und speichere die Datei.


    Alternative Methoden

    Eine alternative Methode wäre die Verwendung der Copy Destination-Eigenschaft, um direkt beim Kopieren die Zielzelle zu definieren. Der Code könnte dann so aussehen:

    Dim Variable As Long
    Variable = Sheets("Liste").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Sheets("2").Range("A2:T2").Copy Destination:=Sheets("Liste").Range("A" & Variable)

    Praktische Beispiele

    Beispiel 1: In einer Tabelle mit dem Namen "Aufträge" stehen die Werte in den Zellen A2 bis T2. Diese sollen in die nächste freie Zeile der Tabelle "Archiv" eingefügt werden.

    Beispiel 2: Wenn Du mehrere Schichten archivieren möchtest, kannst Du die oben genannten Methoden für jede Schicht wiederholen. Achte darauf, dass Du den Zielbereich entsprechend anpasst.


    Tipps für Profis

    • Vermeide das unnötige Verwenden von Select. Direkte Referenzen machen den Code schneller und lesbarer.
    • Wenn Du häufig mit Makros arbeitest, erstelle Vorlagen für wiederkehrende Aufgaben.
    • Nutze Kommentare im Code, um die Funktionalität für Dich und andere Nachnutzer klarer zu machen.

    FAQ: Häufige Fragen

    1. Wie finde ich die erste freie Zeile in einer bestimmten Spalte? Du kannst die letzte verwendete Zeile in einer spezifischen Spalte mit Cells(Rows.Count, Spalte).End(xlUp).Row finden.

    2. Was mache ich, wenn mein Makro nicht funktioniert? Überprüfe den Code auf Syntaxfehler und stelle sicher, dass alle Blattnamen korrekt sind und existieren.

    3. Wie kann ich sicherstellen, dass ich nur die Werte kopiere? Verwende PasteSpecial Paste:=xlValues, um sicherzustellen, dass nur die Werte und nicht die Formeln kopiert werden.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige