Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wenn Zahl erreicht, kopieren und Zeile löschen

Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 20:04:22
Wolfgang
Hallo,
wenn in Tabelle "Grunddaten" in Spalte P die Zahl 181 (ergibt sich aus einer Differenzberechnung zum aktuellen Tagesdatum) erreicht ist, würde ich gerne erreichen, dass die jeweilige Zeile in das Tabellenblatt "Altdaten" kopiert und "unten" angehängt wird. Gleichzeitig sollte die jeweilige Zeile aus dem Tabellenblatt "Grunddaten" gelöscht werden und die darunterstehenden Zeilen "hochgeschoben" werden. Habe schon unter Recherche "gewühlt" und auch selbst schon mit dem Makrorekorder getestet, bekomme das aber irgendwie nicht hin. Ich wäre daher für jeden Tipp und Hilfestellung sehr dankbar.
Herzliche Grüße
Wolfgang

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 20:16:00
Daniel
Hi
deine Beschreibung ist zwar etwas vage, vorallem ohne Beispieldatei, aber dieses Makro macht zumindest das, was du hier beschrieben hast, das Makro muss ins Modul der Tabelle "Grunddaten"

Private Sub Worksheet_Calculate()
Dim Zelle As Range
If WorksheetFunction.CountIf(Range("P:P"), 181) > 0 Then
Set Zelle = Range("P:P").Find(what:=181, LookIn:=xlValues, lookat:=xlWhole)
Zelle.EntireRow.Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
Zelle.EntireRow.Delete
End If
End Sub


das Makro läuft jedes mal los, wenn in der Tabelle eine neuberechnung stattfindet.
dann wird die erste Zeile, die in Spalte P den Wert 181 enthält, nach "Altdaten" kopiert (nur Werte, keine Formeln) und die Zeile wird in den Grunddaten gelöscht.
Gruß, Daniel

Anzeige
AW: Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 20:43:00
Wolfgang
Hallo Daniel,
Danke für die schnelle Rückmeldung; Der Code findet den ersten Datensatz mit mehr als 180 in Spalte P, kopiert ihn aber endlos, bis die Meldung kommt, dass kein Platz mehr für den Stapelspeicher existiert, in Tabelle Altdaten. Danach meldet der Code dann, dass Zelle.EntireRow.Delete nicht ausgeführt werden konnte. Hättest Du da evtl. noch eine Idee, was da umgestellt werden könnte, damit der erkannte Datensatz nur einmal in Tabelle Altdaten eingefügt wird?
Gruß - Wolfgang
AW: Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 20:48:09
Daniel
Hi
nö, bei mir mit ner Testdatei hat das Makro einwandfrei funktioniert.
dh es wäre eine Anpassung an deine Datenstruktur notwendig.
Da ich die aber nicht kenne, kann ich dazu auch nichts sagen.
gruß, daniel
Anzeige
AW: Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 21:04:38
Wolfgang
Hallo Daniel,
dennoch recht herzlichen Dank - werde hier 'mal weitertesten und versuchen, den Bock ausfindig zu machen.
Gruß - Wolfgang
AW: Wenn Zahl erreicht, kopieren und Zeile löschen
08.11.2008 21:14:00
Daniel
Hi
die andere Methode wäre, mal ne Beispieldatei hochzuladen, damit man sehen kann, warums nicht funktioniert.
Gruß, Daniel
Musterdatei anbei
08.11.2008 22:06:22
Wolfgang
Hallo Daniel,
Danke für Dein Angebot, anbei somit eine Musterdatei.Ich habe Deinen Code zunächst wieder daraus gelöscht, weil selbst beim Aufbereiten dieser Musterdatei kopierte er fortlaufend den ersten Datensatz unendlich. Nochmals herzlichen Dank.
Gruß - Wolfgang
https://www.herber.de/bbs/user/56637.xls
Anzeige
AW: Musterdatei anbei
08.11.2008 22:29:22
Daniel
Hi
so funktioniert es mit deine Daten.
allerdings stellt sich die Frage, ob das überhaupt automatisch gehen soll (so wie jetzt) oder ob du die Daten lieber per Knopfduck überträgst

Private Sub Worksheet_Calculate()
Dim Zelle As Range
If WorksheetFunction.CountIf(Range("P:P"), 181) > 0 Then
Set Zelle = Range("P:P").Find(what:=181, LookIn:=xlValues, lookat:=xlWhole)
Application.EnableEvents = False
Zelle.EntireRow.Copy
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Altdaten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormats
 Application.EnableEvents = True
Zelle.EntireRow.Delete
End If
End Sub


kleiner Tipp noch, du kannst diese automatischen Makros unterbinden, indem du die VBA-Symbolleiste oder die Steuerelement-Symbolleiste sichtbar machst und auf das Symbol mit dem Geodreieck und dem Bleistift klickst.
Wenn dieser Schalter aktiv ist, werden die automatischen Makros nicht ausgeführt.
Gruß, Daniel

Anzeige
AW: Musterdatei anbei
08.11.2008 22:55:00
Wolfgang
Hallo Daniel,
das klappt fast, allerdings kopiert der Code nur die Zeilen mit genau 181, wo müßte ich noch was verändern, wenn alle Zeilen gemeint sind, die 181 und mehr aufweisen?
Gruß - Wolfgang
AW: Musterdatei anbei
08.11.2008 23:22:23
Daniel
Hi
in der Zeile mit CountIF, da müsste die bedingung ">=181" verwendet werden, außerdem darfst du die Zellen nicht mehr mit FIND suchen, da diese ja nur genaue Werte findet.
stattessen kannst du den Autofilter verwenden, um die entsprechenden Zeilen zu filtern
diese kannst du dann per Copy-Paste ins andere Blatt übertragen und dann löschen.
Gruß, und gute Nacht, Daniel
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige