Yanıtlar:
CStr(45)
tek ihtiyacınız olan şey (String'i Dönüştür işlevi)
CStr(CDbl(***))
7
olur 007
. Ondalıkların sayısını belirtmek veya binlik ayırıcı eklemek de isteyebilirsiniz. Bu ayrıntılar sizin için önemliyse: excelfunctions.net/vba-format-function.html
Çoğu zaman, "dönüştürmek" gerekmez; VBA, sizin için güvenli örtülü tip dönüştürme yapacak olmadan gibi konverter kullanımı CStr
.
Aşağıdaki kod herhangi bir sorun olmadan çalışır, çünkü değişken Type String'dir ve örtük tip dönüşümü sizin için otomatik olarak yapılır!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
Sonuç:
"Numaram: 0"
Bu kadar süslü olmanıza bile gerek yok, bu da işe yarıyor:
Dim myString as String
myString = 77
"77"
Dönüştürmeniz gereken tek zaman , Type değişkeninin belirsiz (ör. Type Variant veya bir Cell's Value
( Variant)) olduğu zamandır.
O zaman bile, CStr
başka bir String değişkeni veya sabiti ile birleşiyorsanız işlevi kullanmak zorunda kalmazsınız . Bunun gibi:
Sheet1.Range("A1").Value = "My favorite number is " & 7
"Favori numaram 7"
Gerçekten, sadece nadir gerçekten, ne zaman bir varyant veya Hücre değerine, bir tamsayı değeri saklamak istediğinizde böyledir değil de başka bir dizeyle bileşik (oldukça nadir yan uygulamalarda olduğu gibi eklemeliyim):
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
, örtük yazma Def[Type]
(EVIL! Boy) ile örtülü olmasaydı, SO hakkında SO kadar çok sayıda soru olmayacaktı ... anlıyorsunuz - VBA'daki tek iyi örtük şey, açıkça Call
geçersiz kılan örtük çağrı sözdizimidir .
Benim durumumda, CString işlevi bulunamadı. Ancak değere boş bir dize eklemek de işe yarar.
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
CString
, bu bir VB.NET işlevi. Bir dize yapmak için boş bir dize hazır bilgisini birleştirmek oldukça topal bir dönüşüm yöntemidir. CStr
Açık tür dönüşümler için kullanın - bu, örtük tür dönüşümdür ve bu kodu okuyan herkesin kaşlarını yükseltir. Üzgünüm, bu cevabı gönderildikten sonra çok geç buldum, keşke çok daha önce reddedebilirdim.
Çektiğiniz dize E01 gibi onaltılık bir sayı olursa, CStr işlevini kullansanız ve ilk önce bir String değişkeni türünde bıraksanız bile Excel 0 olarak çevirir. Bu sorunun bir yolu, değerin başına 'eklemektir.
Örneğin, değerleri bir Word tablosundan çekip Excel'e getirirken:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Değişkeni bildirmeden en kısa yol Tip İpuçları'dır :
s$ = 123 ' s = "123"
i% = "123" ' i = 123
Bu derlenmeyecektir Option Explicit
. Tipleri olmayacak Variant
ama String
veInteger
Bunu yapmanın başka bir yolu, sayısal değerin iki ayrıştırılmış bölümünü birbirine eklemektir:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
Bu konuda daha iyi bir başarı buldum, CStr()
çünkü CStr()
deneyimimdeki varyantlardan gelen ondalık sayıları dönüştürmüyor gibi görünüyor.
Geçerli bir tamsayı değeriniz varsa ve gereksiniminiz değerleri karşılaştırmaksa, aşağıda görüldüğü gibi karşılaştırmaya devam edebilirsiniz.
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
Kabul edilen cevap küçük sayılar için iyidir, en önemlisi excel sayfalarından veri alırken. daha büyük sayılar otomatik olarak bilimsel sayılara dönüştürülecektir, örn. e + 10.
Bence bu size daha genel bir cevap verecektir. Herhangi bir çöküşü olup olmadığını kontrol etmedim.
CStr(CDbl(#yourNumber#))
Bu, e + dönüştürülmüş sayılar için çalışacaktır! sadece CStr(7.7685099559e+11)
beklendiği gibi değil "7.7685099559e + 11" olarak gösterilecektir: "776850995590" Bu yüzden cevabım daha genel bir sonuç olacağını söylemek istiyorum.
Saygılarımızla, 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
CStr(45)
, kesin olmak.