Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1304to1308
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

Zweitgrößte Variable bestimmen

Zweitgrößte Variable bestimmen
18.03.2013 18:33:18
TheBeginner
Hallo zusammen,
ich lege fünf verschiedene Werte in fünf verschiedenen Variablen ab. Wie ich die größte und kleinste Variable bestimmen kann weiß ich. Aber wie kann ich die zweitgrößte Variable herausfinden und den Namen der Variablen zur weiteren Verarbeitung an das Programm übergeben?
Könnte mir hier jemand bitte helfen?
Gruß
Richard

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zweitgrößte Variable bestimmen
18.03.2013 18:36:42
Hajo_Zi
Halo Richard,
WorksheetFunction.Large()
=KGRÖSSTE(A1:A4;2) in Tabelle.

A1:A4 konnte ich in der Frage nicht finden kwT
18.03.2013 18:38:09
Matthias

AW: das war auch nur ein Beispiel, für Tabelle.
18.03.2013 18:39:48
Hajo_Zi
den maximalen wert ermittelt man mit Max.
Gruß Hajo

AW: Zweitgrößte Variable bestimmen
18.03.2013 18:38:31
TheBeginner
Hallo Hajo,
danke für die Info. Ich habe die Werte aber nur in Variablen in VBA vorliegen. Die Werte stehen in der Tabelle nicht zur Verfügung, da diese Werte mittels Makro erst berechnet werden müssen.
Gruß
Richard

Anzeige
AW: Zweitgrößte Variable bestimmen
18.03.2013 18:46:20
Hajo_Zi
Hallo Richard,
schreibe die Werte in ein Array.#
Sub Testz()
Dim Variable1
Variable1 = Array(1, 22, 5, 4)
MsgBox WorksheetFunction.Large(Variable1, 2)
End Sub
Gruß Hajo

AW: Zweitgrößte Variable bestimmen
18.03.2013 18:56:26
TheBeginner
Hallo Hajo,
danke für die Info. Funktioniert perfekt.
Wie kann ich feststellen, welche aus welcher Varible der Wert kommt? Kann man das direkt abfragen oder muss ich einen mühsamen Vergleich durchführen?
Gruß
Richard

wie bestimmst Du denn die größte Variable
18.03.2013 18:36:44
Matthias
Hallo
Das sollte evtl. schon der Weg zur 2.größten Variable sein.
Gruß Matthias

Anzeige
AW: wie bestimmst Du denn die größte Variable
18.03.2013 18:39:41
TheBeginner
Hallo Matthias,
den größten Wert kann man mittels
WorksheetFunction.Max(Variable1, Variable2, Variable3,...)

bestimmt werden.
Gruß
Richard

AW: wie bestimmst Du denn die größte Variable
18.03.2013 18:52:33
Tino
Hallo,
evtl. so. (ich würde die Variablen gleich in einem Array einbauen)
Sub Beispiel()
Dim V1, V2, V3, V4, V5
V1 = 10
V2 = 5
V3 = 25
V4 = 7
V5 = 1
MsgBox Application.Small(Array(V1, V2, V3, V4, V5), 4)
End Sub
Gruß Tino

Solltest Du mit Hajos Antwort nicht klar kommen ..
18.03.2013 18:54:41
Matthias
Hallo
Hier mal so, das man es versteht
Option Explicit
Sub test()
Dim VariableGes
Dim Variable1&
Dim Variable2&
Dim Variable3&
Variable1 = 2
Variable2 = 30
Variable3 = 20
VariableGes = Array(Variable1, Variable2, Variable3)
MsgBox WorksheetFunction.Large(VariableGes, 2)
End Sub
Gruß Matthias

Anzeige
AW: Zweitgrößte Variable bestimmen
18.03.2013 18:53:21
Erich
Hi Richard,
hilft dir das weiter?

Sub KGroessteVonFuenf()
Dim ii As Double, jj As Double, kk As Double, ll As Double, mm As Double
Dim ww(1 To 5) As Double
Dim myGroesste As Double, myZweitgroesste As Double
ii = 7
jj = 8
kk = 2
ll = 10
mm = 5
ww(1) = ii
ww(2) = jj
ww(3) = kk
ww(4) = ll
ww(5) = mm
myGroesste = Application.Max(ww)
myZweitgroesste = Application.Large(ww, 2)
End Sub
Die Werte der fünf einzelnen Variabblen ii bis mm werden in ein Array ww() übertragen.
Dann ist fallen MAX und KGRÖSSTE leicht.
Mit den Variablen myGroesste und myZweitgroesste kannst du weiterarbeiten.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Zweitgrößte Variable bestimmen
18.03.2013 19:01:25
TheBeginner
Hallo Erich,
vielen Dank für die Antwort.
Mein Makro sieht folgendermaßen aus:
'Länge der Datenreihen bestimmen
Worksheets("Versuch1").Activate
anz_v1 = WorksheetFunction.Count(Columns(3))
Worksheets("Versuch2").Activate
anz_v2 = WorksheetFunction.Count(Columns(3))
Worksheets("Versuch3").Activate
anz_v3 = WorksheetFunction.Count(Columns(3))
'Minimale und maximale Datenreihenlänge bestimmen
tripel = Array(anz_v1, anz_v2, anz_v3)
minimum = WorksheetFunction.Min(anz_v1, anz_v2, anz_v3)
maximum = WorksheetFunction.Max(anz_v1, anz_v2, anz_v3)
mittel = WorksheetFunction.Large(tripel, 2)

Wie kann ich nun neben dem reinen Wert auch den Variablennamen erhalten? Diesen brauche ich nämlich um die Zuordnung zwischen Versuch1 bis Versuch3 zu erhalten.
Gruß
Richard

Anzeige
AW: Zweitgrößte Variable bestimmen
18.03.2013 19:29:19
Erich
Hi Richard,
so ganz klar wird nicht, was du mit "um die Zuordnung zwischen Versuch1 bis Versuch3 zu erhalten" meinst.
Mit dem Variablennamen wirst du nichts anfangen können. Wie und wo willst du den speichern? Als String?
Was bestimmt werden kann, ist eine Position in einem Array, mit Match (VERGLEICH).
Das passiert in diesen drei Varianten:

Option Explicit
Sub Beginner1()
Dim anz_v1 As Long, anz_v2 As Long, anz_v3 As Long
Dim tripel
Dim minimum As Long, Maximum As Long, mittel As Long
Dim pos As Integer
'Länge der Datenreihen bestimmen
Worksheets("Versuch1").Activate
anz_v1 = WorksheetFunction.Count(Columns(3))
Worksheets("Versuch2").Activate
anz_v2 = WorksheetFunction.Count(Columns(3))
Worksheets("Versuch3").Activate
anz_v3 = WorksheetFunction.Count(Columns(3))
'Minimale und maximale Datenreihenlänge bestimmen
tripel = Array(anz_v1, anz_v2, anz_v3)
minimum = WorksheetFunction.Min(anz_v1, anz_v2, anz_v3)
Maximum = WorksheetFunction.Max(anz_v1, anz_v2, anz_v3)
mittel = WorksheetFunction.Large(tripel, 2)
pos = WorksheetFunction.Match(Maximum, tripel, 0)
MsgBox "Maximum in Versuch" & pos
pos = WorksheetFunction.Match(mittel, tripel, 0)
MsgBox "Zweitgrößtes in Versuch" & pos
End Sub
Sub Beginner2()
Dim tripel(1 To 3) As Long
Dim minimum As Long, Maximum As Long, mittel As Long
Dim pos As Integer
'Länge der Datenreihen bestimmen
With WorksheetFunction
tripel(1) = .Count(Worksheets("Versuch1").Columns(3))
tripel(2) = .Count(Worksheets("Versuch2").Columns(3))
tripel(3) = .Count(Worksheets("Versuch3").Columns(3))
'Minimale und maximale Datenreihenlänge bestimmen
minimum = WorksheetFunction.Min(tripel)
Maximum = WorksheetFunction.Max(tripel)
mittel = WorksheetFunction.Large(tripel, 2)
pos = .Match(Maximum, tripel, 0)
MsgBox "Maximum in Versuch" & pos
pos = .Match(mittel, tripel, 0)
MsgBox "Zweitgrößtes in Versuch" & pos
End With
End Sub
Sub Beginner3()
Dim tripel(1 To 3) As Long, ii As Integer
Dim minimum As Long, Maximum As Long, mittel As Long
Dim pos As Integer
'Länge der Datenreihen bestimmen
With WorksheetFunction
For ii = 1 To 3
tripel(ii) = .Count(Worksheets("Versuch" & ii).Columns(3))
Next ii
'Minimale und maximale Datenreihenlänge bestimmen
minimum = WorksheetFunction.Min(tripel)
Maximum = WorksheetFunction.Max(tripel)
mittel = WorksheetFunction.Large(tripel, 2)
pos = .Match(Maximum, tripel, 0)
MsgBox "Maximum in Versuch" & pos
pos = .Match(mittel, tripel, 0)
MsgBox "Zweitgrößtes in Versuch" & pos
End With
End Sub
Reicht dir das aus?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Korrektur
18.03.2013 19:33:13
Erich
Hi Richard,
wenn man mit einer With-Klammer arbeiten, sollte man sie auch immer nutzen.
Das habe ich in der 2. und 3. Prozedur nicht durchgehalten.
So ist es besser:

Sub Beginner2()
Dim tripel(1 To 3) As Long
Dim minimum As Long, Maximum As Long, mittel As Long
Dim pos As Integer
'Länge der Datenreihen bestimmen
With WorksheetFunction
tripel(1) = .Count(Worksheets("Versuch1").Columns(3))
tripel(2) = .Count(Worksheets("Versuch2").Columns(3))
tripel(3) = .Count(Worksheets("Versuch3").Columns(3))
'Minimale und maximale Datenreihenlänge bestimmen
minimum = .Min(tripel)
Maximum = .Max(tripel)
mittel = .Large(tripel, 2)
pos = .Match(Maximum, tripel, 0)
MsgBox "Maximum in Versuch" & pos
pos = .Match(mittel, tripel, 0)
MsgBox "Zweitgrößtes in Versuch" & pos
End With
End Sub
Sub Beginner3()
Dim tripel(1 To 3) As Long, ii As Integer
Dim minimum As Long, Maximum As Long, mittel As Long
Dim pos As Integer
'Länge der Datenreihen bestimmen
With WorksheetFunction
For ii = 1 To 3
tripel(ii) = .Count(Worksheets("Versuch" & ii).Columns(3))
Next ii
'Minimale und maximale Datenreihenlänge bestimmen
minimum = .Min(tripel)
Maximum = .Max(tripel)
mittel = .Large(tripel, 2)
pos = .Match(Maximum, tripel, 0)
MsgBox "Maximum in Versuch" & pos
pos = .Match(mittel, tripel, 0)
MsgBox "Zweitgrößtes in Versuch" & pos
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige