2017-05-16 2 views
0

Das Problem zusätzliche:Excel VBA - Finden Sie die Adresse des maximalen (oder einen bestimmten Wert) in Reichweite, wenn der Bereich DOUBLE Werte

Es gibt eine Reihe mit Double-Werten. Ich möchte die Adresse des Maximalwertes erhalten. Ich habe versucht, mit der Match-Funktion, aber es kann nicht verdoppelt (gibt falsche Ergebnisse), und mein Bereich ist nicht geordnet.

Es gibt hässliche Lösungen (zum Beispiel kann ich meine Zahlen mit 10000 multiplizieren, wenn ich 5-stellige Genauigkeit, dann den ganzzahligen Teil bekommen und vergleichen, aber es ist sehr langsam mit mehr als 20000 Zeilen) und vielleicht gibt es elegantere Lösungen.

Beispieldaten :) Danke: Dies sind die Zahlen nach Debug.Print

B 7.59999999999934E-02 
C 7.00000000000074E-02 
D 0.335000000000008 
E 8.19999999999936E-02 
F 8.49999999999937E-02 
G 7.39999999999981E-02 
H 5.49999999999926E-02 
I 0.070999999999998 
J 0.165000000000006 
K 7.59999999999934E-02 
+0

Können Sie einige Beispieldaten posten? – BruceWayne

+0

Ich denke, die beste Lösung ist, die Max-Funktion von Excel zu vergessen, und schreibe meine eigene maximale Funktion, wo ich die Adresse der tatsächlichen maximalen Anzahl verfolgen kann. –

Antwort

0

Warum nicht nur Ihrem Bereich durchlaufen und eine Variable ändern, wenn der nächste Zelle doppelte Wert größer ist? Sobald Sie diesen Bereich beendet haben, verwenden Sie den Befehl zum Zurückgeben der Zellenzeile und -spalte. Siehe unten

Dim i as Variant 
For Each i In Worksheets("yourWorkSheet").Range(Range("youStartCell"), Range("yourStartCell").End(xlDown)).Cells 
    If i.Offset(-1) < i Then 
     i = i.value 
    End if 
Next 

Sollte in etwa so aussehen. Müssen Sie die erste Zeile Fall in Schleife behandeln, aber wenn ich das getan hätte, hätten Sie keine Arbeit zu tun.

+0

Ja, danke. Dies ist einer benutzerdefinierten Max-Funktion sehr ähnlich. Ich habe einen ähnlichen Ansatz gemacht :) –

+0

upvote für gutes Karma, keine upvote = badluck –

+0

Ich habe versucht, zu verbessern, aber ich habe weniger als 15 Ruf. Ich habe die Seite nicht zu oft benutzt. Also ist die Abstimmung für mich deaktiviert. –

0

Dies ist meine letzte Lösung:

'Find max and its address in range 
Public Function maxAddress(rng As Range) As DoubleLong 

Dim cell As Range 

For Each cell In rng 
    If IsNumeric(cell.Value2) Then 
     If cell.Value2 > maxAddress.db Then 
      maxAddress.db = cell.Value2 
      maxAddress.lg = cell.Row 
     End If 
    End If 
Next cell 
End Function 

wo eine Art definiert:

Public Type DoubleLong 
    db As Double 
    lg As Long 
End Type 
Verwandte Themen