如何在Excel VBA中将整数转换为字符串?

时间:2012-07-21 19:26:36

标签: string vba excel-vba type-conversion integer

如何将整数值“45”转换为Excel VBA中的字符串值“45”?

10 个答案:

答案 0 :(得分:223)

您只需要{p> CStr(45)(转换字符串函数)

答案 1 :(得分:95)

尝试CStr()函数

Dim myVal as String;
Dim myNum as Integer;

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

答案 2 :(得分:46)

大多数时候,你不需要“转换”; 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 变体))。

即便如此,如果您正在使用另一个String变量或常量,则不必使用CStr函数。像这样:

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

“我最喜欢的号码是7”

所以,实际上,唯一的稀有情况是当你真的想要将整数值存储到变量或Cell值时,当还与另一个字符串复合时(这是一个非常罕见的情况,我可以补充一下):

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”

答案 3 :(得分:7)

就我而言,找不到函数CString。 但是在值中添加一个空字符串也可以。

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

答案 4 :(得分:2)

没有声明变量的最短路径是Type Hints

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

这不会使用Option Explicit进行编译。类型不是Variant,而是StringInteger

答案 5 :(得分:2)

如果您输入的字符串恰好是十六进制数字,例如E01,那么即使您使用CStr函数,Excel也会将其翻译为0,即使您首先将其存入String变量类型​​。解决问题的一种方法是将'追加'到价值的开头。

例如,从Word表中提取值并将它们带到Excel时:

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

答案 6 :(得分:0)

另一种方法是将数值的两个已解析部分拼接在一起:

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

我发现这比CStr()更成功,因为CStr()似乎不能转换来自我体验变体的十进制数字。

答案 7 :(得分:0)

如果您有一个有效的整数值,并且需要比较值,则只需进行如下所示的比较即可。

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

答案 8 :(得分:0)

可接受的答案适用于较小的数字,最重要的是,当您从excel工作表中获取数据时。因为较大的数字会自动转换为科学数字,即e + 10。
因此,我认为这将为您提供更一般的答案。我没有检查它是否有任何下降。

CStr(CDbl(#yourNumber#))

这将适用于e +转换后的号码!因为仅CStr(7.7685099559e+11)会显示为“ 7.7685099559e + 11”,而不是预期的:“ 776850995590”,所以我想说我的答案将是更通用的结果。

关于, M

答案 9 :(得分:0)

enter image description here

    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 – Convert numbers to text with VBA