【问题标题】:WorksheetFunction.value() missing in ExcelExcel 中缺少 WorksheetFunction.value()
【发布时间】:2019-07-23 22:10:54
【问题描述】:

在电子表格公式中,=VALUE("$100") 将计算为数值 100。然后我尝试通过 WorksheetFunction 对象在 VBA 中访问此函数,但它丢失了。

在 VBA 中,我尝试了转换函数 Val("$100"),但它返回 0。那么我该如何通过 VBA 来完成呢?

【问题讨论】:

  • In a spreadsheet formula, =VALUE("$100") will evaluate to the numeric value of 100 - 你确定吗?在我的 excel 中它没有评估为 100。 imgur.com/a/cEb2k
  • @newguy 我的也没有,但有趣的是,将“£100”和“€100”评估为 100 非常高兴
  • @danl 您是在将文字字符串传递给该函数,还是在引用货币格式的单元格。因为如果它是一个字符串,它将不起作用。它将与具有值但只是格式化的单元格引用一起使用。
  • @newguy both - 我有两个单元格,它们的字面意思是 =Value("£100") 和 =Value("€100"),还有两个单元格是 =Value(B2)例如,其中 B2 = '£100 或 '€100 。两者都运行良好,并且在使用 $ 而不是 £ 或 € 时两种方法都会引发错误
  • @Allen:=VALUE("$100") 是否有效取决于区域设置和 Excel 的语言版本。 Type Conversion Functions 的工作方式相同。因此,CDbl("$100") 可能适用于您在 VBA 中的 Excel。

标签: excel vba


【解决方案1】:

Val() 仅当字符串都是数字时才真正起作用——恐怕货币符号会导致问题。

如果您总是在字符串中使用相同的货币符号,则可能值得使用类似

StringName = replace(StringName, "$", "")

通过将 $ 替换为 "" 来取出它 - 否则,如果您的字符串并不总是如此可预测,那么以下问题可能会有所帮助:

How to find numbers from a string?

【讨论】:

  • Val() 仅当字符串都是数字时才真正有效 - ? Val("42 Not true").
【解决方案2】:

https://docs.microsoft.com/en-us/office/vba/api/excel.worksheetfunction.numbervalue

上面的使用示例,返回值为-1234.56:

MsgBox WorksheetFunction.NumberValue("-$1,234.56", ".", ",")

请注意,如果结果不是数字,则会引发错误。例如(交换在这种情况下无效的逗号分组和小数字符参数):

MsgBox WorksheetFunction.NumberValue("-$1,234.56", ".", ",")

我不明白为什么上面的链接没有任何版本信息。它目前的日期为 2019‎-‎05‎-‎23 - 不知道这是因为它是新的还是最近更新的。

【讨论】:

  • WorksheetFunction.NumberValue 仅适用于 Excel 365 或 v2019 及更高版本。
猜你喜欢
  • 1970-01-01
  • 2018-04-18
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多