Bagaimana cara mengonversi bilangan bulat ke string di Excel VBA?

172

Bagaimana cara mengubah nilai integer "45" menjadi nilai string "45" di Excel VBA?

Ada apa
sumber

Jawaban:

262

CStr(45) adalah yang Anda butuhkan (fungsi Convert String)

Yosem
sumber
1
CStr(45), tepatnya.
Kouichi C. Nakamura
ini tidak akan berfungsi untuk nomor e + yang dikonversi! yaitu 7,7685099559e + 11 akan ditampilkan sebagai "7,7685099559e + 11" tidak seperti yang diharapkan: "776850995590" Jadi saya lebih suka mengatakan ini akan menjadi lebih generik:CStr(CDbl(***))
Mahhdy
Mungkin menjawab kebutuhan pertanyaan, tetapi juga tidak lengkap dan tidak memadai dalam beberapa keadaan. Seringkali (misalnya untuk tujuan penamaan file) Anda mungkin ingin membuat angka awalan nol, sehingga 7menjadi 007. Anda mungkin juga ingin menentukan jumlah desimal atau menyertakan ribuan pemisah. Jika perincian ini penting bagi Anda: excelfunctions.net/vba-format-function.html
cartbeforehorse
97

Coba fungsi CStr ()

Dim myVal as String;
Dim myNum as Integer;

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

Sering kali, Anda tidak perlu "bertobat"; VBA akan melakukan konversi tipe implisit yang aman untuk Anda, tanpa menggunakan konverter seperti CStr.

Kode di bawah ini berfungsi tanpa masalah, karena variabelnya adalah Tipe String, dan konversi tipe implisit dilakukan untuk Anda secara otomatis!

Dim myVal As String
Dim myNum As Integer

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

Hasil:

"Nomor saya adalah: 0"

Anda bahkan tidak harus mendapatkan kemewahan itu, ini juga berfungsi:

Dim myString as String
myString = 77

"77"

Satu-satunya waktu Anda AKAN perlu mengkonversi adalah ketika variabel Type ambigu (misalnya, Jenis Varian, atau Cell Value(yang merupakan Variant)).

Meskipun begitu, Anda tidak harus menggunakan CStrfungsi jika Anda menambahkan variabel String atau konstanta. Seperti ini:

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

"Nomor favorit saya adalah 7"

Jadi, sungguh, satu-satunya case langka adalah ketika Anda benar-benar ingin menyimpan nilai integer, ke dalam varian atau nilai Cell, ketika tidak juga menggabungkan dengan string lain (yang merupakan case samping yang cukup langka, saya dapat menambahkan):

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"

LimaNightHawk
sumber
2
Saya tidak mengerti mengapa jawaban ini tidak memiliki lebih banyak suara, mengingat itu benar Perlu dicatat bahwa konversi jenis tidak selalu dilakukan, tergantung pada operator yang digunakan. Misalnya operasi + tidak akan selalu memperluas integer ke string.
Mark Ch
1
@Arkark Saya tahu ini sudah tua, tapi ... mungkin karena konversi implisit VBA yang menjengkelkan dan panggilan anggota standar adalah apa yang membuat kode VBA begitu rapuh, mengejutkan, dan rentan bug? Tidak akan ada setengah banyak pertanyaan VBA pada SO jika bukan dari konversi implisit, aksesibilitas implisit, akses anggota bawaan implisit, array berbasis 1 implisit dengan Option Base 1, pengetikan implisit dengan Def[Type](anak laki-laki yang jahat!), Implisit ... Anda mendapatkannya - satu-satunya hal tersirat baik di VBA adalah sintaks panggilan implisit yang membuat eksplisit Callusang.
Mathieu Guindon
7

Dalam kasus saya, fungsi CString tidak ditemukan. Tetapi menambahkan string kosong ke nilai juga berfungsi.

Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
Julian Kuchlbauer
sumber
2
Tidak ada yang berbicara tentang CString, yang merupakan fungsi VB.NET. Menggabungkan string kosong literal untuk membuat string adalah metode konversi yang cukup lemah. Gunakan CStruntuk konversi jenis eksplisit - ini adalah konversi tipe implisit dan menaikkan alis siapa pun yang membaca kode itu. Maaf saya menemukan jawaban ini sangat terlambat setelah diposting, saya berharap saya bisa menurunkannya lebih awal.
Mathieu Guindon
2

Jika string yang Anda tarik adalah bilangan heksa seperti E01, maka Excel akan menerjemahkannya sebagai 0 bahkan jika Anda menggunakan fungsi CStr, dan bahkan jika Anda pertama kali menyimpannya dalam tipe variabel String. Salah satu cara mengatasi masalah ini adalah dengan menambahkan 'ke awal nilai.

Misalnya, saat menarik nilai dari tabel Word, dan membawanya ke Excel:

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

Cara terpendek tanpa mendeklarasikan variabel adalah dengan Tipe Petunjuk :

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

Ini tidak akan dikompilasi dengan Option Explicit. Jenis tidak akan Varianttetapi StringdanInteger

Slai
sumber
0

Cara lain untuk melakukannya adalah dengan menggabungkan dua bagian yang diurai dari nilai numerik bersama-sama:

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

Saya telah menemukan kesuksesan yang lebih baik daripada ini CStr()karena CStr()sepertinya tidak mengubah angka desimal yang berasal dari varian dalam pengalaman saya.

Jonathan
sumber
0

Jika Anda memiliki nilai integer yang valid dan persyaratan Anda adalah untuk membandingkan nilai, Anda bisa melanjutkan dengan perbandingan seperti yang terlihat di bawah ini.

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
pengguna2648008
sumber
0

Jawaban yang diterima baik untuk angka yang lebih kecil, yang paling penting saat Anda mengambil data dari lembar excel. karena angka yang lebih besar akan secara otomatis dikonversi ke angka ilmiah yaitu e + 10.
Jadi saya pikir ini akan memberi Anda jawaban yang lebih umum. Saya tidak memeriksa apakah ada kejatuhan atau tidak.

CStr(CDbl(#yourNumber#))

ini akan berfungsi untuk e + angka yang dikonversi! karena hanya CStr(7.7685099559e+11)akan ditampilkan sebagai "7,7685099559e + 11" tidak seperti yang diharapkan: "776850995590" Jadi saya lebih suka mengatakan jawaban saya akan hasil yang lebih umum.

Salam, M.

Mahhdy
sumber
0

masukkan deskripsi gambar di sini

    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

Referensi: MrExcel.com - Konversi angka menjadi teks dengan VBA

Gajendra Santosh
sumber