Comment convertir la valeur entière "45" en valeur de chaîne "45" dans Excel VBA?
Comment convertir la valeur entière "45" en valeur de chaîne "45" dans Excel VBA?
Réponses:
CStr(45)
est tout ce dont vous avez besoin (la fonction Convertir une chaîne)
CStr(CDbl(***))
7
devient 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
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 CStr
fonction 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"
Option Base 1
implicites 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 Call
obsolète.
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
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 CStr
pour 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.
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)
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 Variant
mais String
etInteger
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.
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
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
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
CStr(45)
, pour être précis.