Microsoft Excel

Herbers Excel/VBA-Archiv

Nach nächster Zelle mit Werten suchen

Betrifft: Nach nächster Zelle mit Werten suchen von: Justin Hoppe
Geschrieben am: 06.10.2020 09:31:00

Guten Morgen,

ich habe gestern schon ewig versucht es alleine hinzubekommen, bin aber aufgrund meiner beschränkten Kenntnisse nicht erfolgreich gewesen. In der angehangen XLSM findet Ihr meine Situation: Am Beispiel der rot markierten Zelle (O25), möchte ich wenn die offset (-1,-1) Zelle einen Wert hat, das O25 1 ist, wenn in der Zelle O24 ein Wert drin ist, soll O25 deren Wert +1 bekommen. Wenn keiner der beiden Fälle wahr ist, soll nach der nächsten Zelle in Spalte O gesucht werden die einen Wert hat (hier im Beispiel O18 mit Wert 3). Fälle 1 & 2 liessen sich auch in Excel lösen, 3 allerdings nicht aufgrund der top-down Suche.


Anstatt in Spalten K-T, können alternativ auch A-J benutzt werden um die Werte in K-T festzulegen

Ich habe den Code den ich bis jetzt aufstellen konnte hier hochgeladen: https://www.herber.de/bbs/user/140684.xlsm

Und hier steht er nochmal:




Public Function AssignAccountNumber(ByVal rangeX As Range) As Integer


Dim arrayBottom As Range
Dim arrayTop As Range
Dim immediateParent As Range
Dim immediateSibling As Range

    arrayBottom = rangeX.Offset(-1, 0)
    arrayTop = rangeX.End(xlUp).Offset(1, 0)

    immediateParent = rangeX.Offset(-1, -1)
    immediateSibling = rangeX.Offset(-1, 0)

Dim arrayAbove() As Range
Dim arrayRows As Integer

    arrayAbove() = Range(arrayBottom, arrayTop)
    arrayRows = arrayAbove.Rows.Count
    
Dim looper As Integer

        If immediateParent.Value <> "" Then
    
            rangeX.Value = 1
    
        ElseIf immediateSibling.Value <> "" Then
    
            rangeX.Value = immediateSibling.Value + 1
            
        Else
        
            For looper = arrayRows To 1
            
                If arrayAbove(looper, 0) <> "" Then
                
                Set AssignAccountNumber = arrayAbove(looper, 0).Value + 1
                             
                
            Next

End Function


Vielen Dank im Voraus an alle die sich die Mühe machen über diese Problem nachzudenken und mir helfen könnten wie ich es löse!

Betrifft: AW: Angaben sind mE so noch nicht eindeutig, ...
von: neopa C
Geschrieben am: 06.10.2020 11:50:38

Hallo Justin ,

... wenn ich mir Deine ermittelten Werte ab P54 nach unten anschaue.

Logischer erscheint mir da folgende Formel in L8:

=WENN(B8="";"";WENN(A7="";VERWEIS(9^9;L7:L$8)+1;1))

und diese Formel nach rechts und unten ziehend kopiert.

Oder?

Gruß Werner
.. , - ...

Betrifft: AW: Angaben sind mE so noch nicht eindeutig, ...
von: Justin Hoppe
Geschrieben am: 06.10.2020 14:07:08

Hallo Werner, hatte es auch erst mit ganz vielen IF/WENN versucht, Excel mag aber leider nicht mehr als 64 nested IFs und es gibt viele Fälle wo der gesucht Wert in 200 Reihen darüber steht..

Für alle die es interessiert, ich habe es mittlerweile (deutlich einfacher) gelöst bekommen:
Public Function incrOffset(ByVal currRange As Range) As Integer

Dim maxOffset As Integer
maxOffset = 500


Dim looper2 As Integer

For looper2 = 1 To maxOffset

    If currRange.Offset(looper2 * -1, 0).Value <> "" Then

        incrOffset = currRange.Offset(looper2 * -1, 0).Value + 1
    
Exit Function

    End If



Next


End Function