Como converter um número inteiro em uma seqüência de caracteres no Excel VBA?

172

Como faço para converter o valor inteiro "45" no valor da string "45" no Excel VBA?

E aí
fonte

Respostas:

262

CStr(45) é tudo o que você precisa (a função Convert String)

Yosem
fonte
1
CStr(45), para ser mais preciso.
Kouichi C. Nakamura
isso não funcionará para números e + convertidos! ou seja, 7.7685099559e + 11 será mostrado como "7.7685099559e + 11" não é o esperado: "776850995590" Então, prefiro dizer que isso será mais genérico:CStr(CDbl(***))
Mahhdy 27/11/19
Pode responder às necessidades da pergunta, mas também é incompleto e insuficiente em algumas circunstâncias. Freqüentemente (por exemplo, para fins de nomeação de arquivos), convém criar números com prefixo zero, como 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
cartbeforehorse
97

Experimente a função CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

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 CStrfunçã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"

LimaNightHawk
fonte
2
Não entendo por que essa resposta não tem mais votos, pois é verdadeira. Vale ressaltar que a conversão de tipos nem sempre é realizada, depende do operador em uso. Por exemplo, a operação + nem sempre amplia um número inteiro para uma sequência.
Mark Ch
1
@ MarkCh Eu sei que isso é antigo, mas ... talvez porque as conversões implícitas desagradáveis ​​do VBA e as chamadas de membros padrão sejam o que faz com que tanto código VBA seja frágil, surpreendente e propenso a erros? Não haveria metade das perguntas do VBA no SO se não fossem conversões implícitas, acessibilidade implícita, acesso implícito a membros padrão, matrizes Option Base 1implí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 Callobsoleto.
Mathieu Guindon
7

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
Julian Kuchlbauer
fonte
2
Ninguém falou sobre isso 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 CStrpara 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.
Mathieu Guindon
2

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

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, Variantmas StringeInteger

Slai
fonte
0

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.

Jonathan
fonte
0

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
user2648008
fonte
0

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

Mahhdy
fonte
0

insira a descrição da imagem aqui

    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 - Converta números em texto com VBA

Gajendra Santosh
fonte