Hmm, also es ist ja so, dass die Werte aus den anderen Spalten unten in den Spalten B C und D angehangen werden. Diese haben, dann keine Werte mehr in Spalte A. Mein Ziel war es jetzt, alle Werte, die dann einen Zahlenwert in Spalte A haben zu löschen, damit die angefügten Daten bei Zeile 3 beginnen (ohne einen Wert in A), aber irgendwie haut das mit dem Code den ich da habe nicht so hin. Er löscht merkwürdigerweise auch die Zeilen, wo A keinen Inhalt hat (auch nachdem ich die Leerzeichen manuell gelöscht habe). Oder habe ich jetzt einfach einen Denkfehler?
hätt' ich mal Diene Code bis zu Ende gescrollt und gelesen
Also, wie ich schon sagte, ist Deine Schleife korrekt. Allerdings kommt da noch was entscheidendes. Nachdem Du in der Schleife schon mal die kompletten Zeilen geleert hast, wo in Spalte A was steht, tust Du am Ende nochmal alle Zeilen löschen, wo in Spalte A nichts steht. Letzte_Zeile vom benutzten Bereich ist nun nämlich die letzte Zeile von den kopierten Daten. Da wären dann eben die gerade kopierten Daten betroffen :20: Die letzte Zeile brauchst Du also nicht bzw. eigentlich willst Du ja was anderes - die Zeilen löschen.
Jetzt zur Optimierung. Du löschst die Inhalte zeilenweise. Im Prinzip geht es so schneller:
Code:
Sub test() Dim b& 'Long b = 4 'bzw Code für letzte_zeile ... Rows("3:" & b).ClearContents End Sub
bzw. was Du eigentlich willst, wäre statt Rows(3:" & b).ClearContents gleich Rows("3:" & b).EntireRow.Delete
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
18.03.2016, 14:45 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2016, 14:45 von lpterritory.)
Wie sagt man so schön: Warum einfach, wenns auch kompliziert geht? Okay vielen Dank, habe jetzt deinen Code entsprechend abgeändert und jetzt klappt es auch.
Wenn ich jetzt noch zum Schluss die Spalte A durchnummerieren möchte, habe ich folgenden Code überlegt bzw. vom Makro-Recorder erstellen lassen:
Code:
Sub Nummerierung()
Range("A3").Select ActiveCell.FormulaR1C1 = "=R[-1]C+1" Range("A3").Select Selection.AutoFill Destination:=Range("A3:A65536"), Type:=xlFillDefault Range("A2:A65536").Select End Sub
Jetzt müsste man wahrscheinlich wieder eine Variable deklarieren, damit Autofill dynamisch bzw. variabel die Zeilen ausfüllt oder?
ja, so könnte man es machen. Ich würde die Zeilennummer vom Ende der Spalte B nehmen.
Beim Ausfüllen hast Du vermutlich A1 und A2 ausgefüllt und dann mit einem Doppelklick auf die rechte untere Ecke von A2 bis unten ausgefüllt.
Es gibt aber noch eine andere Möglichkeit, mit der Reihe. Die Findest Du im Start-Ribbon ziemlich weit rechts, wo auch die Sume ist. Aufgezeichnet würde das erst mal so aussehen:
Code:
Sub Makro2() ' ' Makro2 Makro '
' Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=7, Trend:=False End Sub
Weil ich gerade in A1 war, ist da keine Zellauswahl und weil ich in 7 Zeilen Daten habe, steht selbige dort.
18.03.2016, 16:25 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2016, 16:27 von lpterritory.)
Hallöchen,
ich habe gerade noch mal das Zeilenloeschen-Makro ausprobiert, nachdem ich die Werte mit dem anderen Makro runterkopiert habe. Irgendwie scheint das doch nicht zu klappen. Ich hatte das vorhin nur mit einer selbstgebastelten Tabelle ausprobiert und da gabs keine Probleme, bei der irgendwie schon. Ich hänge die Tabelle mit der ich es probiert habe mal an. Zu der Nummerierung: Habe das erstmal mit einer Beispieltabelle ausprobiert, wo ich nur Werte in die B-Spalte geschrieben habe, aber da wird dann leider gar nichts ausgefüllt :(
Hier nochmal mein Code, den ich für das Zeilen löschen verwendet habe:
Code:
Sub Zeilenloeschen2() Dim b& 'Long b = ActiveSheet.UsedRange.Rows.Count Rows("3:" & b).EntireRow.Delete End Sub
sorry, Du ermittelst die letzte Zeile ja etwas anders. ActiveSheet.UsedRange.Rows.Count
Hätte ich mal noch vollständig posten sollen. Ich schrieb weiter oben:
Zitat:Letzte_Zeile vom benutzten Bereich ist nun nämlich die letzte Zeile von den kopierten Daten. Da wären dann eben die gerade kopierten Daten betroffen
Der Code für die letzte Zeile ermittelt sich jedoch aus dem letzten Eintrag in Spalte A und nicht aus dem kompletten benutzten Bereich. Bei den Zahleneinträgen in Spalte A hatte ich im Code z.B. folgendes drin: Cells(Rows.Count, 2).End(xlUp).Row Damit gehe ich in Spalte B von ganz unten her ans Ende der Einträge. Diese Zeile muss dann nicht mit der letzten Zeile im benutzten Bereich übereinstimmen.
Du benötigst zum Löschen die letzte benutzte Zelle in SPalte A, also Cells(Rows.Count, 1).End(xlUp).Row
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28 • lpterritory
18.03.2016, 19:39 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2016, 19:39 von lpterritory.)
Yesss, es funktioniert jetzt :)
Die Nummerierung funktioniert noch nicht so wirklich, also Spalte A bleibt irgendwie komplett leer (also ab Zeile 3), wäre jetzt aber auch nicht so wichtig, wenn das zu viele Umstände macht, mir zu erklären, was ich verändern müsste.
Ohne dich wäre ich auf jeden Fall komplett aufgeschmissen gewesen!
auch kein Problem. Ich bin davon ausgegangen, dass in A1 schon eine 1 steht. Also einfach noch Range("A1").Value = 1 drüber setzen, dann sollte es passen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Ahh okay verstehe jetzt ist es fast perfekt. Also in Zeile 1 und 2 sind Text und ab Zeile A3 soll dann die fortlaufende Nummerierung beginnen mit 1 usw. dann.
Folgenden Code habe ich dafür benutzt:
Code:
Sub Nummerieren() Range("A3").Value = 1 Range("A3").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Stop:=Cells(Rows.Count, 2).End(xlUp).Row, Trend:=False End Sub
Es werden aber noch 2 weitere Zeilen nach Ende der Daten nummeriert. Das liegt wahrscheinlich daran, weil A1 und A2 nicht beachtet werden oder?