从货币格式的单元格返回ISO代码

时间:2015-02-10 22:22:04

标签: vba excel-vba excel

用户可以通过用户表单插入数值(例如1,000,000)和ISO代码(比如USD)。当他将验证时,该值将打印在范围A1中,并将通过使用以下宏记录代码行格式化为货币:

.Range("A1").NumberFormat = _
            "_-[$" & Me.ISOTextBox.Value & "] * #,##0.00_-;-[$" & Me.ISOTextBox.Value & "] * #,##0.00_-;_-[$" & Me.ISOTextBox & "] * ""-""??_-;_-@_-"

基本上,上面是分配.NumberFormat属性的字符串;例如,在“USD”的情况下,字符串将如下所示:

"_-[$USD] * #,##0.00_-;-[$USD] * #,##0.00_-;_-[$USD] * ""-""??_-;_-@_-"

我的问题是:如果使用上面的字符串我设置数字格式,我怎么能获得呢? 我可以清楚地进行字符串解析,这是我正在采用的用于提取3字母ISO代码的“可怕”解决方案:

ISOcode = Left(Replace(Split(Range("A1").NumberFormat, "[")(1), "$", ""), 3)

注意:以上代码将所有NumberFormat拆分为[,因此采用第二个元素(以$USD开头),替换{{ 1}} $并取前三个字母,符合ISO代码的标准,总是长3个字母。)

文档在这方面很差:有没有人知道是否有一种方法可以正确地从货币格式中获取 ISO代码(而不会变成不优雅的字符串解析)?

1 个答案:

答案 0 :(得分:0)

我非常确定您需要解析字符串,但可以使用以下方式更清晰地提取ISO代码:

If InStr(Range("A1").NumberFormat, "[$") <> 0 Then _
ISOcode = Mid(Range("A1").NumberFormat, InStr(Range("A1").NumberFormat, "[$") + 2, 3)