Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: "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

Anzeige

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

Anzeige
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

Anzeige
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

Anzeige
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 :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zahl als Text formatiert in Excel VBA erkennen und verarbeiten


Schritt-für-Schritt-Anleitung

Um in Excel VBA den Unterschied zwischen einer „echten Zahl“ und einer „als Text gespeicherten Zahl“ zu erkennen, kannst Du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ und wähle „Einfügen“ > „Modul“.

  3. Füge den folgenden Code ein:

    Sub TestZahlen()
       Dim rng As Range
       Set rng = Range("A1") ' Beispielzelle
    
       If IsNumeric(rng.Value) And VarType(rng.Value) = 8 Then
           MsgBox "In Zelle " & rng.Address & " steht eine als Text gespeicherte Zahl."
       ElseIf IsNumeric(rng.Value) And VarType(rng.Value) = 5 Then
           MsgBox "In Zelle " & rng.Address & " steht eine echte Zahl."
       Else
           MsgBox "In Zelle " & rng.Address & " steht kein gültiger Wert."
       End If
    End Sub
  4. Teste den Code: Fülle die Zelle A1 mit einer Zahl im Textformat und führe das Makro aus, um das Ergebnis zu sehen.


Häufige Fehler und Lösungen

  • Problem: „In dieser Zelle ist die Zahl als Text formatiert“ erscheint nicht korrekt.

    • Lösung: Stelle sicher, dass Du IsNumeric und VarType korrekt kombinierst. Der Code muss die Bedingungen richtig prüfen.
  • Problem: Alle Zellen werden herausgefiltert, auch wenn sie „als Text gespeicherte Zahlen“ enthalten.

    • Lösung: Überprüfe den Fall in Deinem Code für VarType und IsNumeric. Es muss beachtet werden, dass VarType(rng.Value) = 8 für Text und IsNumeric(rng.Value) = True für Zahlen steht.

Alternative Methoden

Eine weitere Möglichkeit, eine Zahl in Text in Excel zu formatieren, ist die Verwendung der Funktion WorksheetFunction.IsNumber():

If WorksheetFunction.IsNumber(rng.Value) Then
    MsgBox "In Zelle " & rng.Address & " steht eine echte Zahl."
ElseIf VarType(rng.Value) = 8 Then
    MsgBox "In Zelle " & rng.Address & " steht eine als Text gespeicherte Zahl."
End If

Diese Methode kann in bestimmten Fällen nützlich sein, wenn Du die IsNumeric-Funktion umgehen möchtest.


Praktische Beispiele

Hier sind einige Szenarien, in denen Du die oben genannten Methoden anwenden kannst:

  • Beispiel 1: Wenn Du eine Liste von Werten hast und nur die „als Text gespeicherten Zahlen“ extrahieren möchtest, kannst Du eine Schleife verwenden:

    For Each rng In Range("A1:A10")
       If IsNumeric(rng.Value) And VarType(rng.Value) = 8 Then
           ' Hier die Adresse speichern oder weiterverarbeiten
       End If
    Next rng
  • Beispiel 2: Um alle Zellen in einer Spalte zu überprüfen und die Ergebnisse in eine neue Tabelle zu übertragen.


Tipps für Profis

  • Verwende die Option Explicit-Anweisung am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind.
  • Nutze Debug.Print für eine einfache Fehlerdiagnose in Deinem Code, um Werte während der Laufzeit zu überprüfen.
  • Wenn Du mit großen Datenmengen arbeitest, erwäge, Application.ScreenUpdating auf False zu setzen, um die Verarbeitungsgeschwindigkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob eine Zelle eine „als Text gespeicherte Zahl“ enthält? Um dies zu überprüfen, kannst Du die Kombination aus IsNumeric und VarType verwenden. Wenn VarType(rng.Value) = 8 und IsNumeric(rng.Value) = True, handelt es sich um eine als Text gespeicherte Zahl.

2. Was ist der Unterschied zwischen einer echten Zahl und einer als Text gespeicherten Zahl? Eine echte Zahl hat den VarType 5, während eine als Text gespeicherte Zahl den VarType 8 hat, aber dennoch in eine Zahl umgewandelt werden kann.

3. Kann ich die Formatierung in VBA ändern? Ja, Du kannst die Formatierung einer Zelle in VBA ändern, indem Du den NumberFormat-Eigenschaft benutzt. Zum Beispiel: rng.NumberFormat = "@" für Textformat.

4. Wie gehe ich mit Excel-Fehlern bei der Zahlenerkennung um? Du kannst die IsError-Funktion verwenden, um zu überprüfen, ob ein Fehler in der Zelle vorliegt, bevor Du die Zahlenerkennung durchführst.

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