Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Funktion "Rang" in VBA-Makro

625 views
Skip to first unread message

Frank Clasen

unread,
Sep 7, 1998, 3:00:00 AM9/7/98
to
Hallo,

ich möchte aus einem Datenbereich die 5 besten und die 5 schlechtesten Werte
ermitteln und an einer anderen Stelle in der Arbeitsmappe einfügen.
Im Moment habe ich das mit der Tabellenfunktion "Rang" erledigt, indem ich
in einer For... Next-Schleife die Werte ermittel und weiterverarbeite.
Problem ist, daß beim Öffnen der Datei der Dialog erscheint ob die
enthaltenen Verknüpfungen aktualisiert werden sollen, außerdem scheint es
mir nicht unbedingt die schnellste Methode zu sein - die Verarbeitungzeit
des Makros hat sich verdreifacht :-((.

Application.DisplayAlerts=False unterdrückt die Nachfrage auch nicht.

So nun zur Frage, gibt es eine Möglichkeit den "Rang" eines Wertes in einem
Datenbereich mit einer VBA-Routine zu ermitteln und vielleicht zusätzlich
auch noch schnell ist??

Danke im voraus.

Frank


--

frank....@usa.net

Hans W. Herber

unread,
Sep 9, 1998, 3:00:00 AM9/9/98
to
Hallo Frank,

aus der Rang-Funktion, die sich auf Daten in der aktiven Arbeitsmappe
bezieht, kann sich der Verknüpfungsdialog an und für sich nicht ergeben.

Im folgenden zwei Makrobeispiele zum Einsatz der Rang-Funktion via VBA.

Eintrag des Wertes:
-------------------
Sub RangErmitteln()
Dim i%
For i = 1 To 10
Cells(i, 2) = Application.Rank _
(i, Columns("a"))
Next i
End Sub

Eintrag der Formel:
-------------------
Sub RangErmitteln()
Dim i%
For i = 1 To 10
Cells(i, 2).Formula = _
"=Rank(" & i & ", A:A)"
Next i
End Sub

Beide Wege sollten zu keinem Zeitproblem führen.

hans

########################################################
# Herber's Excel-Server - letztes Update: 31.08.98 #
# http://www.herber.de - Microsoft MVP - Excel #
# Neu bei den Demos97: Der Office-Assistent in Aktion #
# Excel-NG-Autoren: http://www.herber.de/dejanews.htm #
########################################################

Frank Clasen <frank....@usa.net> wrote in message
35f43...@news2.cityweb.de...

Frank Clasen

unread,
Sep 9, 1998, 3:00:00 AM9/9/98
to
Hallo Hans,

danke für die Antwort, klappt alles prima. Der Verknüpfungsdialog taucht
nicht mehr auf, warum auch immer.
Die Geschwindigkeit ist in der Tat nicht höher, muß wohl mal weiter nach
einem anderen "Bock" suchen.

Frank


Hans W. Herber schrieb in Nachricht
<#9uXGA62...@uppssnewspub05.moswest.msn.net>...

Hans Werner Hofmann

unread,
Sep 10, 1998, 3:00:00 AM9/10/98
to
On Mon, 7 Sep 1998 22:19:58 +0200, in microsoft.public.de.excel you
wrote:

>Hallo,


>
>ich möchte aus einem Datenbereich die 5 besten und die 5 schlechtesten Werte
>ermitteln und an einer anderen Stelle in der Arbeitsmappe einfügen.

Ich würde das über eine Array-Funktion machen, etwa:

Option Base 1

Function Rangfolge(Bereich As Range, Top As Integer)
' Nach Konstruktion wird ein Zeilenarray zurückgeliefert
Dim Result() As Variant
ReDim Result(Top, 1)
i = 1: j = 1
While j <= Bereich.Count Or i <= Top
n = Application.Rank(Bereich(j), Bereich)
If n <= Top Then
Result(n, 1) = Bereich(j)
i = i + 1
End If
j = j + 1
Wend
Rangfolge = Result
End Function

Du muß die Funktion in der Anzahl 'Top'-Zeilen als Arrayfunktion
eintragen - falls Du das Ergebins über die Spalten verteilen willst
muß Du in Redim/Result Zeile und Spalte tauschen...
Die Funktion in der Konstruktion läßt allerdings die Dubletten aus
(Result=0), da nicht belegt. Ggf muß Du das Deiner Wuschbehandlung
anpassen.

Gruß HW
--
---==## Hans Werner Hofmann ##==---
Fachschule fuer Lebensmitteltechnik
E.C.Baumann-Str.22 95326 Kulmbach
INFO: http://www.tmt.de/~hhofmann

Martin Beck

unread,
Sep 10, 1998, 3:00:00 AM9/10/98
to

Frank Clasen schrieb in Nachricht <35f43...@news2.cityweb.de>...

>ich möchte aus einem Datenbereich die 5 besten und die 5 schlechtesten
Werte
>ermitteln und an einer anderen Stelle in der Arbeitsmappe einfügen.
<snip>

>So nun zur Frage, gibt es eine Möglichkeit den "Rang" eines Wertes in einem
>Datenbereich mit einer VBA-Routine zu ermitteln und vielleicht zusätzlich
>auch noch schnell ist??


Hallo Frank,
stehen die Zellen des Datenbereichs in einer Spalte? Wenn ja, kannst Du Dir
wie folgt behelfen:

Neben der Wertespalte eine Hilfsspalte einfügen und die zum Datenbereich
korrespondierenden Zellen von 1 bis xxx durchnumerieren.

Daten- und Hilfsbereich markieren und je einmal absteigend bzw. aufsteigend
nach dem Datenbereich sortieren und die jeweils ersten fünf Werte entnehmen.

Daten- und Hilfsbereich markieren und aufsteigend nach dem Hilfsbereich
sortieren. Hilfsspalte löschen (oder ausblenden).

Gruß
Martin Beck

0 new messages