如何在excel中将数字转换为字符串

Posted

技术标签:

【中文标题】如何在excel中将数字转换为字符串【英文标题】:How to convert numbers to strings in excel 【发布时间】:2022-01-22 02:38:42 【问题描述】:

我正在尝试在 Visual Basic for Excel 2016 中创建 MonthName() 函数的副本(此版本似乎没有它,我无法控制更新它),这是我的代码:

Function GetMonthName(ByVal MonthNum As Integer)

    Dim MonthNames(13) As String
        MonthNames(0) = Null
        MonthNames(1) = "January"
        MonthNames(2) = "February"
        MonthNames(3) = "March"
        MonthNames(4) = "April"
        MonthNames(5) = "May"
        MonthNames(6) = "June"
        MonthNames(7) = "July"
        MonthNames(8) = "August"
        MonthNames(9) = "September"
        MonthNames(10) = "October"
        MonthNames(11) = "November"
        MonthNames(12) = "December"
    

    GetMonthName = MonthNames(MonthNum)
    
End Function

我确信有更好的方法可以做到这一点,但我是该语言的新手。无论如何,这是行不通的。尝试将=GetMonthName(11) 作为测试放入功能栏中时出现#VALUE! 错误(它应该返回 11 月)。我想知道我做错了什么。正如我之前所说,我会使用标准库,但我没有那么奢侈。

编辑:将NULL 放在引号中修复了它,但我不明白为什么。我还是把它改成了空字符串,但我还是不明白这与它有什么关系。

【问题讨论】:

Null 更改为"" 可能也应该在函数定义中使用As String 指定返回类型。 Null 是一个特殊值,表示数据库中的一个空字段。 Null 与空字符串“”不同。将Null 分配给字符串变量会导致类型不匹配运行时错误。如果您在 Excel 工作表中将函数用作 UDF,这将导致 #VALUE! 【参考方案1】:

仅限英文解决方案

如果您想使用Null,则不能将变量/数组声明为String,因为Null 不是字符串(也不会转换为字符串)。声明为Variant 以及函数。

Public Function GetMonthName(ByVal MonthNum As Long) As Variant

    Dim MonthNames() As Variant
    MonthNames = Array(Null, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
    
    GetMonthName = MonthNames(MonthNum)
    
End Function

或使用vbNullString,即""

Public Function GetMonthName(ByVal MonthNum As Long) As String

    Dim MonthNames() As String
    MonthNames = Array(vbNullString, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
    
    GetMonthName = MonthNames(MonthNum)
    
End Function

多语言替代

请注意,无论用户在其计算机上使用哪种语言,这将始终返回英文月份名称。但您也可以使用以下代码,根据运行它的计算机的语言设置给出月份名称。

Public Function GetMonthName(ByVal MonthNum As Long) As String
    
    GetMonthName = Format$(DateSerial(Year(Date), MonthNum, 1), "MMMM")
    
End Function

非 VBA 解决方案(多语言)

对于没有 VBA 的解决方案,您可以将完整日期写入单元格并将数字格式设置为 MMMM。这还将显示该日期的月份名称。

【讨论】:

为了完整起见:WorksheetFunction.Text(Date, "mmmm") 还将提供月份名称。如果需要,您可以选择任何您想要的语言,例如WorksheetFunction.Text(Date, "[$-409]mmmm") 表示英语或WorksheetFunction.Text(Date, "[$-407]mmmm") 或德语。见***.com/a/32090516/7599798。 是的 Format$ 可以替换为 WorksheetFunction.Text 但不知道其中哪一个在这里有优势。 据我所知,使用Format 让您无法选择语言。 @FunThomas 啊,是的,完全正确。我总是想念这不适用于Format【参考方案2】:

如果推荐使用CHOOSE vba函数。

Function GetMonthName(ByVal MonthNum As Integer)
    Dim MonthNames As String
    If MonthNum <= 0 Or MonthNum >= 13 Then 'You can return "" value
       GetMonthName = "Error" '--You can return "" value
    Else
       MonthNames = Choose(MonthNum, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")
       GetMonthName = MonthNames
    End If
End Function

【讨论】:

不错,但不是将Error 作为字符串,而是返回一个真正的单元格错误CVError(xlErrValue) 以返回单元格错误#VALUE! 因此,您可以将 IF -- ELSE 子句中的代码替换为 (If MonthNum = 13 Then) 这个------------ ------------------------- GetMonthName = CVErr(xlErrValue) ' -- 而不是 GetMonthName = "Error" --------- --------------------------------------- 这会给你#VALUE!价值。

以上是关于如何在excel中将数字转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将 Excel 列类型从 Int 转换为 String

在EXCEL中将数字转换为文本时怎样在单元格前边自动加0

在 Excel 中将原始数字转换为时间戳

如何在 C++ 中将数字转换为字符串,反之亦然

如何在 TypeScript 中将字符串转换为数字?

如何在 TypeScript 中将字符串转换为数字?