2013-08-22 8 views
7

Ich bekomme wöchentlich eine Tabelle, und aus verschiedenen Gründen außerhalb meiner Kontrolle einige Spalten kommen als Text als Zahlen statt als Zahlen gespeichert. Ich muss sie für Zahlen, die später im Code passieren, in Zahlen umwandeln.Konvertieren eines bestimmten Bereichs von Spalten von Text in Zahlenformat mit VBA

ich sich Zahlen im Moment bin Umwandlung von diesem zu tun:

Dim rng As Range 

For Each rng In Range("A:D").Columns 
    rng.TextToColumns 
Next rng 

Gibt es eine bessere (das heißt effiziente) Art und Weise, dies zu tun?

Ich spielte mit NumberFormat herum und es schien nicht zu funktionieren.

Vielen Dank im Voraus (und Entschuldigung, wenn ich eine Lösung schon hier verpasst habe - ich habe eine Suche und habe es nicht gefunden).

+5

ich so tun würde: rng.Value = rng.Value. Es sollte den Text in Zahlen konvertieren. Nur ein kleiner Fehler, wenn Sie irgendeine Formel in dem Bereich haben, würde es die Formel auch in einfachen Wert konvertieren. Es gibt jedoch eine einfache Problemumgehung für dieses Problem. Aber das sollte es tun. – Vikas

+1

Beachten Sie, dass die @Vikas-Methode nicht mit allen Gebietsschemas funktioniert, abhängig von ihrem jeweiligen Dezimaltrennzeichen. Wenn Sie beispielsweise im deutschen Gebietsschema den Wert ".Value = .Value" auf einen Bereich anwenden, werden nur die Ganzzahlen in Zahlen konvertiert. Das ist ein Bereich mit dem Textinhalt: 1 | 2 | 0,5 wird * 1 * | * 2 * | ** 0,5 ** wobei die kursiven Teile in Zahlen umgewandelt werden, der fett gedruckte Teil jedoch immer noch nur aus Text besteht. –

Antwort

10

Excel:

  • Kopieren eine leere Zelle
  • Wählen Sie den Bereich, in dem Sie benötigen das Format
  • Select PasteSpecial, zu ändern und unter Operation wählen Add

VBA

(Sheet1 Dementsprechend ändern, vorausgesetzt, dass A100000 leer ist):

Sheet1.Range("A100000").Copy 
Sheet1.UsedRange.PasteSpecial , xlPasteSpecialOperationAdd 

Wenn Sie die oben in das Workbook_Open Ereignis platzieren, wird es die Umwandlung automatisch jedes Mal, wenn Sie die Arbeitsmappe öffnen, auszuführen.

Mit dieser Methode bleiben Formeln erhalten.


Ich hoffe, dass hilft!

+0

Vikas und Loynis: großartige Techniken für diese Situation - danke. Ich habe beide Vorschläge getestet und sie funktionieren sehr gut für meine Bedürfnisse. – EndlessLoop

+0

Der große Vorteil dieser Technik ist, dass die leeren Zellen leer bleiben. –

7

Von dieser Website http://www.access-programmers.co.uk/forums/showthread.php?t=219316 Ich habe diese Idee:

Range("D1:D400") = Range("D1:D400").Value 

Und es funktioniert perfekt!

+0

Es ist dasselbe wie [@Vikas] (http://stackoverflow.com/users/723914/vikas) Vorschlag in den Kommentaren unter der Frage: 'rng.Value = rng.Value'. Dies funktioniert jedoch nicht für mich, während 'TextToColumns' und' PasteSpecial' funktionieren. – ZygD

1

Das ist einfacher:

With Selection 
    .NumberFormat = "0" 
    .Value = .Value 
End With 
Verwandte Themen