Hallo XX,
in der Anlage einmal ein Beispielmakro. Und hier einige Bemerkungen:
A. Da ich ungern feste Adressen in die Programme schreibe habe ich zwei benannte Bereiche eingerichtet.
1. Benannter Bereich "Liste" sind die Begriffe in Spalte A
2. Benannter Bereich "Kleinste" sind die zugehörigen Werte
Beide Bereiche müssen gleich lang sein.
B. Ich habe für die Verwaltung ein Dictionary genutzt.
Ab einigen zig Einträgen ist es schneller als ein einfaches Array (und der code ist kürzer).
Ab ca. hunderttausend Einträgen ist in Excel eine Collection ein wenig schneller.
C. Dein Beispiel oder die Beschreibung ist falsch.
-0,2 ist eindeutig kleiner als -0,05
Code:
Option Explicit
Sub Machs()
Dim lngZeile As Long
Dim varKey As Variant
Dim varListe As Variant
Dim varKleinste As Variant
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
'-----------------------------
' in die Arrays übernehmen
'-----------------------------
varListe = ThisWorkbook.Names("Liste").RefersToRange.Value
varKleinste = ThisWorkbook.Names("Kleinste").RefersToRange.Value
'-----------------------------
' ins Dictionary einlesen
'-----------------------------
For lngZeile = 1 To UBound(varListe, 1)
varKey = varListe(lngZeile, 1)
If dict.exists(varKey) Then
If varKleinste(lngZeile, 1) < dict(varKey) Then
dict(varKey) = varKleinste(lngZeile, 1)
End If
Else
dict(varKey) = varKleinste(lngZeile, 1)
End If
Next lngZeile
'-----------------------------
' aus Dictionary schreiben
'-----------------------------
For lngZeile = 1 To UBound(varListe, 1)
varKey = varListe(lngZeile, 1)
varKleinste(lngZeile, 1) = dict(varKey)
Next lngZeile
'-----------------------------
' ins Blatt übergeben
'-----------------------------
ThisWorkbook.Names("Kleinste").RefersToRange.Value = varKleinste
End Sub