Jak przekonwertować liczbę całkowitą „45” na wartość ciągu „45” w programie Excel VBA?
vba
string
type-conversion
integer
Co tam
źródło
źródło
CStr(45)
, być precyzyjnym.CStr(CDbl(***))
7
staje007
. Możesz także określić liczbę miejsc dziesiętnych lub dołączyć separatory tysięcy. Jeśli te szczegóły są dla Ciebie ważne: excelfunctions.net/vba-format-function.htmlWypróbuj funkcję CStr ()
źródło
W większości przypadków nie musisz „konwertować”; VBA wykona za Ciebie bezpieczną niejawną konwersję typów bez użycia konwerterów, takich jak
CStr
.Poniższy kod działa bez żadnych problemów, ponieważ zmienna jest typu String, a niejawna konwersja typu jest wykonywana automatycznie!
Wynik:
Nie musisz nawet mieć takiej fantazji, to też działa:
Konwersja będzie potrzebna tylko wtedy, gdy zmienna Typ jest niejednoznaczna (np. Wariant typu lub komórka
Value
(która jest wariantem)).Nawet wtedy nie będziesz musiał używać
CStr
funkcji, jeśli składasz z inną zmienną lub stałą typu String. Lubię to:Tak naprawdę jedynym rzadkim przypadkiem jest sytuacja, gdy naprawdę chcesz przechowywać wartość całkowitą w wariancie lub wartości komórki, gdy nie jest ona również łączona z innym ciągiem (co jest dość rzadkim przypadkiem pobocznym, mogę dodać):
źródło
Option Base 1
, niejawne wpisywanie zDef[Type]
(chłopiec to ZŁE!), Niejawne ... rozumiesz - jedyną dobrą niejawną rzeczą w VBA jest niejawna składnia wywołania, która sprawiła, że jawne stało sięCall
przestarzałe.W moim przypadku nie znaleziono funkcji CString. Ale dodanie pustego ciągu do wartości też działa.
źródło
CString
, co jest funkcją VB.NET. Łączenie pustego literału ciągu w celu utworzenia łańcucha jest dość kiepską metodą konwersji. UżywajCStr
do jawnych konwersji typów - jest to niejawna konwersja typów i budzi brwi każdego czytającego ten kod. Przepraszam, że znalazłem tę odpowiedź tak późno po jej opublikowaniu, żałuję, że nie mogłem jej ocenić znacznie wcześniej.Jeśli ciąg, który ciągniesz, jest liczbą szesnastkową, taką jak E01, program Excel przetłumaczy go na 0, nawet jeśli użyjesz funkcji CStr, a nawet jeśli najpierw zdeponujesz go w zmiennej typu String. Jednym ze sposobów obejścia tego problemu jest dodanie „na początku wartości”.
Na przykład podczas wyciągania wartości z tabeli programu Word i przenoszenia ich do programu Excel:
źródło
Najkrótszym sposobem bez deklarowania zmiennej są wskazówki dotyczące typów :
To się nie skompiluje z
Option Explicit
. Nie będzie typówVariant
aleString
iInteger
źródło
Innym sposobem jest połączenie dwóch przeanalizowanych sekcji wartości liczbowej:
Odniosłem większy sukces niż to,
CStr()
żeCStr()
wydaje się, że nie konwertuje liczb dziesiętnych pochodzących z wariantów z mojego doświadczenia.źródło
Jeśli masz prawidłową wartość całkowitą i Twoim wymaganiem jest porównanie wartości, możesz po prostu wykonać porównanie, jak pokazano poniżej.
źródło
Zaakceptowana odpowiedź jest dobra dla mniejszych liczb, co najważniejsze, gdy pobierasz dane z arkuszy Excela. ponieważ większe liczby zostaną automatycznie zamienione na liczby naukowe, tj. e + 10.
Więc myślę, że to da ci bardziej ogólną odpowiedź. Nie sprawdziłem, czy ma to jakiś upadek, czy nie.
to zadziała dla liczb przekonwertowanych e +! ponieważ po prostu
CStr(7.7685099559e+11)
zostanie wyświetlony jako „7.7685099559e + 11” nie zgodnie z oczekiwaniami: „776850995590” Więc raczej powiem, że moja odpowiedź będzie bardziej ogólna.Pozdrawiam, M
źródło
Reffer: MrExcel.com - Konwertuj liczby na tekst za pomocą VBA
źródło