Microsoft Excel

Herbers Excel/VBA-Archiv

"Zahl als Text formatiert"

Betrifft: "Zahl als Text formatiert" von: Sparrow
Geschrieben am: 29.09.2014 12:16:17

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

  

Betrifft: AW: mit der Funktion VarType() von: Daniel
Geschrieben am: 29.09.2014 12:29:21

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 13:03:56

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


  

Betrifft: AW: mit der Funktion VarType() von: Daniel
Geschrieben am: 29.09.2014 13:08:37

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 13:15:23

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



  

Betrifft: AW: mit der Funktion VarType() von: Daniel
Geschrieben am: 29.09.2014 13:25:08

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 14:00:34

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


  

Betrifft: AW: mit der Funktion VarType() von: Daniel
Geschrieben am: 29.09.2014 14:18:38

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 14:21:40

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


  

Betrifft: AW: mit der Funktion VarType() von: Daniel
Geschrieben am: 29.09.2014 14:26:48

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 15:17:42

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


  

Betrifft: AW: mit der Funktion VarType() von: Sparrow
Geschrieben am: 29.09.2014 15:52:56

Habs, vielen Dank Jungs"
Vg.
Sascha


  

Betrifft: AW: mit der Funktion VarType() von: Hajo_Zi
Geschrieben am: 29.09.2014 13:10:31

Hallo Sascha,

wo ist das Problem? Schreibe Deinen Code bei Case 8

GrußformelHomepage


  

Betrifft: Statt 'IsNumeric' und 'VarType' kann man auch ... von: Luc:-?
Geschrieben am: 29.09.2014 13:36:31

WorksheetFunction.IsNumber(…) verwenden, Sascha,
wenn man eine echte Zahl erkennen will.
Gruß, Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema ""Zahl als Text formatiert""