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

Leere Zellen u. Nullen ausschließen

Leere Zellen u. Nullen ausschließen
03.11.2016 11:37:45
Max2
Hallo Leute,
kennt ihr eine Möglichkeit in VBA leere Zellen aus Berechnungen auszulassen ?
Ich habe im Internet nichts gescheites dazu finden können außer Excel Formeln.
Es geht um folgenden Code:

lngZeile_2 = .Range(.Cells(.Rows.Count, 1), .Cells(1, 1)).Find(What:="*", LookIn:= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lngAnzSpa = .Range(.Cells(lngZeile_2, .Columns.Count), .Cells(1, 1)).Find(What:="*", LookIn: _
= _
xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
lngZeilenBlock = 50
ReDim arrErgebnis(1 To CLng(lngZeile_2 / lngZeilenBlock) + 1, 1 To 6)
lngZeile_3 = 0
 For lngZeile = 1 To lngZeile_2 Step lngZeilenBlock
Set rngBlock = .Range(.Cells(lngZeile), .Cells(lngZeile + lngZeilenBlock - 1, lngAnzSpa) _
)
            lngZeile_3 = lngZeile_3 + 1
With Application.WorksheetFunction
arrErgebnis(lngZeile_3, 1) = lngZeile_3
arrErgebnis(lngZeile_3, 2) = .Min(rngBlock)
arrErgebnis(lngZeile_3, 3) = .Average(rngBlock)
arrErgebnis(lngZeile_3, 4) = .StDev(rngBlock)
arrErgebnis(lngZeile_3, 5) = lngZeile
If lngZeile + lngZeilenBlock - 1 > lngZeile_2 Then
arrErgebnis(lngZeile_3, 6) = lngZeile_2
Else
arrErgebnis(lngZeile_3, 6) = lngZeile + lngZeilenBlock - 1
End If
End With
Der Fettmarkierte Teil ist der Block der berechnet wird, kann ich ihm irgendwie vermitteln dass er den Block nur dann berechnen soll wenn er einen Wert hat UND Nullen beim berechnen zusätzlich ausschließen soll ?
Das Problem ist dass die Tabelle die berechnet wird mehrere Hundert leere Zeilen oder Zellen hat und dann kommen wieder Zellen mit Werten

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Zellen u. Nullen ausschließen
03.11.2016 12:20:46
Michael
Hi,
ein Block hat nicht EINEN Wert, sondern viele: was für "einen" Wert stellst Du Dir vor?
Du verwendest ohnehin "Excel-Formeln" in Deinem Code, z.B. .Min, also warum nicht noch eine, z.B. zählenwenn (nach Leerzeichen oder 0) oder Anzahl?
Leere Zellen kannst Du in VBA mit specialcells ermitteln: zeichne mal mit dem Makrorekorder auf:
- Bereich (mit leeren und gefüllten Zellen) markieren
- F5-Taste (öffnet den Dialog "Gehe zu"),
- dort links unten "Inhalte" anklicken und
- Leerzellen auswählen
(Aufzeichnung beenden nicht vergessen)
Den Code kannst Du dann auf Deinen rngBlock anwenden. Dessen Definition ist wiederum auch etwas unübersichtlich (zumal beim ersten .cells nur ein Wert angegeben wurde); schöner wäre es etwa so:
Set rngBlock = .Range("A" & lngZeile).resize(lngZeilenBlock,lgnAnzSpa)

.resize vergrößert die eine, angegebene Zelle auf den Bereich mit 50 Zeilen und x Spalten.
Die Ermittlung von lngZeile_2 (lngAnzSpa analog) kommt mir etwas umständlich vor: wenn schon mit .find, dann reicht .rows(1).Find(...), oder Du nimmst
lngZeile_2=.cells(.columns.count,1).end(xltoleft).column
Falls Dir die Infos zu abstrakt sein sollten, lade bitte eine anonymisierte Beispieldatei hoch.
Schöne Grüße,
Michael
Anzeige
AW: Leere Zellen u. Nullen ausschließen
04.11.2016 15:44:49
Max2
Danke für deine Hilfe, habe deine Verbesserungsvorschläge zu Herz genommen, der Code sieht jetzt um einiges aufgeräumter aus, dafür schon mal Danke.
Das mit .Average und .StDev habe ich jetzt durch eine If-Abfrage gelöst:

If .Count(rngBlock) > 0 Then
End If
Klappt alles einwandfrei, Danke dir.
ok, super, danke für die Rückmeldung
04.11.2016 18:07:27
Michael
Gruß,
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige