Respuestas:
CStr(45)
es todo lo que necesitas (la función Convertir cadena)
CStr(CDbl(***))
7
convierta 007
. También puede especificar el número de decimales o incluir miles de separadores. Si estos detalles son importantes para usted: excelfunctions.net/vba-format-function.html
La mayoría de las veces, no necesitará "convertir"; VBA hará una conversión de tipo implícita segura para usted, sin el uso de convertidores como CStr
.
¡El siguiente código funciona sin problemas, porque la variable es de tipo cadena y la conversión de tipo implícita se realiza automáticamente!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Resultado:
"Mi número es: 0"
Ni siquiera tienes que ponerte tan elegante, esto también funciona:
Dim myString as String
myString = 77
"77"
El único momento que TENDRÁ que convertir es cuando la variable Tipo es ambigua (por ejemplo, Tipo Variante o Celda Value
(que es Variante)).
Incluso entonces, no tendrá que usar la CStr
función si se está combinando con otra variable o constante de cadena. Me gusta esto:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Mi número favorito es el 7"
Entonces, realmente, el único caso raro es cuando realmente desea almacenar un valor entero, en una variante o valor de celda, cuando no se combina con otra cadena (que es un caso secundario bastante raro, podría agregar):
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = i
7 7
Dim i as Integer
i = 7
Sheet1.Range("A1").Value = CStr(i)
"7"
Option Base 1
implícitas basadas en 1 con , tipeo implícito con Def[Type]
(¡vaya, MAL!), Implícito ... lo entiendes: lo único bueno implícito en VBA es la sintaxis de llamada implícita que hizo que lo explícito Call
quedara obsoleto.
En mi caso, no se encontró la función CString. Pero agregar una cadena vacía al valor también funciona.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, que es una función VB.NET. Concatenar un literal de cadena vacío para hacer una cadena es un método de conversión bastante aburrido. Úselo CStr
para conversiones de tipo explícitas: esta es una conversión de tipo implícita y levanta las cejas de cualquiera que lea ese código. Lo siento, encontré esta respuesta tan tarde después de que se publicó, desearía haberla votado mucho antes.
Si la cadena que está tirando resulta ser un número hexadecimal como E01, Excel la traducirá a 0 incluso si usa la función CStr, e incluso si la deposita primero en un tipo de variable de cadena. Una forma de evitar el problema es agregar 'al comienzo del valor.
Por ejemplo, al extraer valores de una tabla de Word y llevarlos a Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
El camino más corto sin declarar la variable es con sugerencias de tipo :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Esto no se compilará con Option Explicit
. Los tipos no serán Variant
sino String
yInteger
Otra forma de hacerlo es unir dos secciones analizadas del valor numérico:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
He encontrado un mayor éxito con esto que CStr()
porque CStr()
no parece convertir números decimales que provienen de variantes en mi experiencia.
Si tiene un valor entero válido y su requisito es comparar valores, simplemente puede continuar con la comparación como se ve a continuación.
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 respuesta aceptada es buena para números más pequeños, lo más importante mientras toma datos de hojas de Excel. ya que los números más grandes se convertirán automáticamente en números científicos, es decir, e + 10.
Así que creo que esto te dará una respuesta más general. No comprobé si tiene alguna caída o no.
CStr(CDbl(#yourNumber#))
¡Esto funcionará para los números convertidos e +! como el justoCStr(7.7685099559e+11)
se mostrará como "7.7685099559e + 11" no como se esperaba: "776850995590" Así que prefiero decir que mi respuesta será un resultado más genérico.
Saludos, 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)
, para ser preciso.