Microsoft Excel

Herbers Excel/VBA-Archiv

Ermittlung Zellen mit bestimmtem Inhalt

Betrifft: Ermittlung Zellen mit bestimmtem Inhalt von: Peter
Geschrieben am: 07.11.2014 14:41:57

Guten Tag

Ich möchte eine UDF entwickeln. Damit ich die gewünschten Berechnungen vornehmen kann, sollte ich bestimmen können, in welcher Zelle oberhalb und unterhalb von rng eine Zahl (nicht nur ein numerischer Eintrag) steht. Falls der Wert oberhalb, resp. der Wert unterhalb keine Zahl ist (oder überhaupt kein Eintrag mehr vorhanden ist), soll die Variable blnNeinO resp. blnNeinU auf TRUE gesetzt werden.

Wie kann ich die Position eines allfälligen oberen oder unteren Wertes ausgehend von rng (Zelle wird mit UDF übergeben) bestimmen?

Die Funktion wird dann noch nicht fertig sein, doch mit diesen gesuchten Zwischenergebnissen müsste ich dies dann schaffen.

Gruss, Peter

Option Explicit

Public Function psInt(rng As Range) As Double
Dim rngZelleO As Range, rngZelleU As Range, blnNeinO As Boolean, blnNeinU As Boolean
Debug.Print rng.value
If Application.WorksheetFunction.IsNumber(rng.value) Then
psInt = rng.value
Else

'' Zelle, in welcher oberhalb von rng eine Zahl ist der Variable rngZelleO zuweisen
'' falls nicht zutreffend (leer, Fehlerwert oder Text), blnNeinO den Wert TRUE zuweisen

'' Zelle, in welcher unterhalb von rng eine Zahl ist der Variable rngZelleU zuweisen
'' falls nicht zutreffend (leer, Fehlerwert oder Text), blnNeinU den Wert TRUE zuweisen

End If
End Function

  

Betrifft: AW: Ermittlung Zellen mit bestimmtem Inhalt von: Peter
Geschrieben am: 10.11.2014 14:56:45

Hallo

Nun habe ich's doch noch hingekriegt - mit ein paar Umwegen ...

Gruss, Peter


Option Explicit

Public Function psInt(rng As Range) As Variant
''Mehrjahresintervalle auf einzelne Jahre herunterrechnen

Dim lngIntervall As Long, dblIntervall As Double, dblStep As Double, lngStep As Long

''falls Argument gleich Zahl, dann Wert übernehmen
If Application.WorksheetFunction.IsNumber(rng.value) Then
psInt = rng.value
Else
    '' falls Argument ist Nicht-Zahl und Nicht-Leer - oder unterer Wert oder oberer Wert keine  _
Zahl
    '' kann kein Intervall-Wert ermittelt werden
    If (Not Application.WorksheetFunction.IsNumber(rng.value) And rng.value <> "") _
    Or Not Application.WorksheetFunction.IsNumber(rng.End(xlUp)) _
    Or Not Application.WorksheetFunction.IsNumber(rng.End(xlDown)) Then
    psInt = ""
    
    Else
    
    ''  ermitteln, wieviele Stufen (Zeilen) zwischen unterem und oberem Wert betsehen
    lngIntervall = rng.End(xlDown).Row - rng.End(xlUp).Row
    ''  betragsmässige Abweichung zwischen unterem und höherem Wert ermitteln
    dblIntervall = rng.End(xlDown).value - rng.End(xlUp).value
    ''  betragsmässige Veränderung pro Stufe ermitteln
    dblStep = Int(dblIntervall / lngIntervall)
    ''  Position von unterem Wert ermitteln
    lngStep = rng.Row - rng.End(xlUp).Row
    ''  unterer Wert und Positionen gemäss aufrufender Zelle mal Betragsmässige Veränderung  _
addieren
    psInt = rng.End(xlUp).value + (dblStep * lngStep)
    End If

End If

End Function

https://www.herber.de/bbs/user/93654.xlsm


 

Beiträge aus den Excel-Beispielen zum Thema "Ermittlung Zellen mit bestimmtem Inhalt"