Hoe converteer ik een geheel getal naar een tekenreeks in Excel VBA?

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 Valuevan een cel (wat isVariant)).

Zelfs dan hoef je de functie CStrniet 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 Variantmaar Stringen Integer


Antwoord 7

voer hier de afbeeldingsbeschrijving in

   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

Other episodes