PDA

Vollständige Version anzeigen : Erste Zelle finden, die nicht Null enthält


MGM
24.03.2009, 08:23
Heyho,

ich grübel seit gestern Vormittag über eine Möglichkeit, Spaltenüberschriften derart anhand von den in der Tabelle eingetragenen Zahlen herauszufinden, dass sozusagen Start- und Endspalte dargestellt werden können (erstmal als Nummern, Ziel ist aber die Überschrift).

Prinzipiell geht es also um die Suche nach der ersten Spalte von vorne bzw von hinten, deren zugehöriger Wert einen gewissen Schwellenwert überschreitet/dem Wert nicht entspricht (normalerweise 0; Zwischenspalten, die den Wert erreichen oder unterschreiten sind egal).

Alle meine Versuche über Vergleiche, Verweise, Zählenwenn, Summenprodukt etc. sind gescheitert, evtl. habe ich aber auch den falschen Ansatz.


Hier mein Vorschlag über VBA, doch es kommt nichts gescheites bei rum, evtl ist es aber eine Grundlage.
(Mit While Zellenwert = Unwert schieße ich bei der unteren Schleife immer meinen Rechner ins Aus ;) )


Public Function erste_nicht_in_zeile(Suchbereich As Range, Optional Unwert As Double, Optional vonvorne As Boolean)

Dim Laufindex As Long
Dim AktuellerWert As Double
Dim Zaelstufe As Integer
Dim Startspalte As Long
Dim Endspalte As Long
Dim Suchzeile As Long
Dim Tauscher As Long

If IsMissing(Unwert) Then
Unwert = 0
End If

If IsMissing(vonvorne) Then
vonvorne = True
End If

Suchzeile = Suchbereich.End(xlUp).Row
Startspalte = Suchbereich.End(xlToLeft).Column
Endspalte = Suchbereich.End(xlToRight).Column

Zaehlstufe = 1

If vonvorne = False Then
Tauscher = Startspalte
Startspalte = Endspalte
Endspalte = Tauscher
Zaehlstufe = -1
End If

For Laufindex = Startspalte To Endspalte Step Zaehlstufe
AktuellerWert = Cells(Suchzeile, Laufindex).Value
If AktuellerWert > Unwert Then
erste_nicht_in_zeile = Laufindex
Exit Function
End If
Next Laufindex

erste_nicht_in_zeile = Laufindex

End Function


Ich hoffe, Euer Interesse ein wenig geweckt zu haben und bitte um Eure kompetente Hilfe.
Eine Formellösung (Excel2003) ist mir genauso lieb wie VBA.

MfG - MGM

jinx
24.03.2009, 16:54
Moin, MGM,

hast Du bitte einmal ein Beispiel, wo das Anliegen umgesetzt wird?

MGM
25.03.2009, 15:50
Heyho,

danke für die Antwort.

Anbei eine Beispieldatei
(in der originaldatei sind die Zahlen allerdings Formeln, was aber meiner Denke nach nihiliert wird durch das auslesen mit ".Value"?

MfG - MGM

BoskoBiati
25.03.2009, 16:17
Hallo MGM,

würdest Du vor Deinen Code Option explicit setzen, würdest Du feststellen, dass Du Fehler in den Variablen hast: Du deklarierst eine Variable "Zaelstufe" und schreibst im Code "Zaehlstufe"
Nur als Anfangsbemerkung, ohne den Code getestet zu haben.
Aus der Excel-VBA-Hilfe:
Anmerkung IsMissing funktioniert nicht mit einfachen Datentypen (wie Integer oder Double), da diese im Gegensatz zum Datentyp Variant auf ein fehlendes Attribut-Bit nicht vorbereitet sind.

jinx
25.03.2009, 18:48
Moin, MGM,

Function fncSchwellWert(rngZelle As Range, _
Optional varVergleich As Variant = 0, _
Optional varRichtung As Variant = False)

If rngZelle.Count > 1 Then
fncSchwellWert = "Nur eine Zelle zuordnen"
Exit Function
End If

For Each rngZelle In Range(rngZelle, rngZelle.End(xlToRight))
If rngZelle > varVergleich Then
fncSchwellWert = rngZelle.Column
If varRichtung Then Exit Function
End If
Next rngZelle

End Function
Aufruf per VBA:
Sub Aufruf()
Debug.Print fncSchwellWert(Range("G6"), 0, False)
End Sub
Aufruf in einer Zelle:
=fncSchwellWert(G6;0;WAHR)

MGM
26.03.2009, 07:25
Heyho,

ich bin so unendlich dankbar für Eure Hinweise!
Ich habe bei mir einige Fehler feststellen und beheben können, hatte noch einige Denkfehler drin ;).
Danke, ich habe nun genau das, was ich gesucht habe.

MfG - MGM