Comment convertir un entier en chaîne dans Excel VBA?

Réponses:

262

CStr(45) est tout ce dont vous avez besoin (la fonction Convertir une chaîne)

Yosem
la source
1
CStr(45), pour être précis.
Kouichi C. Nakamura
cela ne fonctionnera pas pour les nombres convertis e +! ie 7.7685099559e + 11 sera affiché comme "7.7685099559e + 11" pas comme prévu: "776850995590" Donc je préfère dire que ce sera plus générique:CStr(CDbl(***))
Mahhdy
Il peut répondre aux besoins de la question, mais il est également incomplet et insuffisant dans certaines circonstances. Souvent (par exemple à des fins de dénomination de fichier), vous voudrez peut-être créer des nombres avec préfixe zéro, tels que cela 7devient 007. Vous pouvez également spécifier le nombre de décimales ou inclure des milliers de séparateurs. Si ces détails sont importants pour vous: excelfunctions.net/vba-format-function.html
cartbeforehorse
97

Essayez la fonction CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

La plupart du temps, vous n'aurez pas besoin de «convertir»; VBA effectuera une conversion de type implicite en toute sécurité pour vous, sans utiliser de convertisseurs comme CStr.

Le code ci-dessous fonctionne sans aucun problème, car la variable est de type String et la conversion de type implicite est effectuée automatiquement pour vous!

Dim myVal As String
Dim myNum As Integer

myVal = "My number is: "
myVal = myVal & myNum

Résultat:

"Mon numéro est: 0"

Vous n'avez même pas besoin d'avoir cette fantaisie, cela fonctionne aussi:

Dim myString as String
myString = 77

"77"

Le seul moment où vous aurez besoin de convertir est lorsque la variable Type est ambiguë (par exemple, Type Variant ou une Cellule Value(qui est Variant)).

Même dans ce cas, vous n'aurez pas à utiliser la CStrfonction si vous composez avec une autre variable ou constante String. Comme ça:

Sheet1.Range("A1").Value = "My favorite number is " & 7

"Mon numéro préféré est le 7"

Donc, vraiment, le seul cas rare est celui où vous voulez vraiment stocker une valeur entière, dans une variante ou une valeur de cellule, sans également composer avec une autre chaîne (ce qui est un cas secondaire assez rare, je pourrais ajouter):

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"

LimaNuitHawk
la source
2
Je ne comprends pas pourquoi cette réponse n'a pas plus de voix, étant donné que c'est vrai. Il est à noter que la conversion de type n'est pas toujours effectuée, cela dépend de l'opérateur utilisé. Par exemple, l'opération + n'élargira pas toujours un entier en une chaîne.
Mark Ch du
1
@MarkCh Je sais que c'est vieux, mais ... peut-être parce que les conversions implicites désagréables de VBA et les appels aux membres par défaut sont ce qui rend le code VBA fragile, surprenant et sujet aux bogues? Il n'y aurait pas deux fois moins de questions VBA sur SO s'il n'y avait pas de conversions implicites, d'accessibilité implicite, d'accès aux membres implicites par défaut, de tableaux Option Base 1implicites basés sur 1 avec , de typage implicite avec Def[Type](garçon c'est EVIL!), Implicite ... vous comprenez - la seule bonne chose implicite dans VBA est la syntaxe d'appel implicite qui a rendu l'explicite Callobsolète.
Mathieu Guindon
7

Dans mon cas, la fonction CString n'a pas été trouvée. Mais l'ajout d'une chaîne vide à la valeur fonctionne aussi.

Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
Julian Kuchlbauer
la source
2
Personne n'en a parlé CString, qui est une fonction VB.NET. Concaténer un littéral de chaîne vide pour créer une chaîne est une méthode de conversion assez boiteuse. Utilisez CStrpour les conversions de type explicite - il s'agit d'une conversion de type implicite et soulève les sourcils de toute personne lisant ce code. Désolé d'avoir trouvé cette réponse si tard après sa publication, j'aurais aimé pouvoir la voter beaucoup plus tôt.
Mathieu Guindon
2

Si la chaîne que vous tirez est un nombre hexadécimal tel que E01, Excel la traduira par 0 même si vous utilisez la fonction CStr, et même si vous la déposez d'abord dans un type de variable String. Une façon de contourner le problème consiste à ajouter «au début de la valeur.

Par exemple, lors de l'extraction de valeurs d'un tableau Word et de leur transfert vers Excel:

strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
dolphus333
la source
2

Le moyen le plus court sans déclarer la variable est avec les indices de type :

s$ =  123   ' s = "123"
i% = "123"  ' i =  123

Cela ne compilera pas avec Option Explicit. Les types ne seront pas Variantmais StringetInteger

Slai
la source
0

Une autre façon de procéder consiste à assembler deux sections analysées de la valeur numérique:

Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))

J'ai trouvé un meilleur succès avec cela que CStr()parce CStr()que ne semble pas convertir les nombres décimaux provenant de variantes de mon expérience.

Jonathan
la source
0

Si vous avez une valeur entière valide et que votre exigence est de comparer les valeurs, vous pouvez simplement poursuivre la comparaison comme indiqué ci-dessous.

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
la source
0

La réponse acceptée est bonne pour les petits nombres, surtout lorsque vous prenez des données à partir de feuilles Excel. car les plus grands nombres seront automatiquement convertis en nombres scientifiques, c'est-à-dire e + 10.
Je pense donc que cela vous donnera une réponse plus générale. Je n'ai pas vérifié s'il y avait une chute ou non.

CStr(CDbl(#yourNumber#))

cela fonctionnera pour les nombres convertis e +! comme le justeCStr(7.7685099559e+11) sera affiché comme "7.7685099559e + 11" pas comme prévu: "776850995590" Donc je préfère dire que ma réponse sera un résultat plus générique.

Cordialement, M

Mahhdy
la source
0

entrez la description de l'image ici

    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 - Convertir des nombres en texte avec VBA

Gajendra Santosh
la source