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

gefüllte Zellen zählen

gefüllte Zellen zählen
18.09.2017 15:14:35
Gerhard
Hallo zusammen,
Bitte um VBA Lösung (keine Formellösung)
Es sollten in der beigefügten dynamischen Liste jeweils nur die gefüllten Zellen ab der Spalte M bis Spalte R
gezählt werden und in der Spalte S die Anzahl eingetragen werden!
Ab der Zeile 6 sollte der Zählvorgang beginnen und bis zum dynamischen Ende der Liste durchgeführt werden.
Anschließend sollte die Gesamtsumme der Spalte S in die Zelle B2 eingetragen werden.
Vielen Dank für Eure Hilfe
Gruß Gerhard
https://www.herber.de/bbs/user/116334.xls

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zitat: Bitte um VBA Lösung (keine Formellösung)
18.09.2017 15:19:36
RPP63
Moin!
Was spricht gegen eine Excel-Funktion, die man natürlich auch mittels VBA umsetzen kann?
Stichwort: WorksheetFunction.CountIf()
Gruß Ralf
AW: gefüllte Zellen zählen
18.09.2017 15:28:02
Daniel
Hi
warum VBA?
reicht die Zelle B2 als Ergebnis?
als Formel würde ich dort eintragen, wenn die leeren Zellen echte Leerzellen sind
=Anzahl2(M:R)-Anzahl2(M1:R5)
wenn in Spalte M:R Formeln stehen, die teilweise das Ergebnis "" haben, würde ich so Zählen:
=ZählenWenn(M:R;"?*")-ZählenWenn(M1:R5;"?*")
dadurch, dass ich erst die ganze Spalte auszählen und dann die Anzahl aus dem Überschriftenbereich wieder abziehe, geht das immer automatisch bis zur letzten gefüllten Zelle, ohne dass die Formel angepasst werden muss.
Gruß Daniel
Anzeige
AW: gefüllte Zellen zählen
18.09.2017 15:32:54
KlausF
Hallo Gerhard,
probier mal:
Sub Anzahl()
Dim i As Long
Dim lastRow As Long
lastRow = ActiveSheet.Range("M:R").Find("*", searchdirection:=xlPrevious).Row
Application.ScreenUpdating = False
For i = 6 To lastRow
Range("S" & i) = WorksheetFunction.CountA(Range("M" & i & ":R" & i))
Next i
Range("B2") = WorksheetFunction.Sum(Range("S6:S" & lastRow))
End Sub
Gruß
Klaus
AW: gefüllte Zellen zählen
18.09.2017 16:04:38
Gerd
Hallo Gerhard!
Sub Gefuellte_im_Bereich()
Dim Z As Range
With Range(Cells(6, 13), Cells(Rows.Count, 13).End(xlUp)).Offset(, 6)
For Each Z In .Cells
Z.Value = WorksheetFunction.CountA(Z.Offset(0, -6).Resize(1, 6))
Next
Cells(2, 2) = WorksheetFunction.Sum(.Cells)
End With
End Sub

Gruß Gerd
Anzeige
For Each schneller?
18.09.2017 16:39:05
KlausF
Hallo Gerd,
wieso ist Deine Lösung eigentlich schneller als meine For-Next-Schleife?
Mit For Each klapperst Du doch auch jede Zelle einzeln ab.
Weist Du etwas darüber?
Etwas Ratlos
Gruß
Klaus
Ich bin nicht Gerd, aber …
18.09.2017 16:54:40
RPP63
… For Each liest und schreibt in ein Array, also den Arbeitsspeicher.
Das Langsamste in VBA sind einzelne Zellzugriffe, die mittels .Cells(i, k) evaluiert werden.
Two Cents,
Ralf
AW: Ich bin nicht Gerd, aber …
18.09.2017 17:34:01
KlausF
Hallo Ralf,
interessant, das habe ich nicht gewusst mit dem Array.
Scheint so, als ob ich mein mühsam antrainiertes For-Next
mal überdenken sollte ...
Danke für die Antwort!
Gruß
Klaus
Anzeige
AW: For Each schneller?
18.09.2017 16:57:27
Daniel
Hi Werner
bearbeiten der Zelle ist das eine, aber diese Zelle muss ja auch jedesmal gefunden werden.
Bei dir muss VBA jedesmal über den Textstring der Zelladresse aus der Gesamtmenge der Zellen auf das Zellobjekt schließen.
bei For Each In sind die zu bearbeitenden Zellen bereits vordefiniert, dh VBA kann da wesentlich schneller auf das einzelne Objekt direkt zugreifen, ohne erst den Text der Zelladresse auflösen zu müssen.
Gruß Daniel
Werner und Klaus, mach dir nichts draus
18.09.2017 17:42:40
KlausF
Hi Daniel,
das hört sich auch logisch an. Danke.
Und ... ich bin der Klaus :-)
Gruß
Klaus
AW: For Each schneller? Ja, aber
18.09.2017 17:15:12
Gerd
Hallo Klaus,
.. bei den paar Zeilen, ist das Jacke wie Hose und ich lasse die Schleife ebenfalls nur über eine Zelle pro Zeilenbereich laufen, die Ausgabezellen (mit Offset( ,6).
Bin halt mit dem Basteln fertig gewesen u. wollte meinen Code dann noch hier zeigen, bar jeder Notwendigkeit. :-)
Gruß Gerd
Anzeige
AW: For Each schneller? Ja, aber
18.09.2017 17:37:29
KlausF
Hallo Gerd,
Danke für Deine Antwort!
... bar jeder Notwendigkeit
Finde ich nicht. Ist immer ganz interessant zu sehen wie andere da heran gehen.
Für mich jedenfalls sehr lehrreich wie der Hinweist von Ralf zeigt ...
Gruß
Klaus
AW: For Each schneller? Ja, aber
18.09.2017 18:03:05
Gerhard
Hallo zusammen,
Vielen Dank für Eure VBA Lösungen!
Ich habe alle mal auspropiert und sie funktionen allesamt super!!!
Vielen Dank für Eure schnelle und competente Hilfe...
Gruß Gerhard
'For Each' arbeitet mit ObjektBezügen, falls ...
18.09.2017 18:48:51
Luc:-?
…möglich (weshalb auch nur Objekte und Variants zulässig sind), Klaus,
die in vordefinierter Reihenfolge aufgenommen wdn, zB …
• Zellen (ZellBereich): von links nach rechts und dann von oben nach unten (zeilenweise),
• Elemente eines Arrays in einem Variant (Datenfeld): spaltenweise
Das muss man beachten, wenn man einen Zeilen-/Spalten-Zähler mitlaufen lassen will!
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: 'For Each' arbeitet mit ObjektBezügen, falls ...
18.09.2017 19:09:20
KlausF
mit Infos überschüttet ...
Auch Dir ein Danke, Luc
Gruß
Klaus
Bitte sehr! owT
18.09.2017 19:51:23
Luc:-?
:-?

97 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige