Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
980to984
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
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
mit VBA ein lokales Minimum finden ?
05.06.2008 00:38:05
Jens
Hallo allerseits,
ich hab da eine Knobelaufgabe, an der ich mir ziemlich die Zähne ausbeisse - wer hat die zündende Idee ?
Ich hab 12 Variablen (eine Verdünnungsreihe)
G1 G2 G4 G8 G16 G32 G64 G128 G256 G512 G1024 und G2048
ich möchte die Variable auswählen (auswählen = die Zahl der hinter dem "G" an einer Zielvariable zuweisen) die folgende Bedingung erfüllt:
Das erste Auftreten eines Wertes "kleiner20", wobei hinter diesem Wert (hinter: bei höheren G-Werten) nicht wieder größere ("größer20") und dann wieder ein kleinerer ("kleiner20") Wert auftreten darf. Wenn das nämlich eintritt, soll der zweite (oder dritte, oder...) Wert "kleiner20" ausgewählt werden.
Am besten geb ich ein paar Beispiele:
1) Einfache Situation:
G1 = 50
G2 = 25
G4 = 15
G8 = 1
G16 = 1
G32 = 1
G64 = 1
G128 = 1
G256 = 1
G512 = 1
G1024 = 1
G2048 = 1
soll die Variable G4 auswählen und den Wert 4 übergeben
2) schon nicht mehr so einfache Situation:
G1 = 50
G2 = 25
G4 = 15
G8 = 1
G16 = 30
G32 = 10
G64 = 1
G128 = 1
G256 = 1
G512 = 1
G1024 = 1
G2048 = 1
soll die Variable G32 auswählen und den Wert 32 übergeben
3) gar nicht einfache Situation:
G1 = 1
G2 = 25
G4 = 15
G8 = 1
G16 = 30
G32 = 10
G64 = 1
G128 = 1
G256 = 21
G512 = 11
G1024 = 11
G2048 = 1
soll die Variable G512 auswählen und den Wert 512 übergeben
ich hoffe, ich hab mich verständlich ausgedrückt...
Besten Gruß!
jens
PS ich spar mir meinen code ...zuviele And und Or Abfragen die es eh nicht lösen..

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit VBA ein lokales Minimum finden ?
05.06.2008 02:18:00
Mustafa
Hallo Jens,
Meinst du so :
https://www.herber.de/bbs/user/52825.xls
Rückmeldung obs Hilft wäre nett.
Viele Grüße aus der Domstadt Köln.
PS: Die Suche von unten nach oben erleichtert die Aufgabe enorm.
Denn du kannst dann bei dem ersten Wert über 20 aus der Schleife springen und hast so den ersten Wert kleiner 20 hinter dem letzten Wert größer 20.

AW: mit VBA ein lokales Minimum finden ?
05.06.2008 08:00:55
ransi
HAllo
Das geht auch recht einfach mit einer Formel.
Schau dir mal an:
Tabelle1

 ABCDEFGH
1G150 G150 G11
2G225 G225 G225
3G415 G415 G415
4G81 G81 G81
5G161 G1630 G1630
6G321 G3210 G3210
7G641 G641 G641
8G1281 G1281 G1281
9G2561 G2561 G25621
10G5121 G5121 G51211
11G10241 G10241 G102411
12G20481 G20481 G20481
13        
144  32  512 

Formeln der Tabelle
ZelleFormel
A14=WECHSELN(VERWEIS(2;1/(B1:B12>20); A2:A13); "G";"")*1
D14=WECHSELN(VERWEIS(2;1/(E1:E12>20); D2:D13); "G";"")*1
G14=WECHSELN(VERWEIS(2;1/(H1:H12>20); G2:G13); "G";"")*1


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi

Anzeige
AW: mit VBA ein lokales Minimum finden ?
05.06.2008 08:08:36
Jens
Moin Moin,
Dank euch beiden für die superschnelle Antwort - sieh ja bestechend gut aus !
Ich werde das heute mal ausprobieren - ich muss das dafür in Variablen umcodieren - ich habe keine Zellen und Cells-Bezüge, da ich alles in einer Userform machen muss.
Melde mich wieder !
Besten Dank& Gruß !
jens

AW: mit VBA ein lokales Minimum finden ?
05.06.2008 10:32:01
ransi
HAllo Jens
Versuchs mal so:
Public Sub Aufruf()
MsgBox test(Array(1, 25, 15, 1, 30, 10, 1, 1, 21, 11, 11, 1))
End Sub


Public Function test(arr As Variant)
Dim L As Long
For L = UBound(arr) To 1 Step -1
    If arr(L - 1) > 20 Then
        test = 2 ^ L
        Exit For
    End If
Next
End Function

ransi

Anzeige
AW: mit VBA ein lokales Minimum finden ?
05.06.2008 16:15:00
Jens
Hi ransi,
super elegant - toll - Herzlichen Dank !!!
ich musste nur noch kleinste Änderungen vornehmen
- Abfangen, wenn der erste und der letzte Wert G1 oder G2048 der gesuchte ist
- Das array aus singles bauen...variant gab typemismatch (verstehe zwar nicht warum)
so sieht der code nun aus Private Sub TextBox461_Enter() Dim Verduennungsreihe(0 To 11) As Single ' test werte G1B = 1 G2B = 22 G4B = 1 G8B = 1 G16B = 1 G32B = 1 G64B = 1 G128B = 1 G256B = 22 G512B = 1 G1024B = 1 G2048B = 22 ' Variable zurücksetzen GWertB = -999 ' das array auffüllen ' Verduennungsreihe(0) = TextBox437.Value Verduennungsreihe(0) = G1B Verduennungsreihe(1) = G2B Verduennungsreihe(2) = G4B Verduennungsreihe(3) = G8B Verduennungsreihe(4) = G16B Verduennungsreihe(5) = G32B Verduennungsreihe(6) = G64B Verduennungsreihe(7) = G128B Verduennungsreihe(8) = G256B Verduennungsreihe(9) = G512B Verduennungsreihe(10) = G1024B Verduennungsreihe(11) = G2048B For L = UBound(Verduennungsreihe) To 1 Step -1 If Verduennungsreihe(L - 1) > 20 Then GWertB = 2 ^ L Exit For Else: GWertB = 1 ' Abfangen wenn gleich der erste Wert der gesuchte ist ! End If Next ' Abfangen ob der Wert für G2048 > 20 ist If Verduennungsreihe(11) > 20 Then GWertB = 9999 End If TextBox461.Value = GWertB End Sub


BESTEN GRUß !!!!
jens

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige