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


Answers:


262

CStr(45) 就是您所需要的(“转换字符串”功能)


1
CStr(45),确切地说。
中村幸一C

这不适用于e +转换后的数字!即7.7685099559e + 11将显示为“ 7.7685099559e + 11”,而不是预期的:“ 776850995590”所以我想说的是更通用的名称:CStr(CDbl(***))
Mahhdy

它可以回答问题的需求,但在某些情况下也不完整且不够。通常,(例如,出于文件命名的目的)您可能希望创建零前缀的数字,使7成为007。您可能还需要指定小数位数或包含千位分隔符。如果这些细节对您很重要:excelfunctions.net/vba-format-function.html
cartbeforehorse

97

尝试CStr()函数

Dim myVal as String;
Dim myNum as Integer;

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

51

大多数时候,您无需“转换”;VBA将为您执行安全的隐式类型转换,而无需使用 CStr

下面的代码可以正常工作,因为变量是Type 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如果要与另一个String变量或常量复合,也不必使用function。像这样:

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”


2
我不明白为什么这个答案没有更多的选票,因为它是真的。值得注意的是,类型转换并非总是执行,它取决于使用的运算符。例如,+操作不会总是将整数扩展为字符串。
Mark Ch

1
@MarkCh我知道这很老了,但是...也许是因为VBA令人讨厌的隐式转换和默认成员调用才是导致这么多VBA代码脆弱,令人惊讶和容易出错的原因?如果不是隐式转换,隐式可访问性,隐式默认成员访问,具有Option Base 1,基于隐式1的数组,具有Def[Type](男孩就是EVIL!您知道了-VBA中唯一好的隐式功能是使显式Call过时的隐式调用语法。
Mathieu Guindon

7

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

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

2
没有人谈论过CString,这是VB.NET功能。连接一个空的字符串文字以组成一个字符串是一种非常la脚的转换方法。使用CStr显式类型转换-这是一个隐式类型转换,并提出任何阅读代码的眉毛。对不起,我在发布此答案后发现了这么晚,希望我早些时候可以否决它。
Mathieu Guindon

2

如果您输入的字符串恰好是十六进制数字(例如E01),则即使您使用CStr函数,并且即使您首先将其存储在String变量类型​​中,Excel也会将其转换为0。解决该问题的一种方法是将'附加到值的开头。

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

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

2

不声明变量的最短方法是使用类型提示

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

这将无法编译Option Explicit。该类型将不会是Variant,但StringInteger


0

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

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

我发现此方法比不成功的原因要多,CStr()因为CStr()根据我的经验,似乎没有转换来自变体的十进制数。


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

0

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

CStr(CDbl(#yourNumber#))

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

问候,M


0

在此处输入图片说明

    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

参考:MrExcel.com –使用VBA将数字转换为文本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.