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

Belegte Zeilen zählen

Belegte Zeilen zählen
09.02.2021 09:04:51
Lizzel
Guten Morgen Zusammen,
ich habe ein Problem beim Zählen, das ich nicht verstehe.
Statt bei 26 belegten Zeilen, im Bereich B30:B58, ein neues Blatt zu erstellen, erstellt er mir ein neues Blatt bei 30 belegten Zeilen.
Kann mir bitte jemand sagen, wo mein Fehler ist?
Danke!
Gruß Lars
Public Sub ElementeUebtragen()
'Öffnet Fenster zum Werte eingeben
Dim i As Long, strSuche As String, loAnz As Long, z As Long
Dim anzahl As Long
Application.ScreenUpdating = False
Call NummernkreisEingeben1
ThisWorkbook.Worksheets("Wartungskarte").Copy After:=ThisWorkbook.Sheets(Sheets.Count)
Range("B7").Value = nummernkreis
ActiveSheet.name = nummernkreis
With Worksheets("WartungskarteErstellen")
For i = 12 To .Cells(.Rows.Count, "A").End(xlUp).Row
strSuche = ""
If UCase(.Cells(i, "B")) = "X" Then
loAnz = Len(.Cells(i, "A")) - Len(Replace(.Cells(i, "A"), " ", ""))
If loAnz > 0 Then
For z = 0 To loAnz
strSuche = strSuche & Split(.Cells(i, "A"), " ")(z) & "*"
Next z
strSuche = "*" & strSuche
Else
strSuche = "*" & .Cells(i, "A") & "*"
End If
If anzahl  1 Then
With Worksheets("Wartungsaufgaben").AutoFilter.Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1). _
Copy
End With
With Sheets(nummernkreis)
.Cells(.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste: _
=xlPasteValues
anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))
MsgBox anzahl
End With
Else
MsgBox "Fehler: Es ist für " & .Cells(i, "A") & " keine Wartungsaufgabe  _
vorhanden."
End If
Else
Call NummernkreisEingeben2
ThisWorkbook.Worksheets("Wartungskarte").Copy After:=ThisWorkbook.Sheets(Sheets. _
Count)
Range("B7").Value = nummernkreis
ActiveSheet.name = nummernkreis
Worksheets("Wartungsaufgaben").Range("A10:J" & Worksheets("Wartungsaufgaben" _
) _
.Cells(Rows.Count, "F").End(xlUp).Row).AutoFilter Field:=1, Criteria1:= _
strSuche
If Worksheets("Wartungsaufgaben").AutoFilter.Range.Columns(1) _
.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
With Worksheets("Wartungsaufgaben").AutoFilter.Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1). _
Copy
End With
With Sheets(nummernkreis)
.Cells(.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste: _
=xlPasteValues
anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))
End With
Else
MsgBox "Fehler: Es ist für " & .Cells(i, "A") & " keine Wartungsaufgabe  _
vorhanden."
End If
End If
End If
Next i
Worksheets("Wartungsaufgaben").Range("A10").AutoFilter
End With
Application.CutCopyMode = False
Call IntervallPrüfen
'WartungskarteErstellen.Show vbModeless
End Sub

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 09:58:31
Piet
Hallo
ich erinnere mich an deinen Code, den hast du ja ganz schin erweitert, alle Achtung!! Beim kurzen Drüberblicken fiel mir auf das der Befehl: - Anzahl = Anzahl -1 fehlt!
Ist das die Ursache?
mfg Piet
AW: Belegte Zeilen zählen
09.02.2021 10:20:25
Lizzel
Hallo Piet,
ich erinnere mich an deinen Code, den hast du ja ganz schin erweitert, alle Achtung!!

Danke, hab viel gelernt im letzten halben Jahr, aber der Großteil der Inhalts steuert dann doch noch das Forum bei ;)
Befehl: - Anzahl = Anzahl -1 fehlt!

da ich meine gefüllten Zeilen zähle, muss ich doch nicht separat mitzählen/addieren?!?
Anzeige
AW: Mustermappe wäre von Vorteil owT
09.02.2021 10:49:29
Vorteil
AW: Belegte Zeilen zählen
09.02.2021 10:31:49
Piet
Hallo
ich verweise dich höflich auf diese Code Zeile: - If anzahl <= 26 Then~f~</i>~f~
Was soll der Code denn auswerten wenn die "anzahl" immer gleich bleibt?
Das fiel mir sofort auf! Deshalb suchte ich im Code vergeblich nach dem Befehl ~f~anzahl -1
mfg Piet
AW: Belegte Zeilen zählen
09.02.2021 11:10:51
Lizzel

anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))
Hier belege ich doch die Variable für jeden Durchgang neu.
Rein vom Ablauf, stand jetzt, macht es ja so auch am meisten Sinn. So muss ich beim Blattwechsel die Variable nicht wieder nullen.
Du darfst mich gerne korrigieren, falls ich einen Denkfehler habe.
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 11:48:32
Daniel
Hi
Vor dem ersten "If anzahl &lt= 26 Then"
erfolgt keine Zuweisung eines Wertes an anzahl, dh zu dem Zeitpunkt, wenn diese Abfrage das erste mal ausgeführt wird, hat anzahl den Wert 0.
Gruß Daniel
AW: Belegte Zeilen zählen
09.02.2021 12:08:03
Lizzel
Hallo Daniel,
erfolgt keine Zuweisung eines Wertes an anzahl, dh zu dem Zeitpunkt, wenn diese Abfrage das erste mal ausgeführt wird, hat anzahl den Wert 0.
Aber das entspricht ja auch der Wahrheit, den ich habe ja noch nichts in die Tabelle geschrieben, das erfolgt ja erst in den nächsten Schritten und ab da an ist Anzahl nicht mehr = 0
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 12:06:10
ralf_b
Hallo,
welche Range wird denn gezählt? Fast im ganzen Code referenzierst du auf bestimmte Worksheets.
Hier wird im gerade erstellten Worksheet gezählt, oder?
anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))

AW: Belegte Zeilen zählen
09.02.2021 12:10:04
Lizzel
Hallo ralf,
genau, immer das aktuelle Blatt, das gefüllt werden soll.
AW: Belegte Zeilen zählen
09.02.2021 12:34:43
ralf_b
Aus irgend einem Grund verstehe ich leider immer noch nicht so ganz was du da machst.
ein Bereich wird gefiltert, dann wird der Bereich ohne die Spaltenbeschriftungen kopiert, dann in ein neues Blatt eingefügt
es erfolgt dabei keine Prüfung wie groß der kopierte Bereich ist.
die "anzahl" wird nur aus einem definierten Bereich ermittelt. was ist wenn mehr eingefügt wurde?
CountA zählt auch leere Texte "" in der Zelle
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 12:57:52
Lizzel
Kein Thema, ich kläre auf.
1.) In Blatt "WartungskarteErstellen" wählst du Elemente mit "X" aus.
2.) In Blatt "Wartungsaufgaben" sind zu den Elementen Wartungsaufgaben hinterlegt.
3.) Gibt es zu einem Element eine Wartungsaufgabe, wird diese in ein neues Blatt (deklariert mit Nummernkreis) kopiert und zwar nur die Aufgabe/Intervall/Zuständigkeitsbereich/etc. das Element dient nur als Suchbegriff.
4.) Dieses neue Blatt darf maximal 26 Wartungsaufgaben haben (Folgeprogramm kann nur soviel verarbeiten *eyeroll*)
5. Wird die Anzahl von 26 Aufgaben p. Blatt überschritten, wird ein neues Blatt, mit einem neuen Nummernkreis (generierte Nummer) erstellt. Und zwar solange bis keine Wartungsaufgabe über ist.
Momentan teste ich nur "Geasmte Wartungskarte erstellen".
Ich hoffe das ist verständlich und hilft weiter
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 13:36:40
Lizzel

Public Sub ElementeUebtragen()
Dim i As Long, strSuche As String, loAnz As Long, z As Long
Dim anzahl As Long
anzahl = 0
Application.ScreenUpdating = False
Call NummernkreisEingeben1
ThisWorkbook.Worksheets("Wartungskarte").Copy After:=ThisWorkbook.Sheets(Sheets.Count)
Range("B7").Value = nummernkreis
ActiveSheet.name = nummernkreis
With Worksheets("WartungskarteErstellen")
For i = 12 To .Cells(.Rows.Count, "A").End(xlUp).Row
strSuche = ""
If UCase(.Cells(i, "B")) = "X" Then
loAnz = Len(.Cells(i, "A")) - Len(Replace(.Cells(i, "A"), " ", ""))
If loAnz > 0 Then
For z = 0 To loAnz
strSuche = strSuche & Split(.Cells(i, "A"), " ")(z) & "*"
Next z
strSuche = "*" & strSuche
Else
strSuche = "*" & .Cells(i, "A") & "*"
End If
If anzahl  1 Then
With Worksheets("Wartungsaufgaben").AutoFilter. _
Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns. _
Count - 1).Copy
End With
With Sheets(nummernkreis)
.Cells(.Rows.Count, "B").End(xlUp).Offset(1). _
PasteSpecial Paste:=xlPasteValues
'anzahl = Application.WorksheetFunction.CountA( _
Range("B30:B58"))
anzahl = anzahl + 1
MsgBox anzahl
End With
Else
MsgBox "Fehler: Es ist für " & .Cells(i, "A") & " keine  _
Wartungsaufgabe vorhanden."
End If
Else
Call NummernkreisEingeben2
ThisWorkbook.Worksheets("Wartungskarte").Copy After:=ThisWorkbook.Sheets(Sheets. _
Count)
Range("B7").Value = nummernkreis
ActiveSheet.name = nummernkreis
anzahl = 0
Worksheets("Wartungsaufgaben").Range("A10:J" & Worksheets("Wartungsaufgaben" _
) _
.Cells(Rows.Count, "F").End(xlUp).Row).AutoFilter Field:=1, Criteria1:= _
strSuche
If Worksheets("Wartungsaufgaben").AutoFilter.Range.Columns(1) _
.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
With Worksheets("Wartungsaufgaben").AutoFilter.Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1). _
Copy
End With
With Sheets(nummernkreis)
.Cells(.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste: _
=xlPasteValues
'anzahl = Application.WorksheetFunction.CountA(Range("B30:B58")) _
anzahl = anzahl + 1
MsgBox anzahl
End With
Else
MsgBox "Fehler: Es ist für " & .Cells(i, "A") & " keine Wartungsaufgabe  _
vorhanden."
End If
End If
End If
Next i
Worksheets("Wartungsaufgaben").Range("A10").AutoFilter
End With
Application.CutCopyMode = False
Call IntervallPrüfen
'WartungskarteErstellen.Show vbModeless
End Sub
Ich hab es jetzt testweise einmal so angepasst, dass die Durchgänge der Schleife pro Blatt gezählt werden.
Jetzt kopiert er mir fleißig bis 18 Aufgaben durch und ist dann fertig. Es wurden aber wesentlich mehr Aufgaben kopiert.
Hab es mit unterschiedlich vielen Aufgaben getestet, erzählt definiv zu wenig
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 13:52:13
Lizzel
Ich hab den Fehler gefunden.
                                Worksheets("Wartungsaufgaben").Range("A10:J" & Worksheets(" _
Wartungsaufgaben") _
.Cells(Rows.Count, "F").End(xlUp).Row).AutoFilter Field:=1,  _
Criteria1:=strSuche
If Worksheets("Wartungsaufgaben").AutoFilter.Range.Columns(1) _
.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
With Worksheets("Wartungsaufgaben").AutoFilter. _
Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1).Copy
Hier kopiert er alle vorhandenen Aufgaben, egal ob das eine oder zehn sind (immer noch nicht alles verstanden, was Werner da gebaut hat). Dadurch überschreitet er dann quasi immer die Max Anzahl.
Hat jemand eine Idee, wie ich das einzeln kopieren kann und nicht als Block?
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 15:09:18
Matthias
Moin!
Bin jetzt nicht ganz auf dem Stand, was nicht geht. Das mit dem Zählen liegt an der falschen Referenzierung. HIer
anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))
fehlt noch vor Range der Punkt. Damit wird nicht im Blatt des NUmmernkreises sondern im ersten Blatt gezählt.
VG
AW: Belegte Zeilen zählen
09.02.2021 15:45:09
Lizzel
Hallo Matthias,
danke für deinen Tipp.
Das Zählen ist nicht das Problem, sondern das blockweise Kopieren/Einfügen. Will ich 26, hab 23 und er fügt mir 5 ein, ist es schön, wenn er auf 26 zählen kann, aber schon 28 drin stehen :D
AW: Belegte Zeilen zählen
09.02.2021 15:47:55
ralf_b
@Lizzel
da freue ich mich das du den Fehler gefunden hast. So ähnlich hatte ich dir das aber vorhin geschrieben. "keine Prüfung wie groß der Bereich ist."
Und das was Matthias hier nebenan nochmals erwähnt hat, hast du das mit der Range nachgeprüft?
gruß
rb
Anzeige
AW: Belegte Zeilen zählen
09.02.2021 16:00:33
Lizzel
Deine Aussage mit dem Bereich hab ich da irgendwie missinterpretiert bzw. dadurch das ich den Code wohl nicht zu 100% verstanden habe, auch nicht so richtig verstanden.
Matthias's Tipp hab ich umgesetzt und anhand der MsgBox auch einigermaßen nachprüfen können (sprunghafter Anstieg der Zahlen)
AW: Belegte Zeilen zählen
09.02.2021 20:22:34
Matthias
Moin!
Da du den Beitrag noch als Offen markiert hast, gehen ich davon aus, dass das Problem mit dem Einzeln kopieren noch nicht erledigt ist. Kann grad keinen fertigen Code anbieten (würde erst morgen) sondern nur den Ablauf beschreiben und ein wenig Code dazu.
Also ich würde prüfen (in einem if then), ob du den ganzen Bereich einfügen kannst (also die sichtbaren Zeilen + anzahl kleiner als 26 sind). Wenn ja, den Code wie bisher. Wenn nicht, dann entweder die Zeilen Schrittweise durchgehen, bis man bei 26 ist (for schleife) oder so wie hier. Bin mir aber nicht sicher, ob das beim Filterereignis klappt.
 Worksheets("Wartungsaufgaben").Range("A10:J" & Worksheets(" Wartungsaufgaben").Cells(Rows. _
Count, "F").End(xlUp).Row).AutoFilter Field:=1, riteria1:=strSuche
If Worksheets("Wartungsaufgaben").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible). _
Cells.Count > 1 Then
With Worksheets("Wartungsaufgaben")
'jetz prüfen ob man über 26 kommen würde
If (anzahl + Worksheets("Wartungsaufgaben").AutoFilter.Range.Columns(1).SpecialCells( _
xlCellTypeVisible).Cells.Count) 

Kannst ja mal probieren, ob du es hinbekommst. Würde morgen auch mal schauen.
VG
Anzeige
AW: Belegte Zeilen zählen
10.02.2021 14:23:25
Matthias
Moin!
Habe nochmal geschaut. Das mit dem Auswählen der sichtbaren Zeilen, klappt so nicht (dachte ich mir fast).
Habe den Code jetztmal ein wenig umgebaut. Aber nur bei dem Kopieren. Den Rest habe ich gelassen - auch wenn ich mir da nicht sicher bin, warum ihr das so gemacht habt.
Public Sub ElementeUebtragen()
Dim i As Long, strSuche As String, loAnz As Long, z As Long
Dim anzahl As Long
Dim treffer As Long, zeilen As Long, zeile As Long
Application.ScreenUpdating = False
Call NummernkreisEingeben1
ThisWorkbook.Worksheets("Wartungskarte").Copy After:=ThisWorkbook.Sheets(Sheets.Count)
Range("B7").Value = nummernkreis
ActiveSheet.name = nummernkreis
zeilen = Worksheets("Wartungsaufgaben").Cells(Rows.Count, "F").End(xlUp).Row
With Worksheets("WartungskarteErstellen")
For i = 12 To .Cells(.Rows.Count, "A").End(xlUp).Row
strSuche = ""
If UCase(.Cells(i, "B")) = "X" Then
loAnz = Len(.Cells(i, "A")) - Len(Replace(.Cells(i, "A"), " ", ""))
If loAnz > 0 Then
For z = 0 To loAnz
strSuche = strSuche & Split(.Cells(i, "A"), " ")(z) & "*"
Next z
strSuche = "*" & strSuche
Else
strSuche = "*" & .Cells(i, "A") & "*"
End If
If anzahl = 1 Then
For zeile = 10 To zeilen
If Worksheets("Wartungsaufgaben").Rows(zeile).Hidden = False Then  _
Exit For
Next
If anzahl + treffer  1 Then
With Worksheets("Wartungsaufgaben").AutoFilter.Range
.Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1). _
Copy
End With
With Sheets(nummernkreis)
.Cells(.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste: _
=xlPasteValues
anzahl = Application.WorksheetFunction.CountA(Range("B30:B58"))
End With
Else
MsgBox "Fehler: Es ist für " & .Cells(i, "A") & " keine Wartungsaufgabe  _
vorhanden."
End If
End If
End If
Next i
Worksheets("Wartungsaufgaben").Range("A10").AutoFilter
End With
Application.CutCopyMode = False
Call IntervallPrüfen
'WartungskarteErstellen.Show vbModeless
End Sub

Der Code geht nun durch die Kriteien und sucht sich die angezeigten Zellen. Da die immer im Block da sind (habe ich mal vorausgesetzt, da die WErte aus den Blätter ja identisch sein müssen und die LIste gefiltert ist), kopiert er dann die gewünschte Anzahl an Zeilen.
Was mir noch so aufgefallen ist.
Im Code ist der Autofilter falsch gesetzt. Der geht nicht ab Zeile 10 sondern ab 9 los. Sonst kannst du den 1. Achsenwert nicht auswählen. Im unteren Codeteil ist das noch so drin.
Und im COde prüfst du, ob du mehr als einen Treffer hast. Sollte der Code nicht auch schon bei einem Treffer die ZEile kopieren? Habe deshalb oben mal größer gleich 1 genommen.
Einfach mal testen. Bei Fragen immer stellen. Und ich habe nur den oberen Teil angepasst. Der else Zweig (ähnlich aufgebaut) ist noch der alte Code.
VG
AW: Belegte Zeilen zählen
12.02.2021 10:27:18
Lizzel
Hallo Matthias,
sorry für das späte Feedback (war ein paar Tag auf Abnahme).
Auf den ersten Blick funktioniert es sehr gut. Danke dir für deine Überarbeitung.
AW: Belegte Zeilen zählen
12.02.2021 19:04:08
Matthias
Moin!
Kein Problem. Aber wie gesagt, der zweite Teil ist nicht überarbeitet. Falls doch was nicht läuft, bitte einen neuen Thread aufmachen. Der hier läuft bald ab.
VG
AW: Belegte Zeilen zählen
09.02.2021 12:34:43
Daniel
sorry, für lau ist mir das zuviel Aufwand mich da reinzulesen.
du solltet zumindest schon beschreiben, was man tun muss, um den Fehler zu erhalten und wie ich das Programm an dieser Stelle deinen Wünschen nach verhalten soll.
aber beim Testen scheitere ich ja schon an der Angabe des Nummernkreise.
Gruß Daniel
AW: Belegte Zeilen zählen
09.02.2021 13:38:23
Lizzel
Den Ablauf hab ich im anderen Pfad gepostet.
Nummernkreis ist einfach eine fünfstellige Nummer (12345, 23456, 34567, ...)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige