Excel Zellenformatierung

  • #1
M

MasterQ

Bekanntes Mitglied
Themenersteller
Dabei seit
06.03.2006
Beiträge
139
Reaktionspunkte
0
Hallo,

habe hier Excel 2000 Sp3 mit einer Tabelle, 10 Jahre alt, rund 1500 Zeilen und zig Spalten. Einige Spalten, in denen Zahlenwerte stehen sind allerdings als Text formatiert.

In diesen Spalten sind keine Berechnungen möglich, da die Zahlen ja keine Zahlen sind sondern als Text interpretiert werden. Mir ist es leider nicht gelungen, die Einstellungen so zu ändern, dass aus dem Text 25,8 die Zahl 25,8 wird. Auch das Umkopieren mit inhalte einfügen und werte bringt keinen Erfolg. Zwar ist dann die Einstellung des Formats z.B. Zahl und angezeigt wird auch 25,8 doch es ist definitiv nach wie vor ein Text, denn wenn ich die Anzahl der Nachkommastellen ändere, tut sich an der Anzeige nix.

Wie kriege ich es hin, dass aus Text eine Zahl wird? Wichtig zu wissen ist auch, dass diese Tabelle auch echten Text in Spalten enthält und einige Zellen farblich markiert sind. Also einfach mal als csv abspeichern und wieder einlesen ist nicht, da sonst genau diese wichtigen Formatierungen verloren gehen.

Hat jemand eine Idee?

Gruß

MQ
 
  • #2
Hallo MasterQ,

folgender Makro könnte dir behilflich sein.

Er arbeitet auf der aktuellen Arbeitsmappe auf der selektioerten Spalte.
Unter cFORMAT_ZAHL müßtest du noch das gewünschte Zahlenformat angeben.
(siehe A N PN A S S E N)

Gruß Matjes :)
Code:
Option Explicit

Sub Spalte_StringinZahlWandeln()
 
-><<< A N P A S S E N >>>
->Const cFORMAT_ZAHL = 0.00->mit 2 Nachkommastellen
 Const cFORMAT_ZAHL = 0.0->Mit 1 Nachkopmmastellen
->Const cFORMAT_ZAHL = 0 ->ohne Nachkopmmastellen
-><<< A N P A S S E N  E N D E >>>

 Dim ws As Worksheet
 Dim lCol As Long, lRows As Long, x As Long
 Dim sTxt As String, dTxt As Double

->pruefen, ob nur eine Spalte selektiert ist
 If Selection.Columns.Count > 1 Then
  MsgBox  Bitte nur eine Spalte selektieren
  Exit Sub
 End If
->Spalte bestimmen
 lCol = Selection.Column
 
 Set ws = ActiveSheet
 
->letzte Zeile für Spalte bestimmen
 lRows = ws.Cells(ws.Rows.Count, lCol).End(xlUp).Row
 
->über alle Zeilen der Spalte
 For x = 1 To lRows
  If ws.Cells(x, lCol).NumberFormat = @ Then
   sTxt = ws.Cells(x, lCol).Value
   On Error Resume Next
   dTxt = sTxt
   If Err.Number <> 0 Then
    Err.Clear
    MsgBox Zeile  & x & sTxt &  kann nicht in eine Zahl umgewandelt werden.
   Else
    ws.Cells(x, lCol).Value = 
    ws.Cells(x, lCol).NumberFormat = cFORMAT_ZAHL
    ws.Cells(x, lCol).Value = dTxt
   End If
   On Error GoTo 0
  End If
 Next
AUFAEUMEN:
 Set ws = Nothing
End Sub
 
  • #3
Hallo Matjes,

Matjes schrieb:
folgender Makro könnte dir behilflich sein.

vielen Dank für das Makro.

Leider funktioniert es nicht so, wie man es vermuten würde. Das Problem liegt aber nicht am Makro. Ich habe das Makro auf die Datei losgelassen und habe schon jubiliert, denn es zeigte Erfolg. Leider musste ich kurz darauf feststellen, dass der Erfolg nicht durchgängig war. In einer Spalte gibt es Zellen, bei denen geht es und Zellen bei denen geht es nicht.

Wenn das Makro funzt, dann kann man auch in den Zelleneigenschaften, das Format ändern und dann wird automatisch aus Text eine Zahl, da brauchts kein Makro. In den Zellen wo sich durch die Zelleneigenschaften nix tut, hilft das Makro auch nicht.

Ich kann keine Unterschiede in den Einstellungen zwischen den Zellen feststellen. Bis Zeile 869 gehen alle Zellen, danach gehen einige und einige nicht. Später kommt dann ein Bereich, in dem alle Zellen nicht mehr umzuwandeln sind.

Kann es sein, dass die Datei allgemein einen Schuß hat? Wenn ja, wie kriege ich die Inhalte und farblichen Formatierungen ein eine neue Datei kopiert ohne dass evtl das Kaputte mit übernommen wird. Die Daten in der Tabelle sind höchst wichtig! Sowohl die Daten als auch die farblichen Markierungen dürfen nicht verloren gehen. Eine händische Nachbearbeitung wäre sehr aufwendig und fehleranfällig! :'(

Gruß

MQ
 
  • #4
Hallo MasterQ,

kannst du mir einen Auszug aus der Datei an mein mailaddy schicken ?
(Ich setze auch ne dicke Sonnebrille auf 8) )
Dann schau ich heute abend mal, woran es liegt.

Gruß Matjes :)
 
  • #5
Matjes schrieb:
kannst du mir einen Auszug aus der Datei an mein mailaddy schicken ?
(Ich setze auch ne dicke Sonnebrille auf 8) )
Dann schau ich heute abend mal, woran es liegt.

Mail ging gerade raus!

Gruß und Danke

MQ
 
  • #6
Hallo MasterQ,

mit dieser Makro-Variante sollte es klappen.

Gruß Matjes :)
Code:
Option Explicit

Sub Spalte_StringinZahlWandeln()
 
-><<< A N P A S S E N >>>
->Const cFORMAT_ZAHL = 0.00->mit 2 Nachkommastellen
 Const cFORMAT_ZAHL = 0.0->Mit 1 Nachkopmmastellen
->Const cFORMAT_ZAHL = 0 ->ohne Nachkopmmastellen
-><<< A N P A S S E N  E N D E >>>

 Dim ws As Worksheet
 Dim lCol As Long, lRows As Long, x As Long
 Dim sTxt As String, dTxt As Double

->pruefen, ob nur eine Spalte selektiert ist
 If Selection.Columns.Count > 1 Then
  MsgBox  Bitte nur eine Spalte selektieren
  Exit Sub
 End If
->Spalte bestimmen
 lCol = Selection.Column
 
 Set ws = ActiveSheet
 
->letzte Zeile für Spalte bestimmen
 lRows = ws.Cells(ws.Rows.Count, lCol).End(xlUp).Row
 
->über alle Zeilen der Spalte
 For x = 1 To lRows
   sTxt = ws.Cells(x, lCol).Value
   If sTxt =  Then
    ws.Cells(x, lCol).NumberFormat = cFORMAT_ZAHL
   Else
    On Error Resume Next
    dTxt = sTxt
    If Err.Number <> 0 Then
     Err.Clear
     MsgBox Zeile  & x & : & vbLf & sTxt & vbLf &  kann nicht in eine Zahl umgewandelt werden.
    Else
     ws.Cells(x, lCol).Value = 
     ws.Cells(x, lCol).NumberFormat = cFORMAT_ZAHL
     ws.Cells(x, lCol).Value = dTxt
    End If
    On Error GoTo 0
   End If
 Next
 
AUFAEUMEN:
 Set ws = Nothing
 
End Sub
 
  • #7
Hallo MasterQ,

mit folgender Variante sollte es klappen.

Gruß Matjes :)
Code:
Option Explicit

Sub Spalte_StringinZahlWandeln()
 
-><<< A N P A S S E N >>>
->Const cFORMAT_ZAHL = 0.00->mit 2 Nachkommastellen
 Const cFORMAT_ZAHL = 0.0->Mit 1 Nachkopmmastellen
->Const cFORMAT_ZAHL = 0 ->ohne Nachkopmmastellen
-><<< A N P A S S E N  E N D E >>>

 Dim ws As Worksheet
 Dim lCol As Long, lRows As Long, x As Long
 Dim sTxt As String, dTxt As Double

->pruefen, ob nur eine Spalte selektiert ist
 If Selection.Columns.Count > 1 Then
  MsgBox  Bitte nur eine Spalte selektieren
  Exit Sub
 End If
->Spalte bestimmen
 lCol = Selection.Column
 
 Set ws = ActiveSheet
 
->letzte Zeile für Spalte bestimmen
 lRows = ws.Cells(ws.Rows.Count, lCol).End(xlUp).Row
 
->über alle Zeilen der Spalte
 For x = 1 To lRows
   sTxt = ws.Cells(x, lCol).Value
   If sTxt =  Then
    ws.Cells(x, lCol).NumberFormat = cFORMAT_ZAHL
   Else
    On Error Resume Next
    dTxt = sTxt
    If Err.Number <> 0 Then
     Err.Clear
     MsgBox Zeile  & x & : & vbLf & sTxt & vbLf &  kann nicht in eine Zahl umgewandelt werden.
    Else
     ws.Cells(x, lCol).Value = 
     ws.Cells(x, lCol).NumberFormat = cFORMAT_ZAHL
     ws.Cells(x, lCol).Value = dTxt
    End If
    On Error GoTo 0
   End If
 Next
 
AUFAEUMEN:
 Set ws = Nothing
 
End Sub
 
Thema:

Excel Zellenformatierung

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben