Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
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

VBA: Bereich kopier. ohne Zeil. mit "Bb"

VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 17:26:12
Max
Hallo liebe VBA-Profis,
meine Tabelle besitzt ein Sheet, in dem archivierte Daten ab Zeile 142 hinterlegt sind über eine Breite von 71 Spalten. Von diesen Daten möchte ich die 10 neuesten Datensätze (= 10 unterste Zeilen) nach oben (B64:BM74) kopieren und dabei Zeilen mit Eintrag "Bb" ausschließen (siehe Sheet "Tabelle1").
Excel-Datei: https://www.herber.de/bbs/user/145170.xlsm
Auf Excel-Filter bzw. VBA-Code wie
.Range("$B$63:$K$101").AutoFilter Field:=5, Criteria1:="*Bb*", Operator:=xlAnd
möchte ich verzichten.
Bisher ist es mir nur möglich, den gesamten Datenbereich nach oben zu kopieren (siehe Sheet "Tabelle2"):
Sub CopyWithoutBb()
Dim tarWks As Worksheet
Set tarWks = Worksheets("Tabelle2")
With tarWks
cntall = .Cells(137, 5)
.Range("B64:BM74") = .Range("B" & cntall - 10 & _
":BM" & cntall).Value
End With
End Sub

Welche Abfrage muss man dafür einfügen?
Vielen Dank im Voraus und viele Grüße
Max

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 18:00:42
Herbert_Grom
Hallo Max,
ist das ein einmaliger Vorgang oder muss das öfter gemacht werden? Wenn öfter, müssen die kopierten Daten dann wieder in Zeile 64 kopiert werden, oder an die nächstfreie Zeile unter 64 (in diesem Falle Zeile 74)?
Servus

AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 18:17:16
Max
Hallo Herbert,
danke schon einmal für deine Rückfrage.
Im Archiv ab Zeile 142 werden unter der letzten Zeile immer wieder Daten ergänzt, weshalb ich auch in E137 die letzte Zeile bestimmen lasse und von dort 10 Zeilen zurückgehe.
Der Bereich, in den die 10 aktuellsten Versuche kopiert werden, bleibt immer gleich. Er wird quasi überschrieben, wenn neue Daten hinzugekommen sind und man das Makro erneut ausgeführt hat,
Viele Grüße
Max

Anzeige
AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 18:59:40
Max
Vielen Dank für den Vorschlag.
Es wirkt sehr übersichtlich und verständlich, eine Abfrage in die For-Schleife einzufügen.
Ich versuche, den Bereich zuzuweisen, anstatt Bereich zu kopieren und einzufügen und erhoffe mir davon eine Verringerung der Rechenzeit.
Viele Grüße
Max

AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
29.03.2021 09:03:31
Herbert_Grom
Hallo Max,
ich verstehe kein Wort! Wo willst du einen Bereich zuweisen, anstatt zu kopieren? Außerdem willst du doch immer nur die letzten 10 Einträge nach oben kopieren und das sollte doch wohl schnell genug gehen!
Servus

Anzeige
AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 18:08:52
ralf_b
Solange du Herberts Frage noch nicht beantwortet hast, kannst du ja mal probieren.

Sub CopyWithoutBb()
Dim tarWks As Worksheet
Dim arr
Dim loletzte As Long, i As Long, cnt As Long, insertrow As Long
insertrow = 64
Set tarWks = Worksheets("Tabelle2")
With tarWks
.Cells(64, 2).Resize(10, 71).ClearContents
loletzte = .Cells(Rows.Count, "B").End(xlUp).Row
arr = .Cells(142, 2).Resize(loletzte - 142 + 1, 71)
For i = UBound(arr) To LBound(arr) Step -1
If insertrow = 75 Then Exit Sub
For cnt = 1 To UBound(arr, 2)
If LCase(arr(i, cnt)) = "bb" Then
Exit For
End If
Next
If cnt > UBound(arr, 2) Then
.Cells(insertrow, "B").Resize(, 71).Value = .Cells(i + 142 - 1, "B").Resize(, 71) _
.Value
insertrow = insertrow + 1
End If
Next
'        cntall = .Cells(137, 5)
'        .Range("B64:BM74") = .Range("B" & cntall - 10 & _
'        ":BM" & cntall).Value
End With
End Sub


Anzeige
AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 18:38:37
Max
Vielen Dank für deine Antwort.
Für den Fall, dass ich auch in ein paar Stunden den Code noch nicht verstanden habe:
1. Wie ändere ich, dass statt den 10 neuesten Versuchen die 40 neuesten Versuche gelistet werden? Ich erkenne abgesehen von ClearContents keine Abhängigkeit.
2. Dein Code bringt die unterste Zeile zur ersten Zeile der Auflistung. Wie schafft man es, dass die letzten Daten auch an letzter Stelle der Auflistung stehen?
3. Wie ändere ich den verbotenen Eintrag von "Bb" zu "Stift"? Denn dein Code scheint auch nur auf "bb" zu prüfen anstatt "Bb" und dennoch funktioniert es.
Viele Grüße
Max

Anzeige
AW: VBA: Bereich kopier. ohne Zeil. mit "Bb"
28.03.2021 21:40:37
ralf_b
If insertrow = 75 Then Exit Sub ' nach 64 +10 Zeilen steigt der Code aus. nach der 10. Zeile wird insertrow nochmal hochgesetzt also 75
Zur Erklärung.
letzte Zeile in Spalte B ermitteln
Der Datenbereich wird in ein array eingelesen. wegen Geschwindigkeit.
Äußere Schleife über die Zeilen des Arrays von unten nach oben.
Dann innere Schleife über die Einträge der Zeile
Vergleich Zellinhalt auf "bb" und zwar indem beide Werte in Kleinbuchstaben umgewandelt werden (lcase(wert)) und Abbruch wenn gefunden.
Abfrage ob die Zählvariable cnt bis zum Schluß ( ohne Fund) durch die Elemente der Zeile gelaufen ist. Dann ist der Zähler höher als die Anzahl der Einträge ( UBound(arr,2 )) In diesem Falle wird die Zeile oben eingetragen und der Zeilenzähler um 1 erhöht.
Für die richtige Reihenfolge der Einträge könnte man insertrow entsprechend hochsetzen (startwert) und dann um 1 reduzieren statt erhöhen.
gruß
rb
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige