Discussion:
zweitgrößten Wert einer Zeile mit vba und als Schleife ermitteln
(zu alt für eine Antwort)
f***@googlemail.com
2008-08-30 11:30:44 UTC
Permalink
Hallo zusammen,

ich habe ein kleines Problem mit einer Makroprogrammierung und hoffe,
dass Ihr mir helfen könnt!

Ich habe ein Tabellenblatt auf dem ich für ein jeweiliges Datum vier
Preise habe. Nun möchte ich gerne für jeden Tag den zweitkleinsten und
den zweitgrößten Wert durch ein Makro ermitteln und ein die
entsprechende Zelle, der aktuellen Zeile schreiben lassen. Das ganze
soll dann mit einer Schleife arbeiten und jeden für jeden Tag
durchgeführt werden.
Hier die Struktur, die die Tabelle hat, bzw dann haben sollte :
Tag1 I Preis 1 I Preis 2 I Preis 3 I Preis 4 I zweitkleinster
Preis I zweitgrößter Preis
Tag2 I Preis 1 I Preis 2 I Preis 3 I Preis 4 I zweitkleinster
Preis I zweitgrößter Preis
Tag3 I Preis 1 I Preis 2 I Preis 3 I Preis 4 I zweitkleinster
Preis I zweitgrößter Preis
.....


Ich habe schon probiert mein Problem durch googlen und ausprobieren zu
lösen, komme aber leider nicht darauf!

Mein Ansatz bisher war folgender:
Sub zweitgrößterpreis()
For i = 13 To 1045

Cells(i, 12).Value = WorksheetFunction.Large(Range(Cells(i,
2).Value : Cells(i, 5).Value), 2)

Next
End Sub

Das scheint aber nicht zu funktionieren. Ich bin nicht sicher aber ich
glaube, dass man für "range" keine schleife erstellen kann...

Ich hoffe dass ich Euch mein Problem ausführlich genug geschildert
habe und freue mich auf Antworten von Euch!

Vielen Dank schon im Voraus und viele Grüße

Fabian L.
Claus Busch
2008-08-30 12:00:17 UTC
Permalink
Hallo Fabian,

du hast da einen Syntaxfehler drin.
Probiere es mal so:
With ActiveSheet
For i = 1 To 3
.Cells(i, 12) = WorksheetFunction _
.Large(.Range(.Cells(i, 2), Cells(i, 4)), 2)
Next
End With

oder so:
With ActiveSheet
For i = 1 To 3
.Cells(i, 12) = WorksheetFunction _
.Large(.Cells(i, 2).Resize(1, 4), 2)
Next
End With


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Claus Busch
2008-08-30 12:05:53 UTC
Permalink
Hallo Fabian,

ich nochmals.
ich habe mich bei dem Code um eine Spalte vertan. Richtig sollte es so
lauten:
.Cells(i, 12) = WorksheetFunction _
.Large(.Range(.Cells(i, 2), Cells(i, 5)), 2)


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
f***@googlemail.com
2008-08-30 12:37:56 UTC
Permalink
Hallo Claus,

vielen Dank für die schnelle Hilfe. Ich habe noch die Punkte vor
"Cells" und "Range" entfernt und dann hat alles wunderbar
funktioniert!

Also nochmals dankeschön

Fabian

Loading...