Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Text in Zahl in Array, Fehlermeldung

Text in Zahl in Array, Fehlermeldung
06.06.2009 00:11:16
Florian
Hi Forum!
Habe hier ein kleines Problem mit Array.
In einem Array will ich einen (wie eine Zahl aussehenden) String in eine Zahl umwandeln um die Werte mit anderen Listen zu vergleichen. Für gewöhnlich, also in Worksheets, geht das ja mit "Text + 0".
So siehts jetzt aus (keine Fehlermeldung, aber Zahl = Text)
For iSystemData = 2 To LastRowSystemData
SystemData_Arr(iSystemData, 1) = Right(SystemData_Arr(iSystemData, 4), 5)
Next iSystemData
ABER:
"For iSystemData = 2 To LastRowSystemData
SystemData_Arr(iSystemData, 1) = Right(SystemData_Arr(iSystemData, 4), 5)+0
Next iSystemData"
funktioniert nicht (Fehlermeldung)
Kann mir da jemand weiterhelfen?
Besten Dank schon mal!
Gute Nacht!
Florian
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dafür gibt's in VBA eine ganze Palette von...
06.06.2009 02:08:36
Luc:-?
...Convert-Fktt, Florian,
z.B. CDbl(...), CSgl(...), CLng(...), CDbl(...), CInt(...), CBool(...) usf...
Allerdings sollte deine Methode oft auch fkt, obwohl das zu einem TypeMismatch-Fehler führt, der mitunter nicht von der vbTypanpassungsautomatik abgefangen wird. Insbesondere, wenn die Zielvariable nur As Variant deklariert ist. Allerdings wäre es ohnehin besser, zuvor mit vbFkt IsNumeric(...) (liefert Booleschen Wert!) zu prüfen, ob der resultierende Text als Zahl interpretiert wdn kann.
Gutnacht + sWE, Luc :-?
Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 08:44:22
Nepumuk
Hallo Florian,
wenn das ein Variantarray ist, dann geht das nicht. Ein Eintrag in einem Variantarray der einmal als String initialisiert ist, lässt sich nicht mehr in einen numerischen Wert umwandeln. Das würde die Struktur des Arrays in Speicher zerstören.
Gruß
Nepumuk
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 09:35:57
Tino
Hallo,
so richtig glaube ich dies nicht.
Beispiel erst ein String und danach ein Wert vom Typ Double

Sub test()
Dim myAr(1) As Variant
myAr(0) = "1"
myAr(1) = "2"
Debug.Print TypeName(myAr(0))
Debug.Print TypeName(myAr(1))
myAr(0) = myAr(0) * 1
myAr(1) = myAr(1) * 1
Debug.Print TypeName(myAr(0))
Debug.Print TypeName(myAr(1))
End Sub


Gruß Tino

Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 10:08:13
Beverly
Hi Tino,
da gebe ich dir vollkommen Recht. Ich hatte es so getestet:
Klauseltexte
 AB
1123A123
2222B222
3333C333
4444D4444

Tabellendarstellung in Foren Version 1.6



Sub ArrayVergleichen()
Dim arrWerte1(0 To 3)
Dim arrWerte2(0 To 3)
Dim inZaehler As Integer
For inZaehler = 0 To 3
arrWerte1(inZaehler) = Cells(inZaehler + 1, 1)
arrWerte2(inZaehler) = Cells(inZaehler + 1, 2)
Next inZaehler
For inZaehler = 0 To 3
arrWerte1(inZaehler) = Val(arrWerte1(inZaehler))
Next inZaehler
For inZaehler = 0 To 3
If arrWerte1(inZaehler) = arrWerte2(inZaehler) Then MsgBox "gleich"
Next inZaehler
End Sub


Die MsgBox wurde jeweils für die ersten 3 Fälle aufgerufen.



Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 10:48:42
Nepumuk
Hallo,
Bitte mal testen:
Public Sub test()
    Dim vntArray As Variant
    vntArray = Split("01.01.2008:1.234", ":")
    MsgBox TypeName(vntArray(0))
    vntArray(0) = CDate(vntArray(0))
    MsgBox TypeName(vntArray(0))
    MsgBox TypeName(vntArray(1))
    vntArray(1) = CDbl(vntArray(1))
    MsgBox TypeName(vntArray(1))
End Sub

Ist aber nur so, wenn das Array mit der Split-Funktion erstellt wurde. Das habe ich vergessen, in meiner ersten Antwort dazu zu schreiben.
Gruß
Nepumuk
Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 11:16:05
Tino
Hallo,
liegt wohl daran das vntArray vor der Zuweisung durch Split noch kein Array ist sondern nur ein stink normale Variable vom Typ Variant.
Andersrum wird ein Zellbereich einer solchen Variablen zugewiesen geht’s
Wahrscheinlich weil der Zellbereich wiederum bereits eine Array ist.

Sub test()
Dim vntArray As Variant
'A1 = Datum
'A2 = ist eine Zahl
vntArray = Range("A1:A2")
Debug.Print TypeName(vntArray(1, 1))
Debug.Print TypeName(vntArray(2, 1))
vntArray(1, 1) = CStr(vntArray(1, 1))
vntArray(2, 1) = CStr(vntArray(2, 1))
Debug.Print TypeName(vntArray(1, 1))
Debug.Print TypeName(vntArray(2, 1))
vntArray(1, 1) = vntArray(1, 1) * 1
vntArray(2, 1) = vntArray(2, 1) * 1
Debug.Print TypeName(vntArray(1, 1))
Debug.Print TypeName(vntArray(2, 1))
End Sub 


Gruß Tino

Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 11:34:49
Nepumuk
Hallo Tino,
die Split-Funktion liefert auch ein Array. Wo ist also der Unterschied? Ein Range liefert ein Variant-Array, die Split-Funktion ein String-Array.
Na ja, wenn man's weiß, lassen sich eventuell daraus resultierende Fehler vermeiden.
Gruß
Nepumuk
so wird es sein. o.T.
06.06.2009 12:02:42
Tino
Ich schrieb es bereits, weil ich dachte, du...
06.06.2009 23:49:27
Luc:-?
...würdest den Unterschied kennen, Nepumuk,
aber das ist ja offensichtlich an dieser Stelle von allen Beteiligkeiten ignoriert worden...
Eine Variable vom Typ Variant die per Split mit einem Feld gefüllt wird, bleibt eine Variant-Variable, ist nun aber mit einem Feld, welchen Typs auch immer, gefüllt. Zwischen dieser und einer Feldvariablen vom Typ Variant besteht ein deutlicher Unterschied, der nicht zuletzt auch in der Schreibweise der Indexierung zum Ausdruck kommt...
variantmitfeld(0)(0) statt beliebfeldvar(0, 0).
Das bewirkt dann die diskutierte Unverträglichkeit.
Gruß Luc :-?
Anzeige
Nepomuk meint wohl einen Variant, der...
06.06.2009 10:34:29
Luc:-?
...ein Feld enthält, aber darauf gibt's keinerlei Hinweis...
Ciao Luc :-?
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 09:33:42
Beverly
Hi Florian,
hast du es schon mal mit Val( ) anstelle von Right( ) versucht?


AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 10:00:03
Tino
Hallo,
wie ist SystemData_Arr Deklariert?
Welchen Wert gibt Right(SystemData_Arr(iSystemData, 4), 5) zurück?
Ist dies wirklich eine Zahl oder sind da vielleicht irgendwelche Zeichen vorhanden die eine Umwandlung in eine Zahl unmöglich machen.
Vielleicht hast Du auch mal ein Beispiel wo dies nicht funktioniert.
Gruß Tino
Anzeige
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 11:17:40
Florian
Hi nochmal!
Erstmal Danke für die Mithilfe. Hier das Bsp. Super, wenn Ihr eine Lösung wisst...
Gruss Florian
https://www.herber.de/bbs/user/62249.xls
AW: Text in Zahl in Array, Fehlermeldung
06.06.2009 11:23:03
Tino
Hallo,
Right(SystemData_Arr(iSystemData, 1), 5) ist bei Dir Leer. ;-)
Gruß Tino
Anzeige
Danke oT!!
06.06.2009 13:39:34
Florian
..
;
Anzeige
Anzeige

Infobox / Tutorial

Text in Zahl umwandeln: Tipps und Tricks für Excel VBA


Schritt-für-Schritt-Anleitung

Um einen Text, der wie eine Zahl aussieht, in ein Array in Excel VBA umzuwandeln, kannst du die folgenden Schritte befolgen:

  1. Deklaration des Arrays: Stelle sicher, dass dein Array korrekt deklariert ist. Ein Variant-Array kann sowohl Strings als auch Zahlen enthalten.

    Dim SystemData_Arr() As Variant
  2. Werte zuweisen: Fülle das Array mit den gewünschten Werten. Hierbei ist es wichtig sicherzustellen, dass die Werte, die du umwandeln möchtest, tatsächlich in einem richtigen Format vorliegen.

  3. Umwandlung in eine Zahl: Verwende die Funktion Val() oder CInt() für die Umwandlung. Achte darauf, dass der Text keine nicht-numerischen Zeichen enthält.

    For iSystemData = 2 To LastRowSystemData
       SystemData_Arr(iSystemData, 1) = Val(Right(SystemData_Arr(iSystemData, 4), 5))
    Next iSystemData

Häufige Fehler und Lösungen

Ein häufiges Problem bei der Umwandlung von Text in Zahlen in einem Array ist der TypeMismatch-Fehler. Hier sind einige Lösungen:

  • Typ des Arrays: Stelle sicher, dass deine Zielvariable als Variant deklariert ist. Wenn das Array bereits einen String enthält, wird die Umwandlung in einen numerischen Wert möglicherweise fehlschlagen.

  • Prüfung mit IsNumeric(): Vor der Umwandlung kannst du die IsNumeric()-Funktion verwenden, um sicherzustellen, dass der Wert als Zahl interpretiert werden kann.

    If IsNumeric(SystemData_Arr(iSystemData, 4)) Then
       SystemData_Arr(iSystemData, 1) = Val(SystemData_Arr(iSystemData, 4))
    End If

Alternative Methoden

Wenn die Standardmethoden nicht funktionieren, kannst du auch folgende Ansätze ausprobieren:

  • CDbl() oder CInt(): Diese Funktionen sind nützlich, um sicherzustellen, dass der Text korrekt in eine Double- oder Integer-Zahl umgewandelt wird.

    SystemData_Arr(iSystemData, 1) = CDbl(SystemData_Arr(iSystemData, 4))
  • Split-Funktion: Wenn du mit Strings arbeitest, die durch ein bestimmtes Zeichen getrennt sind, kannst du die Split()-Funktion verwenden, um das Array zu erstellen.

    Dim vntArray As Variant
    vntArray = Split("01.01.2008:1.234", ":")

Praktische Beispiele

Hier sind zwei praktische Beispiele, die dir helfen können:

  1. Beispiel: Umwandlung von Strings in Zahlen:

    Sub TextInZahl()
       Dim myAr(1) As Variant
       myAr(0) = "123A"
       myAr(1) = "456"
       myAr(0) = Val(myAr(0)) ' Umwandlung
       myAr(1) = Val(myAr(1)) ' Umwandlung
    End Sub
  2. Beispiel: Vergleich von Werten in Arrays:

    Sub ArrayVergleichen()
       Dim arrWerte1(0 To 3)
       Dim arrWerte2(0 To 3)
       Dim inZaehler As Integer
       For inZaehler = 0 To 3
           arrWerte1(inZaehler) = Cells(inZaehler + 1, 1)
           arrWerte2(inZaehler) = Cells(inZaehler + 1, 2)
           arrWerte1(inZaehler) = Val(arrWerte1(inZaehler))
       Next inZaehler
       For inZaehler = 0 To 3
           If arrWerte1(inZaehler) = arrWerte2(inZaehler) Then MsgBox "gleich"
       Next inZaehler
    End Sub

Tipps für Profis

  • Debugging: Nutze Debug.Print, um den Datentyp und die Werte während der Umwandlung zu überprüfen. Dies hilft, Fehler schnell zu identifizieren.

  • String-Manipulation: Achte darauf, dass du die richtigen Funktionen wie Right() oder Left() verwendest, um nur die relevanten Teile eines Strings zu extrahieren.

  • Fehlermeldungen: Vertraue nicht blind auf automatische Typanpassungen. Prüfe stets, ob der Wert, den du umwandeln möchtest, auch wirklich konvertierbar ist.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CDbl() und Val()?
CDbl() konvertiert einen Wert explizit in einen Double, während Val() die numerischen Werte am Anfang eines Strings zurückgibt.

2. Warum bekomme ich einen TypeMismatch-Fehler?
Dieser Fehler tritt häufig auf, wenn du versuchst, einen String, der nicht in eine Zahl umgewandelt werden kann, in ein numerisches Format zu konvertieren. Überprüfe den Inhalt des Strings vor der Umwandlung.

3. Wie kann ich sicherstellen, dass mein Array die richtige Struktur hat?
Verwende TypeName() um den Datentyp der Array-Elemente zu überprüfen und sicherzustellen, dass sie vor der Umwandlung in die entsprechenden Formate konvertiert werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige