PDA

Vollständige Version anzeigen : MaxWert in einem eindimensionales Feld suchen und Wert ändern


Tuan
20.04.2009, 19:51
Hi
ich bin auf der Suche nach einer einfachen Lösung folgendes zu erreichen:

Ich habe ein eindimensionales Feld gegeben mit verschiedenen numerischen Werten. Jetzt will ich den Maximalwert innerhalb des Feldes ermitteln und diesen Einzelwert auf 0 setzten.

Hat jemand eine gute Idee?

Vielen Dank im Voraus.
Tuan

EarlFred
20.04.2009, 20:05
Hallo Tuan,

mir fiele da folgende Variante ein:

Option Explicit
Sub maxNull()
Dim arr() As Variant
Dim b As Long
arr = Array(9, 8, 17, 6, 5, 4)

b = WorksheetFunction.Match(WorksheetFunction.Max(arr), arr, 0)
arr(b + LBound(arr) - 1) = 0
End Sub

ich bin mal davon ausgegangen, dass Dich der Maximalwert eigentlich garnicht interessiert, sondern nur die Position innerhalb des Datenfeldes, um diesen Wert auf 0 zu setzen.
Andernfalls erhältst Du den Maxwert einfach mit

WorksheetFunction.Max(arr)
Grüße
EarlFred

ransi
20.04.2009, 20:16
HAllo

Nur für den Fall das mehrere Maxwerte vorkommen:
<div style="background-color:#FFFFFF; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Option</span> <span style="color:#000080"; >Explicit</span><br /><b><span style="color:#000080"; >Sub</span> maxNull()</b><br /><span style="color:#000080"; >Dim</span> arr() <span style="color:#000080"; >As</span> <span style="color:#000080"; >Variant</span><br /><span style="color:#000080"; >Dim</span> b <span style="color:#000080"; >As</span> <span style="color:#000080"; >Double</span><br /><span style="color:#000080"; >Dim</span> L <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />arr = Array(9, 8, 17, 6, 5, <span style="color:#F70000"; >"TEXT"</span>, 17, 4)<br />MsgBox Join(arr, vbCrLf)<br />b = WorksheetFunction.Max(arr)<br /><span style="color:#000080"; >For</span> L = <span style="color:#000080"; >LBound</span>(arr) <span style="color:#000080"; >To</span> <span style="color:#000080"; >UBound</span>(arr)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> arr(L) = b <span style="color:#000080"; >Then</span> arr(L) = 0<br /><span style="color:#000080"; >Next</span><br />MsgBox Join(arr, vbCrLf)<br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr></div>

ransi

Tuan
20.04.2009, 21:09
Danke euch beiden, ich probiers jetzt mal aus :grins: