Clever-Excel-Forum

Normale Version: In Spalte A die nächstgrößere Zahl finden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

mir hatte gestern Stefan mit folgendem Programmierbefehl sehr geholfen:

Dim i%
i = ActiveCell.Value + 1
Range("A:A").Find(i, lookat:=xlWhole).Activate

In der Spalte A wird dabei also die Adresse gefunden, in der die um eins größere (oder auch um eins kleinere, dann natürlich mit -1 ) Zahl, als die in der aktiven Zelle steht.
Doch für mich taucht jetzt das nächste Problem dabei auf. Wieder habe ich in der Spalte A aufsteigende Zahlen. Nur muss sich dabei ja nicht zwangsläufig der Wert der einzelnen Zahlen jeweils um eins erhöhen.
Der Abstand von einer Zahl zur nächst höheren Zahl könnte ja auch 2, 5, oder 10000 sein.

Meine Frage also: Wie finde ich die nächstgrößere Zahl?
(ohne eine Schleife einzusetzen, dass bekomme ich noch selbst hin.)
Hallo lupy,

Deine Fragestellung im Betreff würde ich mit einer Formel lösen. Angenommen Deine "Basis"Zahl steht in E1 dann einfach:

=KGRÖSSTE(A1:A99;ZÄHLENWENN(A1:A99;">"&E1))

Gibt es keine größere Zahl in dem ausgewiesenen Bereich gibt es eine Fehlermeldung.
Hallo Lupy,

vielleicht so:
Sub abc()
 Dim i As Long
 i = Evaluate("=MIN(IF(A:A>" & ActiveCell.Value & ",A:A,MAX(A:A)))")
 Range("A:A").Find(i, lookat:=xlWhole).Activate
End Sub
Gruß Uwe
PHP-Code:
=match(12,A1:A2000;1
E2: =INDEX(A:A;VERGLEICH(E1;A:A)+1)

da E1 den Exakt-Vorgänger aus A:A enthält und A:A up-sortiert ist. In VBA das Gleiche mit Application.Match.
Danke.

@SNB
du scheinst hier wieder eine superkurze Lösung zu haben. Leider bekomme ich deinen Lösungsvorschlag (mangels Kenntnissen) nicht in mein VBA Programm eingebaut.
Bitte ergänze dies, wenn möglich. Wäre daran doch sehr interessiert.
Zeig mal diene Beispieldatei.
@Snb
Hallo,

habe mich nochmal selbst damit beschäftigt eine möglichst geniale Lösung zu finden. Leider vergeblich.
Die Formellösung von Uwe war bislang die kürzeste LSG. Leider ist dieser Ansatz aber recht langsam.
Dein Vorschlag mit Application.match zu suchen ist auch eine interessante Alternative.

Vielleicht fällt dir ja noch eine gute Lösung ein.
Hi,

einfache Formellösung:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABC
11  
22  
3 ZeileZahl
45A68
5 A6 
68  
7   
8   
9   
1010  

ZelleFormel
B4="A"&VERGLEICH(MIN(INDEX(A:A;ZEILE()+1):$A$999);INDEX(A:A;ZEILE()+1):$A$999;0)+ZEILE()
C4=MIN(INDEX(A:A;ZEILE()+1):$A$999)
B5="A"&VERGLEICH(C4;A:A;0)
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Daraus kannst Du ja ein Makro basteln.
In Excel in B4:


PHP-Code:
=IFERROR(ADDRESS(MATCH(SMALL($A$1:$A$100;RANK(A4;$A$1:$A$100;1)+1);$A$1:$A$100;0);1);""

In VBA als UDF

Code:
Function F_snb(y)
   F_snb = ""
   If y <> "" Then F_snb = Cells(Application.Match(Application.Small(Range("A1:A100"), Application.Rank(y, [A1:A100], 1) + 1), [A1:A100], 0), 1).Address
End Function
Seiten: 1 2