Antworten:
CStr(45)
ist alles was Sie brauchen (die Funktion String konvertieren)
CStr(CDbl(***))
7
wird 007
. Möglicherweise möchten Sie auch die Anzahl der Dezimalstellen angeben oder tausend Trennzeichen einschließen. Wenn diese Details für Sie wichtig sind: excelfunctions.net/vba-format-function.html
In den meisten Fällen müssen Sie nicht "konvertieren". VBA führt für Sie eine sichere implizite Typkonvertierung durch, ohne die Verwendung von Konvertern wie CStr
.
Der folgende Code funktioniert ohne Probleme, da die Variable vom Typ String ist und die implizite Typkonvertierung automatisch für Sie erfolgt!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Ergebnis:
"Meine Nummer ist: 0"
Sie müssen nicht einmal so ausgefallen sein, das funktioniert auch:
Dim myString as String
myString = 77
"77"
Die einzige Zeit , die Sie konvertieren brauchen, ist , wenn die Variable Typ nicht eindeutig ist (zB Typ Variant, oder einer Zelle Value
(das ist Variant)).
Selbst dann müssen Sie keine CStr
Funktion verwenden, wenn Sie mit einer anderen String-Variablen oder -Konstante zusammensetzen. So was:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Meine Lieblingsnummer ist 7"
Der einzig seltene Fall ist also, wenn Sie wirklich einen ganzzahligen Wert in einer Variante oder einem Zellenwert speichern möchten, wenn Sie nicht auch mit einer anderen Zeichenfolge zusammensetzen (was ein ziemlich seltener Nebenfall ist, möchte ich hinzufügen):
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = i
7
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = CStr(i)
"7"
Option Base 1
, implizite Typisierung mit Def[Type]
(Junge, der böse ist!), Implizite ... Sie bekommen es - das einzig gute implizite Ding in VBA ist die implizite Aufrufsyntax, die das explizite Call
obsolet gemacht hat.
In meinem Fall wurde die Funktion CString nicht gefunden. Das Hinzufügen einer leeren Zeichenfolge zum Wert funktioniert jedoch auch.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, was eine VB.NET-Funktion ist. Das Verketten eines leeren String-Literals zu einem String ist eine ziemlich lahme Konvertierungsmethode. Verwendung CStr
für explizite Typkonvertierungen - Dies ist eine implizite Typkonvertierung und zieht die Augenbrauen aller Personen hoch, die diesen Code lesen. Es tut mir leid, dass ich diese Antwort so spät gefunden habe, nachdem sie veröffentlicht wurde. Ich wünschte, ich hätte sie viel früher ablehnen können.
Wenn die Zeichenfolge, die Sie einlesen, eine Hex-Zahl wie E01 ist, übersetzt Excel sie in 0, selbst wenn Sie die CStr-Funktion verwenden und wenn Sie sie zuerst in einem String-Variablentyp ablegen. Eine Möglichkeit, das Problem zu umgehen, besteht darin, an den Anfang des Werts anzuhängen.
Wenn Sie beispielsweise Werte aus einer Word-Tabelle ziehen und nach Excel bringen:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Der kürzeste Weg ohne Deklaration der Variablen ist mit Type Hints :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Dies wird nicht mit kompiliert Option Explicit
. Die Typen werden nicht Variant
aber String
und seinInteger
Eine andere Möglichkeit besteht darin, zwei analysierte Abschnitte des numerischen Werts miteinander zu verbinden:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Ich habe damit einen besseren Erfolg gefunden, als CStr()
weil CStr()
ich nach meiner Erfahrung keine Dezimalzahlen konvertieren möchte, die aus Varianten stammen.
Wenn Sie einen gültigen ganzzahligen Wert haben und Werte vergleichen möchten, können Sie den Vergleich einfach wie unten dargestellt durchführen.
Sub t()
Dim i As Integer
Dim s As String
' pass
i = 65
s = "65"
If i = s Then
MsgBox i
End If
' fail - Type Mismatch
i = 65
s = "A"
If i = s Then
MsgBox i
End If
End Sub
Die akzeptierte Antwort ist gut für kleinere Zahlen, vor allem, wenn Sie Daten aus Excel-Tabellen entnehmen. da die größeren Zahlen automatisch in wissenschaftliche Zahlen umgewandelt werden, dh e + 10.
Ich denke, dies wird Ihnen eine allgemeinere Antwort geben. Ich habe nicht überprüft, ob es einen Sturz gibt oder nicht.
CStr(CDbl(#yourNumber#))
Dies funktioniert für e + konvertierte Zahlen! da das gerade CStr(7.7685099559e+11)
als "7.7685099559e + 11" nicht wie erwartet angezeigt wird: "776850995590" Ich möchte also eher sagen, dass meine Antwort ein allgemeineres Ergebnis sein wird.
Grüße, M.
Sub NumToText(ByRef sRng As String, Optional ByVal WS As Worksheet)
'---Converting visible range form Numbers to Text
Dim Temp As Double
Dim vRng As Range
Dim Cel As Object
If WS Is Nothing Then Set WS = ActiveSheet
Set vRng = WS.Range(sRng).SpecialCells(xlCellTypeVisible)
For Each Cel In vRng
If Not IsEmpty(Cel.Value) And IsNumeric(Cel.Value) Then
Temp = Cel.Value
Cel.ClearContents
Cel.NumberFormat = "@"
Cel.Value = CStr(Temp)
End If
Next Cel
End Sub
Sub Macro1()
Call NumToText("A2:A100", ActiveSheet)
End Sub
Reffer: MrExcel.com - Konvertieren Sie Zahlen mit VBA in Text
CStr(45)
, um genau zu sein.