Registriert seit: 17.02.2016
Version(en): 2016
04.06.2018, 17:46
(Dieser Beitrag wurde zuletzt bearbeitet: 04.06.2018, 17:46 von santana.)
Hallo,
eigentlich sollte es eine leichte Aufgabe sein. Die Typkonvertierung von Stringwerten in eine Zahl,
um danach das Maximum des Feldes zu berechnen.
Leider krieg ich es nicht hin.
Hier mein Code:
Sub Max_Werte()
Dim i%, str As Variant
ReDim f(0 To 10)
For i = 0 To 10
str = str & Application.RandBetween(10, 100) & " " 'als String
f(i) = Application.RandBetween(10, 100) 'gleich als Zahlenwerte
Next
Debug.Print WorksheetFunction.Max(f) 'OK
str = Split(Application.Trim(str), " ")
'!!! Die Umwandlung von Stringwerten in Zahlenwerten klappt nicht
For i = LBound(str) To UBound(str)
str(i) = CInt(str(i)) 'Problemstelle, hier hakt es
Next
Debug.Print WorksheetFunction.Max(str)
End Sub
Wie kann ich die Werte aus dem Feld str in Zahlenwerte umwandeln, damit ich das
Maximum für str berechnen kann?
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
über ein anderes Array mit dem passenden Typ geht es so
Code:
Sub Max_Werte()
Dim i%, strTest As Variant, lngArray() As Long
ReDim f(0 To 10)
For i = 0 To 10
strTest = strTest & Application.RandBetween(10, 100) & " " 'als String
f(i) = Application.RandBetween(10, 100) 'gleich als Zahlenwerte
Next
Debug.Print WorksheetFunction.Max(f) 'OK
strTest = Split(Application.Trim(strTest), " ")
ReDim lngArray(0 To UBound(strTest))
'!!! Die Umwandlung von Stringwerten in Zahlenwerten klappt nicht
For i = LBound(strTest) To UBound(strTest) - 1
lngArray(i) = strTest(i) 'Problemstelle, hier hakt es
Next
Debug.Print WorksheetFunction.Max(lngArray)
End Sub
Gruß Stefan
Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• santana
Registriert seit: 17.02.2016
Version(en): 2016
04.06.2018, 20:29
(Dieser Beitrag wurde zuletzt bearbeitet: 04.06.2018, 20:29 von santana.)
Hallo Stefan,
habe ich natürlich schon längst gemacht. Das Problem liegt für mich ganz woanders, nämlich in der
Logik bzw. ist eine Verständnisfrage.
Warum geht so etwas nicht:
str(i) = CInt(str(i))
Schaut man sich die Geschichte mal im Einzelschrittmodus im Lokalfenster an, sieht man das die
Anführungszeichen nicht verschwinden, also der Stringtyp erhalten bleibt.
Ergo sind Funktionen wie Max und Min erst verfügbar mittels eines
Hilfsfeldes, wie du es ja auch machen würdest.
Letztendlich versteh ich nicht warums nicht geht.
Aber Danke!
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi,
zu meinem Verständnis.
Ergibt dieser Code wirklich zwei Mal dieselben 11 Zufallszahlen?
Code:
...
For i = 0 To 10
strTest = strTest & Application.RandBetween(10, 100) & " " 'als String
f(i) = Application.RandBetween(10, 100) 'gleich als Zahlenwerte
Next
...
Registriert seit: 17.02.2016
Version(en): 2016
Zitat:Ergibt dieser Code wirklich zwei Mal dieselben 11 Zufallszahlen?
Nein!
Eigentlich wollte ich hier nur 2 Felder gegenüberstellen. Feld f wo alles so läuft wie geplant
und das "Problemfeld" str, dass stets ein aus Strings bestehendes Feld bleibt.
Folgende(r) 1 Nutzer sagt Danke an santana für diesen Beitrag:1 Nutzer sagt Danke an santana für diesen Beitrag 28
• Rabe
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
(04.06.2018, 20:29)santana schrieb: Warum geht so etwas nicht:
str(i) = CInt(str(i))
Schaut man sich die Geschichte mal im Einzelschrittmodus im Lokalfenster an, sieht man das die
Anführungszeichen nicht verschwinden, also der Stringtyp erhalten bleibt.
das einzelne Array-Element hat da den Typ String und ich konnte es auch mit Val und *1 nicht umwandeln, das Element behält den Typ String. Googeln brachte mich aber auf den Lösungsvorschlag.
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi,
ach so, das soll nicht heißen "als gleiche Zahlenwerte", sondern "abspeichern gleich als Zahlenwerte" ohne nachfolgende Umwandlung.
Registriert seit: 17.02.2016
Version(en): 2016
Der Spaß geht weiter!
Aber hier die Erklärung warum das Ganze nicht funktionierte.
(Beide Felder erhalten Gleiche Zufallszahlen)
Sub Lösung_Typenkonflikt()
Dim i%, h, str As Variant, tmp
ReDim f(0 To 10)
For i = 0 To 10
tmp = Application.RandBetween(10, 100)
Debug.Print TypeName(tmp)
str = str & tmp & ","
f(i) = tmp
Next
Debug.Print TypeName(str)
str = Split(Application.Trim(str))
Debug.Print TypeName(str)
Debug.Print TypeName(f)
'Deshalb geht so etwas nicht:
For i = 0 To 10
str(i) = h(i) '! Typenkonflikt geht nicht
str(i) = CStr(h(i)) '! Typenkonflikt geht nicht
Next
End Sub
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
Hi,
was soll h(i) sein?
da ist es klar das ein Typenkonflikt kommen muss
Ein Varianten Array mit Split erzeugt hat immer Text!
Da Split immer einen String ausgibt.
Variant arbeitet nach dem Prinzip, wenn Byte reicht dann Byte, wenn Byte nicht reicht dann Integer usw.
Wenn mal ein Text drinnen ist, dann bleibt dies bei Text (nur bei einem Variantenarray) da jeder numerische Wert auch als Text abgelegt werden kann.
Bug oder Feature, wer weiß es schon ;)
lg Chris
Feedback nicht vergessen.
3a2920576572206973742064656e20646120736f206e65756769657269672e
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
vielleicht sollest Du dir angewöhnen Option Explicit zu verwenden. So bemerkst Du eine nicht deklarierte Variable besser.
Gruß Stefan
Win 10 / Office 2016