我有一个需要在 Android 上运行的 Excel 表。唯一的问题是,我使用 VBA 来执行求值函数,但 VBA 不适用于 Android 应用。我正在寻找替代方案,然后找到了函数“VALUE()”,我看到一个单元格包含:
=VALUE(10 + 5 * 3)
将返回正确结果 (25)。现在我想做的是:
=VALUE(A2)
其中 A2 是包含“10 + 5 * 3”的文本。但这会返回“#VALUE!”
有没有什么技巧可以让我使用 VALUE() 来评估简单的公式?
谢谢!
答案1
多年来,一直存在一种可以在完整版 Excel 中实现此目的的黑客程序。我怀疑它是否适用于 Android,但可能值得一试。
我正在使用 Excel 2013。
转到“公式”功能区栏并选择“定义名称”。
给出任意名称,例如myResult
在“引用:”部分,输入公式=EVALUATE(A2)
现在,将公式放在=myResult
工作表中您希望答案出现的位置。
答案2
使用 INDIRECT()。
示例(来自Microsoft Office INDIRECT 函数):
数据 B2 1.333 B3 45 乔治十 5 62
公式 描述 结果 '=INDIRECT(A2) 单元格 A2 中的引用值。引用值为 1.333 单元格 B2,其中包含值 1.333。 '=INDIRECT(A3) 单元格 A3 中的引用值。引用的是 45 单元格 B3,其中包含值 45。 '=INDIRECT(A4) 因为单元格 B4 具有定义的名称“George”,所以对 10 定义的名称是单元格 B4,其中包含值 10 '=INDIRECT("B"&A5) 将“B”与 A5 中的值(即 5)相结合。这反过来又 62 指的是单元格 B5,其中包含值 62。
适用于:Excel 2016、Excel 2010、Excel Starter、Excel 2013、Excel Online、Excel 2016 for Mac、Excel for Mac 2011、Excel 2007
答案3
这样做确实有一个“技巧”。
我假设您的意思是您想要计算一个简单的公式,例如您VALUE()
公式中使用的公式:10 + 5 * 3,而不是字面上用引号括起来的版本。但即使您没有使用通常的惯例在引号内显示感兴趣的内容,而是真的在单元格中用引号显示要计算的字符串,那么,这也是可以做到的。
而且非常简单。
按照我认为您希望的方式操作:假设单元格 A1 包含以下内容: 10 + 5 * 3
。您考虑输出相对于单元格 A1 的位置,然后选择所需的单元格。因此,如果您希望输出单元格 C1,请选择 C1。选择后,创建一个命名范围(可能称为 TextCalculate),并为其Refers to
值指定以下公式:
=EVALUATE(A1)
关闭它并在单元格 C1 中输入:
=TextCalculate
它将根据您的需要评估 A1 中的内容(如果可以:它必须是 Excel 可以理解的内容!)并在单元格 C1 中显示结果。
如果您确实需要在输入中使用引号,那么只需为该类输入数据设置另一个命名范围并赋予其以下值即可:
=EVALUATE(EVALUATE(A1))
第一个EVALUATE()
去掉引号,然后第二个评估剩下的干净字符串。
注意我说的是把函数在命名范围内而不是直接将其放入单元格中。这是绝对必要的,不要胡乱操作,如果您尝试这样做但没有成功,您可能已经尝试过在单元格端进行操作。在指定的范围内执行此操作,它将成功。
这是为什么?嗯,这很有趣,但我认为从你的问题来看你已经知道为什么了……但其他读者可能不知道(因此,以下以及你肯定不需要的关于仅在命名范围内尝试它的警告)。该函数来自 Excel 在实施 VBA 之前用于构建宏的命令集。它旨在用于使用旧工具构建的宏,而 Excel 本身中唯一仍然有效的地方是命名范围功能。请注意,它们从来没有在宏之外工作过,今天也不行:除了在命名范围内。
只要 Android 版本可以使用命名范围,它就可以在那里工作。老实说,我无法检查这一点,并且相信可能不会,因为我最好的猜测是 Android 版本是重写而不是移植,他们可能已经放弃了 Excel 的这个方面,特别是因为它是用于宏的,而你会发现 Android 不会执行这些操作。但是,由于它不是 VBA 本身的一部分,只是可供 VBA 访问,所以他们可能移植了它并且它随之而来,尽管他们没有内置 VBA 接口(因此,我假设也没有其他任何东西的接口)。因此,请尝试EVALUATE()
在 Android Excel 中使用命名范围并查看。它可能确实没有被带进来,但话又说回来,它可能被带进来了。显然不是作为 VBA 的工具,但仍然可能可用于命名范围。
在停止之前必须测试一些东西...真扫兴... 中使用的名称LET()
看起来非常像“作用域”到单个公式的命名范围(它们看起来总体上很像,并且将取代实际定义的命名范围,所以...),我想知道它是否适用于 中使用的名称的公式LET()
。可惜的是,它没有... 必须更多(或更少)它。