Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1212to1216
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

Funktion - Lauf-Nr. ermitteln - ohne ausgeblendete

Funktion - Lauf-Nr. ermitteln - ohne ausgeblendete
Peter
Guten Abend
Mit nachstehender Funktion wird in einer bestimmten Zelle immer die nächst höhere Zahl aus einer bestimmten Spalte eingetragen.
Wenn die Funktion in Zeile 1 eingetragen wird, ergibt dies 1
Wenn in Zeile 1 nichts oder keine Zahl steht, ergibt die Funktion in Zeile 2 eine 2
Wenn in Zeile 1 eine 7 steht, erigbt die Funktion eine 8, etc.
Allerdings werden auch Zahlen berücksichtigt, die in ausgeblendeten Zeilen stehen.
Frage: wie muss ich den Code erweitern, damit Zahlen, die in ausgeblendeten Zeilen stehen, ignoriert werden?
Danke und Gruss, Peter
Function pNR()
Dim zNr As Long, sNr As Long
zNr = Application.Caller.Row
sNr = Application.Caller.Column
'wenn Aufruf von Zeile 1, dann wird Wert 1 zurückgegeben
If zNr = 1 Then
pNR = 1
Exit Function
End If
Do Until WorksheetFunction.IsNumber(Cells(zNr - 1, sNr).Value)
'Variable dar nicht 1 sein, sonst wird unten Zeile 0 abgefragt
If zNr = 2 Then GoTo WEITER:
zNr = zNr - 1
Loop
WEITER:
If IsNumeric(Cells(zNr - 1, sNr).Value) Then
pNR = Cells(zNr - 1, sNr) + 1
Else
pNR = 1
End If
ENDE:
End Function

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Schleife ohne ausgeblendete Zeilen
13.05.2011 21:54:30
Erich
Hi Peter,
probier mal:

Function pNR()
Dim zNr As Long, sNr As Long
zNr = Application.Caller.Row
sNr = Application.Caller.Column
If zNr = 1 Then
pNR = 1
Else
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If Rows(zNr).Hidden = False Then
If WorksheetFunction.IsNumber(Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then pNR = 1 Else pNR = Cells(zNr, sNr) + 1
End If
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - Schönes WoEnde!
Schleife ohne ausgeblendete Zeilen - kürzer
13.05.2011 21:57:55
Erich
Hi Peter,
habe gerade gemerkt, dass man noch Einiges weglassen kann (hoffentlich):

Function pNR()
Dim zNr As Long, sNr As Long
zNr = Application.Caller.Row
sNr = Application.Caller.Column
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If Rows(zNr).Hidden = False Then
If WorksheetFunction.IsNumber(Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then pNR = 1 Else pNR = Cells(zNr, sNr) + 1
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Schleife ohne ausgeblendete Zeilen - kürzer
14.05.2011 07:26:13
Peter
Guten Tag Erich
Vielen Dank - das hat so prima geklappt - und es gibt Appetit nach mehr ...
Ideal wäre, wenn ich der Funktion ein optionales Argument (z.B. NULL) mitgeben könnte, wenn die Leerzeilen mitausgewertet werden sollen - wenn ich kein Argument liefere, werden nur die sichtbaren Zellen ausgewertet.
Dann ist da noch das Problem, dass ich - wenn ich beispielsweise eine Zeile mit Formel in der betreffenden Spalte dupliziere, zuerst in die Formel klicken muss, damit die Funktion gerechnet wird.
Ich habe schon probiert, der Funktion ein Dummy Argument HEUTE() mitzugeben. Doch dann habe ich das Problem, dass die Funktion auch gerechnet wird, wenn die Tabelle nicht aktiv ist und ich in einer anderen Tabelle irgend eine Eingabe mache. Kann ich verhindern, dass die Neuberechnung der Funktion in Tabellen erfolgt, die nicht aktiv sind?
Vielen Dank für eine gelegentliche Antwort.
Gruss, Peter
Function pNR()
Dim zNr As Long, sNr As Long
zNr = Application.Caller.Row
sNr = Application.Caller.Column
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If Rows(zNr).Hidden = False Then
If WorksheetFunction.IsNumber(Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then pNR = 1 Else pNR = Cells(zNr, sNr) + 1
End Function

Anzeige
Application.Volatile ?
14.05.2011 10:53:53
Erich
Hi Peter,
theoretisch könnte man das aut. Berechnen abschalten und per Ereignismakros die Berechnung
an diversen Stellen blattbezogen auslösen. Ob das viel bringt, weiß ich nicht.
Du könntest auch mal ausprobieren, wie sich bei dir die Anweisung Application.Volatile in der Fkt. auswirkt.
Ixch lasse die Frage mal offen - andere wissen sicher mehr zum Problem beizuitragen...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Application.Volatile ?
14.05.2011 18:09:34
Peter
Hallo Erich
Vielen Dank für die Antwort.
Application.Volatile ist immer wieder abgeraten worden - und deshalb ist mir dies etwas ungeheuer.
Doch ich habe nun herausgefunden, dass ich das Berechnen auch erzwingen kann, wenn ich bei Bedarf schnell eine Zeile einfüge und diese dann wieder lösche (weshalb das auch klappt - beim löschen?). Glücklicherweise erfolgt die Neuberechnung nur in der aktiven Tabelle.
Nun kann ich mit dem optionalen Argument 1 oder nix auch steurern, was mit den ausgeblendeten Zellen, in denen =pNR steht, passiert.
Gruss, Peter
Function pNR(Optional xNull As Long)
'ohne optinales Argument 1 werden ausgeblendete Zellen ignoriert
Dim zNr As Long, sNr As Long
zNr = Application.Caller.Row
sNr = Application.Caller.Column
Do
zNr = zNr - 1
If zNr = 0 Then Exit Do
If Rows(zNr).Hidden = False Or xNull = 1 Then
If WorksheetFunction.IsNumber(Cells(zNr, sNr)) Then Exit Do
End If
Loop
If zNr = 0 Then pNR = 1 Else pNR = Cells(zNr, sNr) + 1
End Function

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige