Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
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
Array auswerten mit VBA
Sibylle
Guten Tag,
ein Array besitzt 100 Integerwerte ohne Duplikate.
Es soll nun eine VBA-Lösung entstehen bei der die 4 höchsten Werte farbig gekennzeichnet werden.
Die Funktionen max und kgrösste sollen nicht verwendet werden.
Wie könnte solch eine Lösung aussehen?
Gruß
Sibylle

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array auswerten mit VBA
20.10.2011 12:05:08
Beverly
Hi Sibylle,
ich verstehe nicht, weshalb diese beiden Funktionen nicht verwendet werden dürfen, denn gerade sie lösen ja die Aufgabe.
Da die Werte gefärbt werden sollen, nehme ich an, du bezihst dich mit "Array" auf einen Zallbereich im Tabellenblatt? Sortiere die Werte aufsteigend, dann sind die letzten 4 Werte die gesuchten.


AW: Array auswerten mit VBA
20.10.2011 13:51:35
Sibylle
Hallo Karin,
ich gebe Dir vollkommen recht, dass gerade diese beiden Funktionen das Problem lösen.
Mit bedingter Formatierung und der Funktion kgrösste würde ich das wohl hinbekommen.
Es soll nun aber leider programmiert ohne Verwendung dieser Funktionen.
Die Daten werden aus der Tabelle in einen Array gelesen.
Das Maximum ist durch Vergleiche zu ermitteln und damit könnte man die betreffende Zelle einfärben, aber wie geht es weiter dem zweithöchsten, dritthöchsten Wert?
Hast Du da einen Tipp?
Gruß
Sibylle
Anzeige
AW: Array auswerten mit VBA
20.10.2011 14:15:00
Rudi
Hallo,

Sub test()
Dim arr, i As Long, j As Long, x(1 To 4, 1 To 2)
arr = Application.Transpose(Range("A1:A100"))
For i = 1 To 4
For j = LBound(arr) To UBound(arr)
If arr(j) > x(i, 1) Then
x(i, 1) = arr(j)
x(i, 2) = j
End If
Next j
arr(x(i, 2)) = -9 ^ 99
Next i
For i = LBound(x) To UBound(x)
Cells(x(i, 2), 1).Interior.Color = 255
Next
End Sub

Gruß
Rudi
AW: Array auswerten mit VBA
20.10.2011 15:04:42
Sibylle
Hallo Rudi,
besten Dank für Deine Hilfe.
2 Fragen habe ich dazu:
arr = Application.Transpose(Range("A1:A100"))
Weshalb ist da ein Transpose nötig?
arr(x(i, 2)) = -9 ^ 99
Was bewirkt diese Zeile konkret? Ist sie notwendig?
Gruß
Sibylle
Anzeige
AW: Array auswerten mit VBA
20.10.2011 15:18:34
Rudi
Hallo,
Weshalb ist da ein Transpose nötig?
damit wird ein eindimensionales Array draus. Nicht wirklich nötig, dann aber so:

Sub test()
Dim arr, i As Long, j As Long, x(1 To 4, 1 To 2)
arr = Range("A1:A100")
For i = 1 To 4
For j = LBound(arr) To UBound(arr)
If arr(j, 1) > x(i, 1) Then
x(i, 1) = arr(j, 1)
x(i, 2) = j
End If
Next j
arr(x(i, 2), 1) = -9 ^ 99
Next i
For i = LBound(x) To UBound(x)
Cells(x(i, 2), 1).Interior.Color = 255
Next
End Sub

arr(x(i, 2)) = -9 ^ 99
Damit wird das gefundene Maximum auf einen sehr niedrigen Wert gesetzt. Sonst wird's ja beim nächsten Durchlauf auch wieder gefunden.
Gruß
Rudi
Anzeige
Danke schön
20.10.2011 16:02:19
Sibylle
Hallo Rudi,
ich danke Dir für Dein Programm und die erklärenden Zeilen.
Einen schönen Tag noch.
Gruß
Sibylle
AW: Array auswerten mit VBA
20.10.2011 14:38:40
Ass
Hallo Sibylle

Sub getSort4()
Dim arr(1 To 5) As Integer
Dim Schleife As Integer
'    arr(0) = 17
arr(1) = 18
arr(2) = 4
arr(3) = 3
arr(4) = 7
arr(5) = 2
Call mSort(arr)
' ab hier Ausgabe in's Testfenster nach mSort
Debug.Print "Nach der Sortierung"
For Schleife = 0 To 3
Debug.Print Schleife + 1 & ": " & arr(UBound(arr) - Schleife)
Next Schleife
End Sub

Sub mSort(arr() As Integer)
Dim Temp As Double
Dim i As Long
Dim j As Long
For j = 2 To UBound(arr)
Temp = arr(j)
For i = j - 1 To 1 Step -1
If (arr(i) 
Gruß
Rudi
Anzeige
Oh, noch'n Rudi. owT
20.10.2011 14:41:01
Rudi

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige