Supportnet Computer
Planet of Tech

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

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

Antwort 3 von gast123

hi marie

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

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

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



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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: