Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Finde nächstkleineren Wert

Finde nächstkleineren Wert
24.11.2014 17:12:28
Catherin
Hallo,
ich suche eine Lösung im VBA für folgendes Problem:
Ich möchte aus einer Spalte den Zellindex finden, in der die Zahl steht, die am dichtestes bei der gesuchten Zahl liegt (also der nächstkleinere oder der nächstgrößere Wert).
Als Beispiel:
In der Spalte stehen in den Zeilen 1 bis 4 die Werte 1.2 3.4 5.6 7.8 9.0
Wenn ich nun nach 6.1 suche, möchte ich als Ergebnis 3 (da 5.6 - der nächstkleinere Wert in Zeile 3 steht)
Ich habe mich schon an der Find-Funktion versucht, jedoch leider ohne Erfolg.
In Excel gibt es z.B. beim SVerweis die Möglichkeit über den Bereich_Verweis einzustellen, dass der identische oder eben auch der am dichtesten dran liegende Wert gesucht wird. Gibt es das auch für die Find-Funktion?
Vielen Dank für die Unterstützung.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Finde nächstkleineren Wert
24.11.2014 17:36:19
Daniel
Hi
nein, die .FIND-Funktion sucht immer nach der genauen übereinstimmung, ähnlich wie der SVerweis mit 4. Parameter = FALSCH.
Bei Texten ist zwar die Verwendung von Jokerzeichen möglich oder die Suche nach Teilinhalten, aber eine Suchmöglichkeit "am dichtesten dran" gibt es nicht.
Eine Lösungsmöglichkeit wäre:
1. Schreibe in eine Hilfsspalte eine Formel, die die Absolute Differenz zum Suchwert ermittelt (dh ohne Vorzeichen): =ABS(A1-5,6)
2. Ermittle in dieser Hilfsspalte den Kleinsten Wert über die MIN-Funktion, diesen kannst du dann mit .FIND suchen lassen, oder mit der VERGLEICHS-Funktion.
sieht als VBA in etwa so aus:
dim Suchwert as Double
dim Ergebniszeile as long
Suchwert = 5.6
With Range("B1:B4")
.FormulaR1C1 = "=ABS(RC1-" & Suchwert & ")"
Ergebniszeile = Worksheetfunction.Match(Worksheetfunction.Min(.Cells), .Cells, 0)
End With
Gruß Daniel

Anzeige
mit VERGLEICH() kann es ganz einfach sein ...
25.11.2014 09:45:55
neopa
Hallo Catherin,
... doch da wäre zunächst zu klären, um was für Werte es sich bei Dir in Spalte A handelt.
Sollen es evtl. Zahlenwerte sein und Du arbeitest mit dem Punkt als Dezimaltrennzeichen? Oder sind es wirklich Textwerte mit Punkt, die lediglich Ziffern neben dem Punkt enthalten und Du arbeitest ansonsten mit dem Komma als Dezimaltrennzeichen?
Im ersteren Fall ganz einfach: =WENNFEHLER(VERGLEICH(C1;A:A);"keine Zahlenwerte") wobei Du die WENNFEHLER()-Klammerung Dir auch sparen kannst.
Im zweiteren Fall: {=WENNFEHLER(VERGLEICH(--WECHSELN(C1;".";",");--WECHSELN(A1:A99;".";","));"es gibt außer Ziffern und Punkten auch andere Zeichen")} wobei es sich hier um eine Matrixformel handelt;
Umrandende { } sind nicht miteingeben, sondern die Formel mit STRG+SHIFT+RETURN abschließen!
Gruß Werner
.. , - ...

Anzeige
AW: Finde nächstkleineren Wert
25.11.2014 12:10:28
Catherin
Danke Daniel, Danke Werner!
Ich habe eine Kombination aus euren Vorschlägen gebastelt.
Sie sieht nun folgendermaßen aus:
Zeile_MM_Min = WorksheetFunction.Match(MM_Min, MM_all, -1)
mit
Zeile_MM_Min: Position im Array = gesuchte Zeile
MM_Min: Der Wert den ich suche (war im Beispiel 5.6)
MM_all: Array mit all den Werten, die ich durchsuchen möchte (war im Beispiel 1.2 3.4 5.6 7.8 9.0)
Bisher funktioniert es wie gewünscht.

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige