Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Excel VBA: unverträgliche Datentypen erkennen
Frage
Hallo zusammen,
ich lese über ein Makro Daten aus mehreren anderen xls-Dateien in ein eine xls-Datei ein und muss, um den richtigen Wert einzulesen zuvor 2 Zellen vergleichen.
z.B. Wenn der Wert in A1 größer ist als der in A2, lese ich Zelle B1 ein und umgekert.
[b]Mein Problem;[/b]
Die Werte in Spalte A sind Zeitangaben in Stunden, leider wurde aber teilweise in die Zelle nach dem Zahlenwert noch ein "h" für Stunden eingetragen (keine Minutenangaben).
Wie kann ich möglichst einfach erkennen, ob in der Zelle ein "h" steht und dieses dann einfach abschneiden? ggf. auch ein Leerzeichen zwischen dem Zahlenwert und dem "h"?
Blöderweise bekomme ich natürlich eine Fehlermeldung, wenn ich eine Zahl mit einem Text vergleiche..
Für Eure Mühe im voraus vielen Dank!
Gruß
Jürgen
Antwort 1 von gast123
hi all :-)
vielleicht ja hilfreich,isoliert die zahl der position die angegeben ist
gruss gast123
tel.123
waere die erste zahl gefordert,setzt man den parameter auf 1
=Sumtext(A1;1)
waere 123
michael tel.123berlin 23456
waere die zweite zahl gefordert,setzt man den parameter auf 2
=Sumtext(A1;2)
waere 23456
usw.
einzufuegen in ein allgemeines modul
Function Sumtext(Zellen As Range, zaehler1 As Integer) As String
Dim Zelle As Range
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[0-9,]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[0-9,]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
Sumtext = zaehler2(zaehler1)
End Function
vielleicht ja hilfreich,isoliert die zahl der position die angegeben ist
gruss gast123
tel.123
waere die erste zahl gefordert,setzt man den parameter auf 1
=Sumtext(A1;1)
waere 123
michael tel.123berlin 23456
waere die zweite zahl gefordert,setzt man den parameter auf 2
=Sumtext(A1;2)
waere 23456
usw.
einzufuegen in ein allgemeines modul
Function Sumtext(Zellen As Range, zaehler1 As Integer) As String
Dim Zelle As Range
Dim zeich1 As Integer
Dim schalter As Boolean
Dim zaehler3 As Integer
ReDim zaehler2(Len([Zellen])) As String
zaehler3 = 1
Application.Volatile
If zaehler1 > Len([Zellen]) Then zaehler1 = Len([Zellen])
For zeich1 = 1 To Len([Zellen])
If Mid([Zellen], zeich1, 1) Like "[0-9,]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid([Zellen], zeich1, 1)
schalter = True
End If
If schalter = True And Mid([Zellen], zeich1, 1) Like "[0-9,]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
Sumtext = zaehler2(zaehler1)
End Function
Antwort 2 von Marie
Na, da Du den Code nicht reingeschrieben hast, kann ich Dir die Zeilen natürlich nicht einfügen.
Private Sub Werteintragen()
Dim intStd As Integer
intStd = Val(Tabelle1.Cells(2, 1))
Tabelle1.Cells(2, 1) = intStd
End Sub
aber Du kannst mit einer Schleife, wo auch immer Du willst, ganz einfach den Text durch den Zahlenwert ersetzen:
Gruß Marie
Private Sub Werteintragen()
Dim intStd As Integer
intStd = Val(Tabelle1.Cells(2, 1))
Tabelle1.Cells(2, 1) = intStd
End Sub
aber Du kannst mit einer Schleife, wo auch immer Du willst, ganz einfach den Text durch den Zahlenwert ersetzen:
Gruß Marie
Antwort 3 von gast123
hi marie
die var ist unnoetig,weise den wert direkt zu
gruss gast123
die var ist unnoetig,weise den wert direkt zu
gruss gast123
Antwort 4 von Marie
hi gast, keine Ahnung was Du tust, hab Deinen Code nicht durchgesehen, hab ihm nur gezeigt wie er ohne viel Code mit zwei zeilen seinen Text wie gewünscht umwandelt, nu kanner ja machen wie es ihm gefällt. Bis er Deinen Code probiert und verstanden hat, hat er doch längst die zwei Zeilen kapiert und angewendet. Bedenke mal, dass er Anfänger ist.
Gruß marie
Gruß marie
Antwort 5 von snailhouse
Hallo zusammen,
ich glaube, meine Überschrift war auch nicht ganz passend..
Mir ging es nur darum, einen "Zeitwert", der beispielsweise als
130h
eingetragen wurde, als Zahl verarbeiten zu können.
Ich habe mir nun mit der Ersetzen-Funktion geholfen, indem ich einefach das "h" und anschließend auch das Leerzeichen durch einen Leerstring ersetze, nämlich so:
oWSTabelle.Cells(x, y).Replace What:="h", Replacement:=""
oWSTabelle.Cells(x, y).Replace What:=" ", Replacement:=""
Danach kann ich die beiden Zellwerte als Zahlen vergleichen.
"val" ist übrigens auch interessant!
Und mit dem anderen Beispiel konnte ich tatsächlich nicht viel anfangen..
Vielen Dank für Eure Mühe!
Gruß
Jürgen
ich glaube, meine Überschrift war auch nicht ganz passend..
Mir ging es nur darum, einen "Zeitwert", der beispielsweise als
130h
eingetragen wurde, als Zahl verarbeiten zu können.
Ich habe mir nun mit der Ersetzen-Funktion geholfen, indem ich einefach das "h" und anschließend auch das Leerzeichen durch einen Leerstring ersetze, nämlich so:
oWSTabelle.Cells(x, y).Replace What:="h", Replacement:=""
oWSTabelle.Cells(x, y).Replace What:=" ", Replacement:=""
Danach kann ich die beiden Zellwerte als Zahlen vergleichen.
"val" ist übrigens auch interessant!
Und mit dem anderen Beispiel konnte ich tatsächlich nicht viel anfangen..
Vielen Dank für Eure Mühe!
Gruß
Jürgen
Antwort 6 von snailhouse
...Nachtrag...
dahinter wollte ich übrigens noch mit prüfen, ob in die Zelle evtl. noch mehr Buchstaben etc eingetragen wurden, obwohl "ISTZAHL" als in VBA verfügbar aufgelistet war, hat es nicht funktioniert, jedoch mit IsNumeric
Woher soll man sowas denn wissen ??
Gruß
Jürgen
dahinter wollte ich übrigens noch mit prüfen, ob in die Zelle evtl. noch mehr Buchstaben etc eingetragen wurden, obwohl "ISTZAHL" als in VBA verfügbar aufgelistet war, hat es nicht funktioniert, jedoch mit IsNumeric
if IsNumeric(oWSTabelle.Cells(x, y))=False then
oWSTabelle.Cells(x, y)=9999
end if
Woher soll man sowas denn wissen ??
Gruß
Jürgen
Antwort 7 von Marie
Na warum nimmste dann nicht val?? Val heisst der Wert und gibt den Zahlenwert deines Ausdruckes an, falls vorne eine Zahl steht, tut also exakt das was Du willst, nämlich auch mögliche Leerspalten abschneiden.
Gruß Marie
Gruß Marie