Clever-Excel-Forum

Normale Version: Tracking-Analyse
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
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? Undecided
Hallöchen,

hätt' ich mal Diene Code bis zu Ende gescrollt und gelesen Sad

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
Wie sagt man so schön: Warum einfach, wenns auch kompliziert geht? Blush  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?
Hallöchen,

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.

Für Deine Aufgabe würde es so passen:

Sub Makro2()
    Range("A1").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _
        Step:=1, Stop:=Cells(Rows.Count, 2).End(xlUp).Row, Trend:=False
End Sub
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

Kann dir gar nicht genug für deine Hilfe danken!
Hallöchen,

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
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!
Hallöchen,

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.
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?
Hallöchen,

ja, da ziehst Du einfach 2 ab.
... Stop:=Cells(Rows.Count, 2).End(xlUp).Row - 2, ...
Seiten: 1 2 3 4 5