Jawaban:
CStr(45)
adalah yang Anda butuhkan (fungsi Convert String)
CStr(CDbl(***))
7
menjadi 007
. Anda mungkin juga ingin menentukan jumlah desimal atau menyertakan ribuan pemisah. Jika perincian ini penting bagi Anda: excelfunctions.net/vba-format-function.html
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 CStr
fungsi 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"
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 Call
usang.
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
CString
, yang merupakan fungsi VB.NET. Menggabungkan string kosong literal untuk membuat string adalah metode konversi yang cukup lemah. Gunakan CStr
untuk 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.
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)
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 Variant
tetapi String
danInteger
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.
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
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.
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
CStr(45)
, tepatnya.