Come faccio a convertire un numero intero in una stringa in Excel VBA?


Risposte:


262

CStr(45) è tutto ciò che serve (la funzione Converti stringa)


1
CStr(45), per essere precisi.
Kouichi C. Nakamura,

questo non funzionerà con i numeri convertiti e +! cioè 7.7685099559e + 11 verrà mostrato come "7.7685099559e + 11" non come previsto: "776850995590" Quindi preferisco dire che sarà più generico:CStr(CDbl(***))
Mahhdy,

Può rispondere alle esigenze della domanda, ma è anche incompleto e insufficiente in alcune circostanze. Spesso (ad esempio per scopi di denominazione dei file) potresti voler creare numeri con prefisso zero, in modo che 7diventi 007. Puoi anche specificare il numero di decimali o includere migliaia di separatori. Se questi dettagli sono importanti per te: excelfunctions.net/vba-format-function.html
cartbeforehorse

97

Prova la funzione CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

51

La maggior parte delle volte, non sarà necessario "convertirlo"; VBA farà la conversione sicura del tipo implicito per te, senza l'uso di convertitori come CStr.

Il codice seguente funziona senza problemi, perché la variabile è di tipo String e la conversione di tipo implicita viene eseguita automaticamente!

Dim myVal As String
Dim myNum As Integer

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

Risultato:

"Il mio numero è: 0"

Non devi nemmeno avere quella fantasia, anche questo funziona:

Dim myString as String
myString = 77

"77"

L'unica volta che dovrai convertire è quando la variabile Type è ambigua (ad esempio, Type Variant o una cella Value(che è Variant)).

Anche allora, non dovrai usare la CStrfunzione se stai combinando con un'altra variabile o costante String. Come questo:

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

"Il mio numero preferito è 7"

Quindi, in realtà, l'unico caso raro è quando si desidera davvero archiviare un valore intero, in una variante o valore di cella, quando non si combina anche con un'altra stringa (che è un caso laterale piuttosto raro, potrei aggiungere):

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"


2
Non capisco perché questa risposta non abbia più voti, dato che è vera. Vale la pena notare che la conversione del tipo non viene sempre eseguita, dipende dall'operatore in uso. Ad esempio, l'operazione + non allargherà sempre un numero intero a una stringa.
Mark Ch,

1
@MarkCh So che questo è vecchio, ma ... forse perché le fastidiose conversioni implicite di VBA e le chiamate predefinite dei membri sono ciò che rende fragile, sorprendente e soggetto a bug tanto tanto codice VBA? Non ci sarebbero la metà delle domande VBA su SO se non si trattasse di conversioni implicite, accessibilità implicita, accesso implicito ai membri predefiniti, array Option Base 1impliciti basati su 1 con , digitazione implicita con Def[Type](ragazzo che è MALE!), Implicito ... lo capisci - l'unica cosa buona e implicita in VBA è la sintassi della chiamata implicita che ha reso Callobsoleto l'esplicito .
Mathieu Guindon,

7

Nel mio caso, la funzione CString non è stata trovata. Ma anche l'aggiunta di una stringa vuota al valore funziona.

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

2
Nessuno ha parlato CString, che è una funzione VB.NET. Concatenare una stringa vuota letterale per creare una stringa è un metodo di conversione piuttosto scadente. Utilizza CStrper conversioni di tipo esplicite: si tratta di una conversione di tipo implicita e solleva le sopracciglia di chiunque legga quel codice. Mi dispiace di aver trovato questa risposta così tardi dopo che è stata pubblicata, vorrei poterla ridimensionare molto prima.
Mathieu Guindon,

2

Se la stringa che stai inserendo sembra essere un numero esadecimale come E01, Excel la tradurrà come 0 anche se usi la funzione CStr e anche se la depositi per la prima volta in un tipo di variabile String. Un modo per aggirare il problema è aggiungere "all'inizio del valore.

Ad esempio, quando si estraggono valori da una tabella di Word e li si porta in Excel:

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

2

Il modo più breve senza dichiarare la variabile è con Suggerimenti di tipo :

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

Questo non verrà compilato con Option Explicit. I tipi non saranno Variantma StringeInteger


0

Un altro modo per farlo è quello di unire due sezioni analizzate del valore numerico:

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

Ho riscontrato un successo migliore in questo rispetto al CStr()fatto CStr()che non sembra convertire i numeri decimali derivati ​​dalle varianti della mia esperienza.


0

Se hai un valore intero valido e il tuo requisito è confrontare i valori, puoi semplicemente andare avanti con il confronto come mostrato di seguito.

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

La risposta accettata è valida per numeri più piccoli, soprattutto quando si prendono dati da fogli Excel. poiché i numeri più grandi verranno automaticamente convertiti in numeri scientifici, ad es. e + 10.
Quindi penso che questo ti darà una risposta più generale. Non ho verificato se ha qualche caduta o no.

CStr(CDbl(#yourNumber#))

questo funzionerà con numeri convertiti e +! poiché il giusto CStr(7.7685099559e+11)verrà mostrato come "7.7685099559e + 11" non come previsto: "776850995590" Quindi preferisco dire che la mia risposta sarà un risultato più generico.

Saluti, M


0

inserisci qui la descrizione dell'immagine

    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 - Converti i numeri in testo con VBA

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.