【问题标题】:Return the ISO code from a currency formatted cell从货币格式的单元格返回 ISO 代码
【发布时间】:2015-02-12 08:40:34
【问题描述】:

用户可以通过用户表单插入一个数值(比如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 开头),将$ 替换为"" 和取前三个字母,符合始终为 3 个字母长的 ISO 代码标准。

文档在这方面很差:有谁知道是否有办法从货币格式中正确获取 ISO 代码(不会变成不雅的字符串解析)?

【问题讨论】:

  • 也许还有一种更优雅的方法可以将货币代码设置为 NumberFormat?
  • 由于格式只是一个字符串,您似乎无法逃避解析该字符串,除非您还将该 ISO 代码存储在其他地方(例如,在单元格的注释中)
  • @TimWilliams 不幸的是,没有,ISO 代码通过表单输入并存储到单元格中作为数字格式,而不是作为字符串存储到单独的单元格中。我希望那时代码会稳定,在这种情况下我不喜欢过多地信任字符串解析。
  • 在这种情况下,你能做的最好的可能是实现一个基于正则表达式的解析器来提取 ISO 代码(尽管这会将你限制在 Windows...)

标签: vba excel


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多