Hoe converteer ik de integerwaarde “45” naar de stringwaarde “45” in Excel VBA?
Antwoord 1, autoriteit 100%
CStr(45)
is alles wat je nodig hebt (de Convert String-functie)
Antwoord 2, autoriteit 36%
Probeer de CStr()-functie
Dim myVal as String;
Dim myNum as Integer;
myVal = "My number is:"
myVal = myVal & CStr(myNum);
Antwoord 3, autoriteit 19%
Meestal hoeft u niet te “converteren”; VBA zal voor u een veilige impliciete typeconversie uitvoeren, zonderhet gebruik van converters zoals CStr
.
De onderstaande code werkt zonder problemen, omdat de variabele van Type String is, en impliciete typeconversie wordt automatisch voor u gedaan!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Resultaat:
“Mijn nummer is: 0”
Je hoeft er niet eens zin in te hebben, dit werkt ook:
Dim myString as String
myString = 77
“77”
De enige keer dat u ZAL hoeft te converteren, is wanneer de variabele Type dubbelzinnig is(bijv. Type Variant of de Value
van een cel (wat isVariant)).
Zelfs dan hoef je de functie CStr
niet te gebruiken als je aan het samenstellen bent met een andere String-variabele of constante. Zoals dit:
Sheet1.Range("A1").Value = "My favorite number is " & 7
“Mijn favoriete nummer is 7”
Dus, echt, het enige zeldzamegeval is wanneer je echt een geheel getal wilt opslaan, in een variant of celwaarde, terwijl nietook wordt samengesteld met een andere tekenreeks (wat een vrij zeldzaam zijgeval is, zou ik kunnen toevoegen):
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”
Antwoord 4, autoriteit 3%
In mijn geval is de functie CString niet gevonden.
Maar het toevoegen van een lege string aan de waarde werkt ook.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
Antwoord 5
Als de string die u intrekt een hexadecimaal getal is, zoals E01, dan zal Excel dit vertalen als 0, zelfs als u de CStr-functie gebruikt, en zelfs als u deze eerst in een String-variabel type deponeert. Een manier om het probleem te omzeilen is om ‘ toe te voegen aan het begin van de waarde.
Bijvoorbeeld wanneer waarden uit een Word-tabel worden gehaald en naar Excel worden overgebracht:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Antwoord 6
De kortste manier zonder de variabele te declareren is met Type Hints:
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Dit compileert niet met Option Explicit
. De typen zijn niet Variant
maar String
en Integer
Antwoord 7
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 – Converteer getallen naar tekst met VBA
Antwoord 8
Een andere manier om dit te doen is door twee ontlede delen van de numerieke waarde aan elkaar te koppelen:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Ik heb hier meer succes mee gevonden dan CStr()
omdat CStr()
volgens mijn ervaring geen decimale getallen kan converteren die afkomstig zijn van varianten.
Antwoord 9
Als u een geldige integerwaarde heeft en het is uw vereiste om waarden te vergelijken, kunt u gewoon doorgaan met de vergelijking zoals hieronder te zien is.
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
Antwoord 10
Het geaccepteerde antwoord is goed voor kleinere aantallen, vooral als u gegevens uit Excel-bladen haalt. omdat de grotere getallen automatisch worden omgezet in wetenschappelijke getallen, d.w.z. e+10.
Dus ik denk dat dit je een meer algemeen antwoord zal geven. Ik heb niet gecontroleerd of het een ondergang heeft of niet.
CStr(CDbl(#yourNumber#))
dit werkt voor e+ geconverteerde getallen! aangezien de slechts CStr(7.7685099559e+11)
zal worden weergegeven als “7.7685099559e+11” niet zoals verwacht: “776850995590” Dus ik zeg liever dat mijn antwoord een meer generiek resultaat zal zijn.
Met vriendelijke groet,
M