[VBA] Datentyp überprüfen

matzee

Keks? ツ
ID: 44426
L
25 April 2006
4.546
228
Hey leute,

ich brauche mal wieder eure Hilfe :yes:

Ich will mit Excel ein Zeichenketteauslesen, die aus Integer Typen und String Typen bestehen.

Je nach länge der Zeichenkette soll eine bestimmte Aktion passieren.

Folgendes Beispiel soll es verdeutlichen:

Ich habe die Zeichenkette: 552141-169016007

Wenn die Zahlen bist zum zum String, dem - 6 Stellen haben, dann soll diese Zahl bis zum String, also die 552141 in Zelle X eingetragen werden.
Die Zahl 169016007 soll in Zelle Y eingetragen werden, sofern sie 9 Stellig ist.

Die 2. Zeichenkette sieht wie folgt aus: 435010/30012000

Wenn die Zahlen bist zum zum String, dem / 6 Stellen haben, dann soll diese Zahl bis zum String, also die 435010 in Zelle X eingetragen werden.
Die Zahl 30012000 soll in Zelle Y eingetragen werden, sofern sie 8 Stellig ist.

Meine Idee ist:
Die Zahlen bis zum String zu zählen und dann eine Entscheidung zu treffen

Ich dachte da an einer Schleife wie DO While.
("Zähle solange bis ein Stringtyp kommt, merk dir den Wert und entscheide")

Als Test habe ich folgende Zählfunktion geschrieben:

Code:
Sub zählen()

Sheets("Importierte_Datei").Select
Range("M6").Select
Wert = Len(Range("M6"))
If Wert = 15 Then MsgBox Wert Else MsgBox "Fehler"

End Sub
Dies funktioniert auch super. Jetzt müsste ich die Zählfunktion nur irgendwie mit dem Problem von oben vereinen.

Ich hoffe ihr könnt mir helfen
 
Zuletzt bearbeitet:
Code:
[COLOR=Blue]Private Sub[/COLOR] Foo(InputString [COLOR=Blue]As String[/COLOR])
[COLOR=Blue]  Dim[/COLOR] Teil1, Teil2 [COLOR=Blue]As String[/COLOR]

  a = [COLOR=Blue]InStr[/COLOR](InputString, "/")
  If a = -1 Then a = [COLOR=Blue]InStr[/COLOR](InputString, "-")

  [COLOR=Blue]If[/COLOR] a <> -1 [COLOR=Blue]Then[/COLOR]
    Teil1 = [COLOR=Blue]Mid$[/COLOR](InputString, 1, a)
    Teil2 = [COLOR=Blue]Mid$[/COLOR](InputString, a+1)
  [COLOR=Blue]Else[/COLOR]
[COLOR=SeaGreen]    ' keine Ahnung[/COLOR]
  [COLOR=Blue]End If
End Sub[/COLOR]
Ungetestet, sollte dir aber die Richtung weisen:
Trennzeichen suchen, links davon ist Teil 1 und rechts davon ist Teil 2.

Evtl. muss du halt noch prüfen, ob Teile 1 und 2 wirklich Integers sind, falls du das brauchst: IsNumeric() afair

edit:
Und dann halt noch Len() anwenden, ob die Zeichenanzahl stimmt.
 
sorry ich seh nich ganz durch. Der weg sieht aber gut aus :)

angenommen ich würde die Zelle M6 ansprechen wollen, da also den string vergleich machen wollen und dann, wenn die ersten zahlen insgesamt eine länge von 5 haben in zelle M7 eingetragen werden sollen, wie realisiere ich das?
 
Hatte gerade Zeit und hab dir das vom Hackerchen n weng erweitert.
Das Teil macht nu nix anderes als das was du willst, ist recht statisch programmiert und könnte man natürlich viel besser machen, aber zum groben Verständnis sollte es reichen.

Oben sind die Konstanten definiert die du natürlich nach Belieben anpassen kannst. Da holt er sich die Strings her und schreibt sich die dahin wo du sie haben willst. Ich persönlich benutze lieber .Cells weil es auf Dauer übersichtlicher ist und besonders in Schleifen einfacher zu handhaben ist. Hier hätte eine einfache Range auch ihre Dienste getan.

Danach kommt der Teil von tH (mit eingefügtem End if, er hatte eins zu wenig afaik *g), sowie eine einfache Längenabfrage der Teilstrings in der ich die Teile dann gleich wieder dorthin schieße wo sie am Ende stehen sollen. In die Else-Zweige solltest du noch eventuelle Fehlerabfragen reinbauen. GoTo solltest du extrem vorsichtig einsetzen, gilt als schlechter Programmierstil - ist bei uns aber unter Excel eine beliebte Methode, quasi nach einer Exception aus der Funktion rauszufallen (vgl. try/catch). Bitte nicht zu hause nachmachen :mrgreen:

PHP:
Const CONST_ActiveSheet = ActiveWorkbook.ActiveSheet
Const CONST_InputString = CONST_ActiveSheet.Cells(6, 13).Value 'Cells(Zeile,Spalte) = M6'
Const CONST_TargetString1 = CONST_ActiveSheet.Cells(7, 13).Value 'Cells(Zeile,Spalte) = M7'
Const CONST_TargetString2 = CONST_ActiveSheet.Cells(8, 13).Value 'Cells(Zeile,Spalte) = M8'

Public Sub myFoo()
  Dim Teil1, Teil2 As String
  
  'SubString'
  a = InStr(CONST_InputString, "/")
  If a = -1 Then
     a = InStr(CONST_InputString, "-")
  End If
  If a <> -1 Then
     Teil1 = Mid(CONST_InputString, 1, a)
     Teil2 = Mid(CONST_InputString, a + 1)
  Else
    'nichts gefunden'
     GoTo Schluss
  End If
  
  'Count'
  If Len(Teil1) = 6 Then
    CONST_TargetString1 = Teil1
  Else
    'falsche Länge'
    GoTo Schluss
  End If
  If (Len(Teil2) = 8 And InStr(CONST_InputString, "/")) _
  Or (Len(Teil2) = 9 And InStr(CONST_InputString, "-")) Then
    CONST_TargetString2 = Teil2
  Else
    'falsche Länge'
    GoTo Schluss
  End If

: Schluss
End Sub
 
Gut, dass einer geantwortet hat, ich hatte nämlich bis jetzt keine Zeit, mich näher damit zu beschäftigen.
Danach kommt der Teil von tH (mit eingefügtem End if, er hatte eins zu wenig afaik *g), [...]
Ein If-Block, ein End If. Da fehlt nix :p
 
Hm. Dachte das wären 2 Ifs da oben :p
kann aber auch daran liegen dass das code-Tag im IE furchtbar unformatiert daherkommt :ugly: