2013-08-22 11 views
7

Co tydzień otrzymuję arkusz kalkulacyjny, a z różnych przyczyn pozostających poza moją kontrolą niektóre kolumny wychodzą jako tekst zapisany jako liczby, a nie liczby. Muszę przekonwertować je na liczby dla rzeczy, które zdarzają się z nimi później w kodzie.Konwertowanie określonego zakresu kolumn z tekstu na format liczbowy za pomocą VBA

jestem przekształcając je do liczb w tej chwili w ten sposób:

Dim rng As Range 

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

Czy istnieje lepszy (czyli bardziej wydajne) sposób to zrobić?

Grałem z NumberFormat i wydawało się, że nie działa.

Z góry dziękuję (i przepraszam, jeśli opuściłem rozwiązanie już tutaj - przeszukałem go i nie znalazłem).

+5

zrobiłbym tak: rng.Value = rng.Value. Powinien przekształcić tekst na liczby. Po prostu niewielkim błędem, jeśli masz jakąkolwiek formułę w zakresie, to zamieniłbyś ją na zwykłą wartość. Istnieje jednak łatwe obejście tego problemu. Ale to powinno wystarczyć. – Vikas

+1

Należy zauważyć, że metoda @Vikas nie działa ze wszystkimi ustawieniami regionalnymi, w zależności od ich separatora dziesiętnego. Na przykład w niemieckim języku, jeśli zastosujesz wartość ".Value = .Value" do zakresu, tylko liczby całkowite zostaną przekonwertowane na liczby. Jest to zakres z treścią tekstową: 1 | 2 | 0,5 staje się * 1 * | * 2 * | ** 0,5 ** w przypadku, gdy kursywa jest konwertowana na liczby, ale pogrubiona część jest nadal tylko tekstem. –

Odpowiedz

10

Excel:

  • Kopiowanie pusta komórka
  • Wybierz zakres, w którym trzeba zmienić format
  • Wybierz PasteSpecial i pod Operation wybrać Add

VBA

(zmiana Sheet1 związku z tym, przy założeniu, że A100000 jest pusta):

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

Jeśli umieścić wyżej w przypadku Workbook_Open będzie wykonać konwersję automatycznie przy każdym otwarciu skoroszytu.

Przy użyciu tej metody formuły są zachowywane.


Mam nadzieję, że to pomoże!

+0

Vikas i loannis: świetne techniki w tej sytuacji - dziękuję. Przetestowałem obie sugestie i działają one bardzo dobrze dla moich potrzeb. – EndlessLoop

+0

Wielką zaletą tej techniki jest to, że puste komórki pozostają puste. –

1

Jest to łatwiejsze:

With Selection 
    .NumberFormat = "0" 
    .Value = .Value 
End With 
Powiązane problemy