繁体   English   中英

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

[英]How Do I Convert an Integer to a String in Excel VBA?

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

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”

您唯一需要转换的时间是变量类型不明确时(例如,Type Variant 或单元格的ValueVariant))。

即使那样,如果您要与另一个 String 变量或常量复合,也不必使用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而是StringInteger

如果你要拉入的字符串恰好是一个十六进制数字,比如 E01,那么即使你使用 CStr 函数,Excel 也会将它翻译成 0,即使你先将它存入一个 String 变量类型。 解决此问题的一种方法是将 ' 附加到值的开头。

例如,当从 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

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

公认的答案适用于较小的数字,最重要的是当您从 Excel 工作表中获取数据时。 因为较大的数字会自动转换为科学数字,即 e+10。
所以我认为这会给你更一般的答案。 我没有检查它是否有任何垮台。

CStr(CDbl(#yourNumber#))

这将适用于 e+ 转换后的数字! 因为只是CStr(7.7685099559e+11)将显示为“7.7685099559e+11”而不是预期的那样:“776850995590”所以我宁愿说我的答案将是更通用的结果。

问候,米

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

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

也可能值得为您的转换添加一个修剪,因为整数转换为推断(正号)和应用(负号)值的前导空格。

为了比较:

1/

lsDogsAge = "Barker is " & Cstr(liAgeInteger) & "years old"

2/

lsDogsAge = "Barker is " & Trim(Cstr(liAgeInteger)) & "years old"

1/巴克是__7

2/巴克是_7

具有讽刺意味的是,这个论坛的软件会自动截断双空格,所以我使用了下划线

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM