web-dev-qa-db-fra.com

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

Comment convertir la valeur integer "45" en valeur string "45" dans Excel VBA?

137
What'sUP

cstr(45) est tout ce dont vous avez besoin (chaîne de conversion)

214
Yosem

Essayez la fonction CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

La plupart du temps, vous n'avez pas besoin de "convertir"; VBA effectuera pour vous une conversion de type implicite sécurisée, sans l’utilisation de convertisseurs tels que CStr.

Le code ci-dessous fonctionne sans problème, car la variable est de type chaîne et la conversion de type implicite est faite pour vous automatiquement!

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"

La conversion de la variable Type est uniquement ambiguë (par exemple, Variant de type ou la variable Value d'une cellule (qui est la variante)).

Même dans ce cas, vous ne devrez pas utiliser la fonction CStr 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 7"

Donc, vraiment, le seul cas rare se produit lorsque vous voulez vraiment stocker une valeur entière, dans une valeur de variante ou de cellule, lorsque not est également composé avec une autre chaîne 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"

42
LimaNightHawk

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

Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
7
Julian Kuchlbauer

Si la chaîne que vous extrayez 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 Chaîne. Un moyen 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)
2
dolphus333

Le moyen le plus court sans déclarer la variable est d'utiliser des conseils de type:

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

Cela ne compilera pas avec Option Explicit. Les types ne seront pas Variant mais String et Integer

1
Slai

Si vous avez une valeur entière valide et que votre exigence est de comparer les valeurs, vous pouvez simplement procéder à 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
0
user2648008

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

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

J'ai eu plus de succès avec ceci qu'avec CStr() car CStr() ne semble pas convertir les nombres décimaux issus de variantes de mon expérience.

0
Jonathan