Wie konvertiere ich eine Ganzzahl in eine Zeichenfolge in Excel VBA?


Antworten:


262

CStr(45) ist alles was Sie brauchen (die Funktion String konvertieren)


1
CStr(45), um genau zu sein.
Kouichi C. Nakamura

Dies funktioniert nicht für e + konvertierte Zahlen! dh 7.7685099559e + 11 wird als "7.7685099559e + 11" nicht wie erwartet angezeigt: "776850995590" Ich möchte also eher sagen, dass dies allgemeiner sein wird:CStr(CDbl(***))
Mahhdy

Es kann die Bedürfnisse der Frage beantworten, ist aber unter bestimmten Umständen auch unvollständig und unzureichend. Oft (zB für Dateibenennung Zwecke) Sie könnten Null-Präfix Zahlen erstellt werden soll, so dass 7wird 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
cartbeforehorse

97

Probieren Sie die Funktion CStr () aus

Dim myVal as String;
Dim myNum as Integer;

myVal = "My number is:"
myVal = myVal & CStr(myNum);

51

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 CStrFunktion 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"


2
Ich verstehe nicht, warum diese Antwort nicht mehr Stimmen hat, da sie wahr ist. Es ist anzumerken, dass die Typkonvertierung nicht immer durchgeführt wird, sondern vom verwendeten Bediener abhängt. Beispielsweise erweitert die Operation + eine ganze Zahl nicht immer zu einer Zeichenfolge.
Mark Ch

1
@MarkCh Ich weiß, dass dies alt ist, aber ... vielleicht, weil die widerwärtigen impliziten Konvertierungen und Standardaufrufe von VBA so viel VBA-Code zerbrechlich, überraschend und fehleranfällig machen? Es würde nicht halb so viele VBA-Fragen zu SO geben, wenn es nicht um implizite Konvertierungen, implizite Zugänglichkeit, impliziten Standardzugriff für Mitglieder, implizite 1-basierte Arrays mit 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 Callobsolet gemacht hat.
Mathieu Guindon

7

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

2
Niemand hat darüber gesprochen CString, was eine VB.NET-Funktion ist. Das Verketten eines leeren String-Literals zu einem String ist eine ziemlich lahme Konvertierungsmethode. Verwendung CStrfü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.
Mathieu Guindon

2

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)

2

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 Variantaber Stringund seinInteger


0

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.


0

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

0

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.


0

Geben Sie hier die Bildbeschreibung ein

    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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.