Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Zahl als Text formatiert"

"Zahl als Text formatiert"
29.09.2014 12:16:17
Sparrow
Hallo!
Gibt es eine Möglichkeit das VBA den Unterschied zwischen "als Text gespeicherte Zahl" und eine normale Zahl sieht? Das Problem ist dass beide als "Standard" formatiert sind - ich muss allerdings innerhalb des VBA Codes einen Unterschied machen! Vielen Dank für die Hilfe
Viele Grüße
Sascha

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit der Funktion VarType()
29.09.2014 12:29:21
Daniel
Hi
select Case Vartype(Range("A1").Value)
Case 0: Msgbox "Leerzelle"
Case 5: Msgbox "Zahl"
Case 8: Msgbox "Text"
Case 10: Msgbox "Fehler"
Case Else: Msgbox "irgendwas ganz seltsames"
end Select
Gruß Daniel

AW: mit der Funktion VarType()
29.09.2014 13:03:56
Sparrow
Hmm,das hilft mir irgendwie nicht weiter :P
VBA soll das per Code erkennen und dann will ich weiter damit arbeiten
- nach dem Prinzip "If "als Text gespeicherte Zahl" then ...
Gruß
Sascha

AW: mit der Funktion VarType()
29.09.2014 13:08:37
Daniel
Hi
if IsNumeric(Range("A1").Value) And VarType(Range("A1").Value) = 8 Then
Msgbox "In Zelle A1 steht eine als Text gespeicherte Zahl"
End If

if IsNumeric(Range("A1").Value) And VarType(Range("A1").Value) = 5 Then
Msgbox "In Zelle A1 steht eine richtige Zahl"
End If
ist das für dich verständlicher?
gruß Daniel

Anzeige
AW: mit der Funktion VarType()
29.09.2014 13:15:23
Sparrow
Hey,
ich sag mal Jein - der folgende Code soll dementsprechend geändert werden dass nicht das Format der Zelle betrachtet wird sondern "als Text gespeicherte Zahl" oder Zahl (beides ist Format Standard)
Gibt es da eine Möglichkeit? Nochmals vielen Dank für die Hilfe..
Vg
Sascha
Option Explicit
Sub SuchFormat()
Dim wks As Worksheet, rng As Range, Dic As Object, arT
Dim cc As Long, ii As Long
Const ZeileUeb As Long = 6 'Zeile 6 durchsuchen nach...
Const TexteUeb As String = "X"
'nach diesen Spaltennamen
Set Dic = CreateObject("Scripting.Dictionary")
arT = Split(TexteUeb, "|") 'Die Überschriften der Spalten analysieren, bzw. die Ü _
berschriften splitten
For Each wks In ActiveWorkbook.Worksheets 'Jede Tabelle der Datei ansprechen
With wks
Dic.Add .Name & " wird durchsucht", ""             'Tabelle X wird durchsucht
If Not Intersect(.UsedRange, .Columns(2)) Is Nothing Then
For Each rng In Intersect(.UsedRange, .Columns(2)) ' Spalte B=2 untersuche ich immer
Select Case rng.NumberFormat 'hat die Zelle ein Zahlenformat?
Case "General", "@" 'oder ein Text bzw Standard-Format
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), "" 'falls Zahl - Name der Tabelle  _
sowie Adresse ausgeben
End Select
Next rng
For cc = 1 To .Cells(ZeileUeb, .Columns.Count).End(xlToLeft).Column 'Untersuche Zeile  _
6 bis zur letzten Spalte
For ii = 0 To UBound(arT)            ' Spalten mit best. Überschriften
If .Cells(ZeileUeb, cc) = arT(ii) Then ' hat eine Spalte die gesuchte Ü _
berschrift, dann
For Each rng In Intersect(.UsedRange, .Columns(cc))
Select Case rng.NumberFormat 's.o.
Case "General", "@"
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), ""
End Select
Next rng
End If
Next ii
Next cc
End If
End With
Next wks
Worksheets.Add Before:=Worksheets(1) 'Vor der aktuellen Tabelle eine neue erstellen
With ActiveSheet.Columns(1)       'bringe die gespeicherten Infos zu der ersten Zelle einer  _
neuen Tabelle
.NumberFormat = "@"
.Cells(1).Resize(Dic.Count) = Application.Transpose(Dic.Keys) 'gesicherte Daten in  _
horizontale Form bringen
.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, _
OtherChar:="!", FieldInfo:=Array(Array(1, 2), Array(2, 2))
End With
End Sub

Anzeige
AW: mit der Funktion VarType()
29.09.2014 13:25:08
Daniel
Hi
ja, so wie ich es dir beschrieben habe.
mit den Funktionen VarType und IsNumeric.
hat dann mit dem Zahlenformat der Zelle nichts zu tun.
solltest du den Wert erst in eine Variable einlesen um dann diese Variable zu prüfen, muss diese natürlich vom Typ Variant sein.
mit VarType prüfst du, ob der Zellinhalt aus VBA-sicht Text oder Zahl ist, mit IsNumeric prüfst du, ob der Zellinhalt eine Zahl ist oder ein Text, der von VBA in eine Zahl gewandelt werden kann.
Eine als Text gespeicherte Zahl liegt vor, wenn der Zellinhalt aus Excelsicht ein Text ist (Vartype() = 8), aber der Text in eine Zahl gewandelt werden kann (IsNumeric() = True)
Wenn ich mir deinen Code anschauen soll, dann solltest du ein bisschen erläutern, an welcher Stelle im Code diese Prüfung stattfinden soll.
Gruß Daniel

Anzeige
AW: mit der Funktion VarType()
29.09.2014 14:00:34
Sparrow
Hey,
nochmals vielen Dank für die Antwort - die Prüfungen finden an 2 Stellen statt:
1:
For Each rng In Intersect(.UsedRange, .Columns(2)) ' Spalte B=2 untersuche ich immer
Select Case rng.NumberFormat 'hat die Zelle ein Zahlenformat?
Case "General", "@" 'oder ein Text bzw Standard-Format
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), "" 'falls Zahl - Name der Tabelle _
sowie Adresse ausgeben
End Select
2:
For Each rng In Intersect(.UsedRange, .Columns(cc))
Select Case rng.NumberFormat 's.o.
Case "General", "@"
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), ""
End Select
Vg.
Sascha

Anzeige
AW: mit der Funktion VarType()
29.09.2014 14:18:38
Daniel
damit prüfst du das Zahlenformat der Zelle.
das muss aber nicht unbedingt etwas mit dem tatsächlichen Inhalt zu tun haben.
Grundsätzlich wäre mal folgende Fragen zu beantworten:
a) wie werden die Daten in Spalte B erzeugt?
b) welche Fälle gibt es
c) was genau soll in welchem Fall passieren?
d) was ist sinn und Zweck des Makros?
Gruß Daniel

AW: mit der Funktion VarType()
29.09.2014 14:21:40
Sparrow
Ja, damit prüfe ich das Format, ich will aber lediglich Prüfen ob der Wert in der Zelle eine Zahl ist oder "als Text gespeicherte Zahl" - dieser Unterschied ist wichtig! Ist der Wert dann lediglich eine Zahl und keine "als Text gespeicherte Zahl" soll die Adresse sowie der Tabellenblattename ausgegeben werden. Das funktioniert auch alles, ich will allerdings einfach nur nach einer Zahl suchen und nicht nach dem Zellenformat Zahl - dazu muss ich den Unterschied zu "als Text gespeicherte Zahl" ziehen!
Vg.
Sascha

Anzeige
AW: mit der Funktion VarType()
29.09.2014 14:26:48
Daniel
Hi
wie oft soll ich dir das eigentlich noch schreiben:
eine echte Zahl liegt vor, wenn VarType(rng.Value)=5 ist und eine als Text gespeicherte Zahl liegt vor, wenn VarType(rng.Value)=8 und IsNumeric(rng.value)=True ist.
du musst da nur noch deine Variablen entsprechend einsetzen.
Gruß Daniel

AW: mit der Funktion VarType()
29.09.2014 15:17:42
Sparrow
Sorry.. ich habe es eingesetzt - allerdings schmeisst er mir nun alle Zellen raus die "als Text gespeicherte Zahl' sind... was ist das Problem? Sorry sorry...
1:
Select Case VarType(rng.Value) = 5 'hat die Zelle ein Zahlenformat? WorksheetFunction.IsNumber(…)
Case VarType(rng.Value) = 8, IsNumeric(rng.Value) = True 'oder ein Text bzw Standard-Format
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), "" 'falls Zahl - Name der Tabelle sowie Adresse ausgeben
End Select
2:
Select Case VarType(rng.Value) = 5 's.o.
Case VarType(rng.Value) = 8, IsNumeric(rng.Value) = True
Case Else
Dic.Add .Name & "!" & rng.Address(0, 0), ""
End Select
Tut mir leid wenn die Frage dumm rüber kommt..
Vg.
Sascha

Anzeige
AW: mit der Funktion VarType()
29.09.2014 15:52:56
Sparrow
Habs, vielen Dank Jungs"
Vg.
Sascha

AW: mit der Funktion VarType()
29.09.2014 13:10:31
Hajo_Zi
Hallo Sascha,
wo ist das Problem? Schreibe Deinen Code bei Case 8

Statt 'IsNumeric' und 'VarType' kann man auch ...
29.09.2014 13:36:31
Luc:-?
WorksheetFunction.IsNumber(…) verwenden, Sascha,
wenn man eine echte Zahl erkennen will.
Gruß, Luc :-?

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige