如何在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中将数字转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章