Aru*_*Aru 6 worksheet-function openoffice-calc microsoft-excel
多年来无数次,我一直想在 Excel/OpenOffice Calc 中以以下形式使用 If 语句:
If(A (comparison operator) B, A, C)
Run Code Online (Sandbox Code Playgroud)
或者,同样有用:
If(A (comparison operator) B, C, A)
Run Code Online (Sandbox Code Playgroud)
其中 A 是一个非常冗长且复杂的表达式,而 B 和 C 则简短而简单,通常(但不总是)只是一个字面值。我想要一种方法来执行其中一个不涉及重复 A 表达式的方法(这至少是丑陋的两倍,需要重复编辑,并引入了完全不必要的错误,这些错误甚至不会始终如一地表现出来),或者给 A专用单元格,或使用 VBA(这是 Microsoft 专有的,因此令人讨厌,而不是在 Calc 中)。
对于特殊情况,有一些解决方法,例如 Excel 中的 Iferr()(这不在 Calc 中),以及使用“条件”类型函数(如 Abs()、舍入和 Mod())处理数字。但是这些在大多数时候都不足以做我想做的事情(而且数字操纵也很不雅观,不清楚)。有没有可能有一个我错过的功能或简单的一系列功能可以做到这一点?离开似乎是一件大事。
对于 LO Calc 解决方案,我看到两种方法:
将产生结果的函数A放入单独的受保护的工作表中。这样,用户就不太可能意外地尝试编辑包含您的函数的单元格。它还有一些其他优点:
ods文件中,将函数定义为基本宏内的用户定义函数。LO Calc 使用的 Star Basic 与 VBA 不同,但非常相似,因为两者都是 Basic 方言。优点:
ods模板中。在 Calc 中创建用户定义的函数非常容易。假设您必须A通过乘以三个不同的值来计算值,您只需创建一个如下宏:
Function A(b, c, d)
A = b*c*d
End Function
Run Code Online (Sandbox Code Playgroud)
现在,您可以在表达式中使用该函数If:
If(A(4, 5, 6) > B, A(4, 5, 6), C)
Run Code Online (Sandbox Code Playgroud)
当然,这个简单的示例没有多大意义,但是如果您的计算代码A()变得更复杂,它会更有用。如果要相乘的三个值是固定的,则可以将代码简化为
Function A()
A = 4*5*6
End Function
Run Code Online (Sandbox Code Playgroud)
并称其为简单使用
If(A() > B, A(), C)
Run Code Online (Sandbox Code Playgroud)
我知道这些例子太简单了,无法说明解决方案。只需考虑添加常量定义或在宏内创建完整的函数库,也许使用对仅编辑工作表的用户不可见的“私有”辅助函数ods。