如何在 Excel VBA中将整数值“45”转换为字符串值“45”?
10 回答
CStr(45)
就是你所需要的(转换字符串函数)
试试 CStr() 函数
Dim myVal as String;
Dim myNum as Integer;
myVal = "My number is:"
myVal = myVal & CStr(myNum);
大多数时候,您不需要“转换”;VBA 将为您进行安全的隐式类型转换,而无需使用 CStr
.
下面的代码没有任何问题,因为变量是 String 类型,并且会自动为您完成隐式类型转换!
Dim myVal As String
Dim myNum As Integer
myVal = "My number is: "
myVal = myVal & myNum
结果:
“我的号码是:0”
您甚至不必花哨,这也可以:
Dim myString as String
myString = 77
“77”
唯一需要转换的情况是变量类型不明确(例如,类型变体或单元格Value
(即变体))。
CStr
即使那样,如果您与另一个字符串变量或常量复合,您也不必使用函数。像这样:
Sheet1.Range("A1").Value = "My favorite number is " & 7
“我最喜欢的数字是 7”
所以,真的,唯一罕见的情况是当你真的想将一个整数值存储到一个变体或单元格值中,而不是与另一个字符串复合(这是一个非常罕见的情况,我可能会补充):
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”
就我而言,找不到函数 CString 。但是向该值添加一个空字符串也可以。
Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10
不声明变量的最短方法是使用Type Hints:
s$ = 123 ' s = "123"
i% = "123" ' i = 123
这不会与Option Explicit
. 类型将不是Variant
butString
和Integer
如果您拉入的字符串恰好是一个十六进制数字,例如 E01,那么即使您使用 CStr 函数,即使您首先将其存入 String 变量类型,Excel 也会将其翻译为 0。解决此问题的一种方法是将 ' 附加到值的开头。
例如,当从 Word 表中提取值并将它们带到 Excel 中时:
strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
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
另一种方法是将数值的两个解析部分拼接在一起:
Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))
我发现这比CStr()
因为CStr()
在我的经验中似乎没有转换来自变体的十进制数字更好。
如果您有一个有效的整数值并且您的要求是比较值,您可以简单地继续进行比较,如下所示。
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
接受的答案适用于较小的数字,最重要的是当您从 Excel 工作表中获取数据时。因为较大的数字将自动转换为科学数字,即 e+10。
所以我认为这会给你更一般的答案。我没有检查它是否有任何垮台。
CStr(CDbl(#yourNumber#))
这将适用于 e+ 转换后的数字!因为刚才CStr(7.7685099559e+11)
将显示为“7.7685099559e+11”而不是预期的:“776850995590”所以我宁愿说我的答案将是更通用的结果。
问候,米