Jelmer处理大量财务数据,工作表中的信息可能来自许多国家/地区的货币。区分它们的唯一方法是格式化单元格时使用的货币符号。例如,可以将单元格设置为使用货币符号“ EUR”或“ SEK”。 Jelmer想知道公式中是否有一种方法可以确定用于格式化给定单元格的货币符号。

Excel中没有内部工作表函数会返回您要查找的内容,因此无法在公式中执行。但是,您可以创建自己的用户定义函数,该函数将返回所需的信息。这是一个示例:

Function GetCurrency(rCell As Range) As String     Dim sTemp As String     Dim sKeep As String     Dim sThrowAway As String     Dim J As Integer

Application.Volatile     sKeep = "Not a Numeric Value"

If IsNumeric(rCell) Then         sThrowAway = "0123456789.,()+- ]"

sTemp = rCell.Text         sKeep = ""



For J = 1 To Len(sTemp)

If InStr(sThrowAway, Mid(sTemp, J, 1)) = 0 Then                 sKeep = sKeep & Mid(sTemp, J, 1)

End If         Next J     End If     GetCurrency = sKeep End Function

为了使用该函数,假设您要对单元格B7中的任何内容使用货币符号,请使用以下代码:

=GetCurrency(B7)

之所以可行,是因为单元格的.Text属性返回该单元格中任何内容的格式化版本。假设该单元格包含一个数值(功能对此进行测试),则格式化后的文本将分配给sTemp变量。然后,将该文本中的每个字符与sThrowAway字符串中的任何字符进行比较。如果存在匹配项,则忽略该字符,否则将其添加到sKeep变量中。

这是函数返回的内容。

同样请注意,如果要评估的单元格不包含数字值,则将返回错误消息(“非数字值”)。

该功能有一个陷阱:如果更改目标单元格的格式,则不会触发宏。这似乎是Excel本身的一个缺点-更改格式时它不会触发工作表的重新计算,因此不会触发宏本身。

但是,它将在您下次更改需要重新计算的工作表时触发。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(13787)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。