2.1k Aufrufe
Gefragt in Tabellenkalkulation von
Hi Leute ich brauch mal eure Hilfe:
Ich hab folgende Tabelle:
a b c d e f
10 0 0 10 30 50
30 30 10 20 10 100
30 40 0 30 10 110
10 20 10 10 20 70
10 10 20 0 10 50

Spalte f ist die Summe der entsprechenden Zeile. Jetzt will ich, wenn das Min aus Spalte f mehr als einmal vorkommt, dass excel mir dann die Zelleneinträge, der beiden Min Zeilen, solange vergleicht, bis eine Abweichung vorkommt und dann soll mir excel die MinZeile zurückgeben, in der die Kleinere Zahl steht.
vielen Dank
Michi

7 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

ist zumindest mit dem Beispel nicht machbar.

Minimum Zeile = 50 in Zeile 1 und 5
Minimum Spalte in Zeile 1 =0
Minimum Spalte in Zeile 5 = 0

kein gelungenes Beispiel, wird sowieso mit Formeln ganz schwierig.

Gruß

Helmut
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Helmut,

in der Zeile sollte nicht das min. gescht werden sondern:

solange vergleicht, bis eine Abweichung vorkommt

Zu der Aussage mit Formel, stimme ich zu. Obwohl kein Formelmensch.

Gruß Hajo
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

also ich als formelnoob hab mich mal probiert :-))

=WENN(KKLEINSTE(D2:D4;1)<KKLEINSTE(D2:D4;2);KKLEINSTE(A2:C2;1);KKLEINSTE(A2:C2;2))

bin natuerlich ersteinmal gescheitert *grrr*

was in der formel nun noch fehlt ist bei den letzten beiden kkleinste einen zeilenindex des gefundenen fundes einzuarbeiten,jede wette das das geht :-)

koennte irgenwie ueber index gehen denke ich,fragt sich nur wie :-))

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

huhu wo bleiben denn hier die formelfreaks,das glaube ich erstmal spontan nicht,das es dafuer keine loesung gibt,werd nachher erstmal eine benutzerefinierte function schreiben,erstmal als notloesung *grrrr*

gruss nighty

p.s.
*mir ist zur zeit wirklich nichts eingefallen um die profis aus der reserve zu locken grummel'
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo Nighty,

vielleicht liegt es einfach daran, dass diese kleine Tabelle problemlos im Kopf 'analysiert' werden kann, eine dafür mit viel Aufwand geschaffene reine Formel-Lösung aber nicht auf eine größere Tabelle anwendbar ist. Es werden dann einfach zu viele Argumente, oder man müsste mit Hilfstabellen arbeiten um das zu umgehen.

Eventuell äußert sich Michi mal, für welche Größenordnung dass später funktionieren soll oder stellt eine entsprechende Mustertabelle zum Download bereit.

Gruß
Kalle
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

eine erste noch nicht zufriedenstellende variante

zur zeit nur auf doppelte von 2 treffern bezogen

gruss nighty

einzufuegen
alt+f11/allgemeinesmodul

die function ist nun unter function einfuegen benutzerdefiniert errreichbar

Function BereichKleinste(BereichWerte;BereichSummierung)

Function BereichKleinste(BrKl As Range, BrSu As Range) As Long
Application.Volatile
Dim Zelle As Range
Dim Kl1 As Long, Kl2 As Long, Rk1 As Long, Rk2 As Long
Kl1 = Rows.Count
Kl2 = Rows.Count
For Each Zelle In BrKl
If Zelle.Value < Kl1 Or Zelle.Value = Kl1 Then
Kl2 = Kl1
Rk2 = Rk1
Kl1 = Zelle.Value
Rk1 = Zelle.Row
End If
Next Zelle
For Each Zelle In BrSu
If Zelle.Row = Rk1 And Zelle.Value < Kl1 Or Zelle.Row = Rk2 And Zelle.Value < Kl1 Then
Kl1 = Zelle.Value
End If
Next Zelle
BereichKleinste = Kl1
End Function


ich werde noch eine dynamische trefferanzahl versuchen einzubauen :-)
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

nach einigen huerden,kam das dabei heraus :-))

gruss nighty

=BereichKleinste(BereichWerte;BereichSummierung)

Option Explicit

Function BereichKleinste(BrKl As Range, BrSu As Range) As Long
Application.Volatile
Dim Zelle As Range
Dim IndexB As Long, SuchZelle As Long, Puffer As Long
Dim KlWert() As Long
Dim KlPos() As Long
IndexB = 1
Puffer = Rows.Count
For Each Zelle In BrKl
If Zelle.Value < Puffer Then
Puffer = Zelle.Value
End If
Next Zelle
For Each Zelle In BrKl
If Zelle.Value = Puffer Then
ReDim Preserve KlWert(1 To IndexB)
ReDim Preserve KlPos(1 To IndexB)
KlWert(IndexB) = Zelle.Value
KlPos(IndexB) = Zelle.Row
IndexB = IndexB + 1
End If
Next Zelle
Puffer = Rows.Count
For Each Zelle In BrSu
For SuchZelle = 1 To IndexB - 1
If Zelle.Row = KlPos(SuchZelle) And Zelle.Value < Puffer Then
Puffer = Zelle.Value
End If
Next SuchZelle
Next Zelle
BereichKleinste = Puffer
End Function
...