¿Cómo convierto un entero en una cadena en Excel VBA?

Respuestas:

262

CStr(45) es todo lo que necesitas (la función Convertir cadena)

Yosem
fuente
1
CStr(45), para ser preciso.
Kouichi C. Nakamura
¡Esto no funcionará para los números convertidos e +! es decir, 7.7685099559e + 11 se mostrará como "7.7685099559e + 11" no como se esperaba: "776850995590" Así que prefiero decir que será más genérico:CStr(CDbl(***))
Mahhdy
Puede responder a las necesidades de la pregunta, pero también es incompleta e insuficiente en algunas circunstancias. A menudo (por ejemplo, para fines de denominación de archivos) es posible que desee crear números con prefijo cero, de modo que se 7convierta 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
cartbeforehorse
97

Pruebe la función CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

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 CStrfunció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"

LimaNocheHawk
fuente
2
No entiendo por qué esta respuesta no tiene más votos, dado que es verdad. Vale la pena señalar que la conversión de tipo no siempre se realiza, depende del operador en uso. Por ejemplo, la operación + no siempre ampliará un número entero a una cadena.
Mark Ch
1
@ MarkCh Sé que esto es viejo, pero ... ¿quizás porque las odiosas conversiones implícitas de VBA y las llamadas de miembros predeterminadas son lo que hace que tanto código de VBA sea frágil, sorprendente y propenso a errores? No habría la mitad de las preguntas de VBA en SO si no fuera por conversiones implícitas, accesibilidad implícita, acceso implícito de miembros predeterminados, matrices Option Base 1implí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 Callquedara obsoleto.
Mathieu Guindon
7

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
Julian Kuchlbauer
fuente
2
Nadie habló 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 CStrpara 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.
Mathieu Guindon
2

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)
dolphus333
fuente
2

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 Variantsino StringyInteger

Slai
fuente
0

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.

Jonathan
fuente
0

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
usuario2648008
fuente
0

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

Mahhdy
fuente
0

ingrese la descripción de la imagen aquí

    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 - Convierta números a texto con VBA

Gajendra Santosh
fuente