Come faccio a convertire il valore intero "45" nel valore stringa "45" in Excel VBA?
Come faccio a convertire il valore intero "45" nel valore stringa "45" in Excel VBA?
Risposte:
CStr(45)
è tutto ciò che serve (la funzione Converti stringa)
CStr(CDbl(***))
7
diventi 007
. Puoi anche specificare il numero di decimali o includere migliaia di separatori. Se questi dettagli sono importanti per te: excelfunctions.net/vba-format-function.html
La maggior parte delle volte, non sarà necessario "convertirlo"; VBA farà la conversione sicura del tipo implicito per te, senza l'uso di convertitori come CStr
.
Il codice seguente funziona senza problemi, perché la variabile è di tipo String e la conversione di tipo implicita viene eseguita automaticamente!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Risultato:
"Il mio numero è: 0"
Non devi nemmeno avere quella fantasia, anche questo funziona:
Dim myString as String
myString = 77
"77"
L'unica volta che dovrai convertire è quando la variabile Type è ambigua (ad esempio, Type Variant o una cella Value
(che è Variant)).
Anche allora, non dovrai usare la CStr
funzione se stai combinando con un'altra variabile o costante String. Come questo:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Il mio numero preferito è 7"
Quindi, in realtà, l'unico caso raro è quando si desidera davvero archiviare un valore intero, in una variante o valore di cella, quando non si combina anche con un'altra stringa (che è un caso laterale piuttosto raro, potrei aggiungere):
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
impliciti basati su 1 con , digitazione implicita con Def[Type]
(ragazzo che è MALE!), Implicito ... lo capisci - l'unica cosa buona e implicita in VBA è la sintassi della chiamata implicita che ha reso Call
obsoleto l'esplicito .
Nel mio caso, la funzione CString non è stata trovata. Ma anche l'aggiunta di una stringa vuota al valore funziona.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, che è una funzione VB.NET. Concatenare una stringa vuota letterale per creare una stringa è un metodo di conversione piuttosto scadente. Utilizza CStr
per conversioni di tipo esplicite: si tratta di una conversione di tipo implicita e solleva le sopracciglia di chiunque legga quel codice. Mi dispiace di aver trovato questa risposta così tardi dopo che è stata pubblicata, vorrei poterla ridimensionare molto prima.
Se la stringa che stai inserendo sembra essere un numero esadecimale come E01, Excel la tradurrà come 0 anche se usi la funzione CStr e anche se la depositi per la prima volta in un tipo di variabile String. Un modo per aggirare il problema è aggiungere "all'inizio del valore.
Ad esempio, quando si estraggono valori da una tabella di Word e li si porta in Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Il modo più breve senza dichiarare la variabile è con Suggerimenti di tipo :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Questo non verrà compilato con Option Explicit
. I tipi non saranno Variant
ma String
eInteger
Un altro modo per farlo è quello di unire due sezioni analizzate del valore numerico:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Ho riscontrato un successo migliore in questo rispetto al CStr()
fatto CStr()
che non sembra convertire i numeri decimali derivati dalle varianti della mia esperienza.
Se hai un valore intero valido e il tuo requisito è confrontare i valori, puoi semplicemente andare avanti con il confronto come mostrato di seguito.
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
La risposta accettata è valida per numeri più piccoli, soprattutto quando si prendono dati da fogli Excel. poiché i numeri più grandi verranno automaticamente convertiti in numeri scientifici, ad es. e + 10.
Quindi penso che questo ti darà una risposta più generale. Non ho verificato se ha qualche caduta o no.
CStr(CDbl(#yourNumber#))
questo funzionerà con numeri convertiti e +! poiché il giusto CStr(7.7685099559e+11)
verrà mostrato come "7.7685099559e + 11" non come previsto: "776850995590" Quindi preferisco dire che la mia risposta sarà un risultato più generico.
Saluti, 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
CStr(45)
, per essere precisi.