Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Als Text gespeicherte Zahlen





Frage

Hallo zusammen, ich dreh noch durch! Ich importiere mit VBA aus einer Textdatei einen Haufen Zahlen in Excel (2003). Allerdings ist Excel natürlich mal wieder schlauer und meint, es müsse die Zahlen in Text konvertieren. Nun gut, man kann das ja auch wieder rückgängig machen - dachte ich mir. Folgender Code bewirkt aber leider GAR NIX: ---8<--- intUsedRows = Activesheet.UsedRange.Rows.Count intUsedCols = Activesheet.UsedRange.Columns.Count Set rngSource = Activesheet.Cells(1, (intUsedCols + 1)) Set rngTarget = Activesheet.Range(Activesheet.Cells(2, 5), Activesheet.Cells(intUsedRows, intUsedCols)) rngSource.Value = 1 rngSource.Copy rngTarget.PasteSpecial Operation:=xlPasteSpecialOperationMultiply --->8--- Im Prinzip sollte damit genau das funktionieren, was bei diesem Problem in diesem und in anderen Foren als Lösung empfohlen wird: in eine leere Zelle eine 1 schreiben und diese dann mit "Multiplizieren" in den Bereich, der die als Text gespeicherten Zahlen enthält, kopieren. Leider jedoch sehen die Zahlen genauso aus wie vorher. Totaler Müll. Und per Schleife zeilen- und spaltenweise durchzugehen und jeden Inhalt einzeln mit 1 zu multiplizieren dauert bei einem entsprechend großen Blatt selbst nem 4-Prozessor-System einige Minuten ... für die Anwendung inakzeptabel. Weiß jemand Rat? Björn

Antwort 1 von Aliba

Hi Björn,

hab mal Deinen Code ausprobiert. Was mir auffällt:

Wenn es sich bei den Textwerten um Werte mit Dezimaltrenner . handelt funktioniert das. Wenn es kommagetrennte Zahlen sind funktioniert das nicht.

Da scheint es einen Sprachkonflikt zu geben, daß die ,-getrennten Werte nicht als Werte interpretiert werden.

Nachdem ich von VB keine Ahnung habe, kann ich dir leider auch keine Alternative vorschlagen, ausser die ganze Prozedur mit dem Makrorekorder aufzuzeichnen und dann das ganze per Makroaufruf zu starten. Dann funzt das.
Ein vorheriges SUCHEN und ERSETZEN des Kommas durch Punkt hat den dummen Nachteil, dass dann einige Werte als Datum interpretiert werden und somit dann einfach falsch sind.

CU Aliba

Antwort 2 von nighty

hi alle :)

doch probier das mal :)

gruss nighty

Sub Makro1()
Set LastCell = ActiveSheet.Cells.SpecialCells(xlLastCell)
alta = LastCell.Row
a = LastCell.Row
Do While Application.CountA(Rows(a)) = 0 And a <> 1
a = a - 1
Loop
alta = a
altb = LastCell.Column
b = LastCell.Column
Do While Application.CountA(Columns(b)) = 0 And b <> 1
b = b - 1
Loop
altb = b
lzeile = alta
lspalte = altb
With Worksheets
For t1 = 1 To lzeile
For t2 = 1 To lspalte
For t3 = 1 To Len(Cells(t1, t2))
For t4 = 48 To 57
If Cells(t1, t2) <> "" Then
If Asc(Mid$(Cells(t1, t2), t3, 1)) = t4 Then
neu$ = neu$ & Mid$(Cells(t1, t2), t3, 1)
End If
End If
Next t4
Next t3
neu1 = Val(neu$) / 100
neu2 = neu1 Mod 3
If neu2 <> 1 Then
Cells(t1, t2) = neu1 * 100
Else
Cells(t1, t2) = neu1
End If
neu$ = ""
Next t2
Next t1
End With
End Sub




Antwort 3 von nighty

hi alle :)

es erfolgt eine automatische abtastung der spalten wie zeilen mit anschliessender isolierung von zahlen ,andere zeichen werden ausgeschlossen.

in diesem abschnitt koennte man experimentieren

neu1 = Val(neu$) / 100
neu2 = neu1 Mod 3
If neu2 <> 1 Then
Cells(t1, t2) = neu1 * 100

gruss mighty