Respostas:
CStr(45)
é tudo o que você precisa (a função Convert String)
CStr(CDbl(***))
7
é o caso 007
. Você também pode especificar o número de casas decimais ou incluir milhares de separadores. Se esses detalhes são importantes para você: excelfunctions.net/vba-format-function.html
Na maioria das vezes, você não precisará "converter"; O VBA fará uma conversão de tipo implícita segura para você, sem o uso de conversores como CStr
.
O código abaixo funciona sem problemas, porque a variável é do tipo String e a conversão implícita de tipos é feita automaticamente para você!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Resultado:
"Meu número é: 0"
Você não precisa nem gostar disso, isso também funciona:
Dim myString as String
myString = 77
"77"
A única vez que você precisará converter é quando a variável Type for ambígua (por exemplo, Type Variant ou uma célula Value
(que é Variant)).
Mesmo assim, você não precisará usar a CStr
função se estiver compondo com outra variável ou constante String. Como isso:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Meu número favorito é 7"
Então, realmente, o único caso raro é quando você realmente deseja armazenar um valor inteiro, em uma variante ou valor de célula, quando não está compondo outra string (que é um caso secundário bastante raro, devo acrescentar):
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
implícitas baseadas em 1 com , digitação implícita com Def[Type]
(garoto que é MAL!), Implícito ... você entende - a única coisa boa e implícita no VBA é a sintaxe implícita de chamada que tornou o explícito Call
obsoleto.
No meu caso, a função CString não foi encontrada. Mas adicionar uma string vazia ao valor também funciona.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, que é uma função do VB.NET. Concatenar um literal de string vazio para criar um string é um método de conversão bastante ruim. Use CStr
para conversões de tipo explícitas - essa é uma conversão implícita de tipos e levanta as sobrancelhas de quem lê esse código. Desculpe, encontrei esta resposta tão tarde depois que ela foi postada. Eu gostaria de ter diminuído a votação muito antes.
Se a string que você está inserindo for um número hexadecimal, como E01, o Excel a converterá como 0, mesmo se você usar a função CStr e mesmo se você a depositar primeiro em um tipo de variável String. Uma maneira de contornar o problema é anexar 'ao início do valor.
Por exemplo, ao extrair valores de uma tabela do Word e trazê-los para o Excel:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
O caminho mais curto sem declarar a variável é com Dicas de tipo :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Isso não será compilado com Option Explicit
. Os tipos não serão, Variant
mas String
eInteger
Outra maneira de fazer isso é unir duas seções analisadas do valor numérico:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Encontrei melhor sucesso com isso do que CStr()
porque CStr()
não parece converter números decimais provenientes de variantes na minha experiência.
Se você possui um valor inteiro válido e seu requisito é comparar valores, basta seguir em frente com a comparação, como mostrado abaixo.
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
A resposta aceita é boa para números menores, principalmente quando você está obtendo dados de planilhas do Excel. como os números maiores serão automaticamente convertidos em números científicos, isto é, e + 10.
Então, acho que isso lhe dará uma resposta mais geral. Não verifiquei se há alguma queda ou não.
CStr(CDbl(#yourNumber#))
isso funcionará para números convertidos e +! como o justo CStr(7.7685099559e+11)
será mostrado como "7.7685099559e + 11" não é o esperado: "776850995590" Portanto, prefiro dizer que minha resposta será um resultado mais genérico.
Atenciosamente, 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 mais preciso.