Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果满足条件,则进行计算_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 如果满足条件,则进行计算

Excel 如果满足条件,则进行计算,excel,vba,excel-formula,Excel,Vba,Excel Formula,我试图仅在满足特定条件时计算表达式。我这样做的原因是允许用户“锁定”一个值,以便对公式中其他变量的更改不再有效。 我尝试使用下面的功能,该功能非常有效,直到我关闭工作表并再次打开。 我已经尝试使用另一个作为参数传递的单元格,在未锁定时将值复制到该单元格中,如果锁定,则将其复制回来,但是excel不允许在函数中修改其他单元格。 有没有办法实现这个功能 函数EvaluateIf(表达式为字符串,条件为布尔值)作为变量 应用程序。挥发性 将myText设置为字符串 Dim myVal作为变体 如果情况

我试图仅在满足特定条件时计算表达式。我这样做的原因是允许用户“锁定”一个值,以便对公式中其他变量的更改不再有效。
我尝试使用下面的功能,该功能非常有效,直到我关闭工作表并再次打开。
我已经尝试使用另一个作为参数传递的单元格,在未锁定时将值复制到该单元格中,如果锁定,则将其复制回来,但是excel不允许在函数中修改其他单元格。 有没有办法实现这个功能

函数EvaluateIf(表达式为字符串,条件为布尔值)作为变量
应用程序。挥发性
将myText设置为字符串
Dim myVal作为变体
如果情况如此
myVal=Application.Evaluate(表达式)
其他的
myText=Application.Caller.Text
如果是数字(myText),则
myVal=Val(myText)
其他的
myVal=myText
如果结束
如果结束
EvaluateIf=myVal
端函数
EDIT1:
我需要将此函数应用于多个单元格,以便无法硬编码单元格

EDIT2:
我目前在excel中调用如下函数:
=EvaluateIf(N$7*IF(ISBLANK(P$7);1;P$7)*IF(ISBLANK(R$7);1;R$7);NOT(V$7))

试试这个方法-通常的注意事项适用于使用此方法绕过从工作表调用UDF时应用于使用UDF的限制

函数EvaluateIf(表达式、条件为布尔值、备份为范围)作为变量
将myText设置为字符串
Dim myVal作为变体
暗色面包
bak=backup.Value
如果情况如此
myVal=表达式
如果是myVal bak,则“是否更新缓存值?”?
应用程序。评估“SetBackup(“”&backup.Parent.Name&“”,“”&_
备份。地址(“”),“&myVal(“”)
如果结束
其他的
myVal=bak
如果结束
EvaluateIf=myVal
端函数
子挫折(ws作为字符串,addr作为字符串,v)
Application.Calculation=xlCalculationManual'避免无限循环!
ThisWorkbook.Sheets(ws).Range(addr).Value=v
Application.Calculation=xlCalculationAutomatic
端接头

一个单元格中的函数不能修改另一个单元格,这时您可以使用VBA进行修改。因此,您可以在打开工作表时运行sub-run,以从附加单元格中收集存储的值。但是,我首先如何存储该值呢?我还需要将该函数应用于多个单元格,以便硬编码不是一个选项。请告诉我们如何调用该函数。“条件”看起来如何?好吧,你需要将值存储在一张表中的某个地方。不会保留任何变量。至于怎么做,;或者只是将其存储在某个您知道不会使用的单元格中,作为备份,在打开文档时读取它。如果这不是一个选项,您可以在关闭文档时使用一个子触发器,将值保存在新的工作表上,然后在打开文档时读取并删除该值。@FaneDuru我添加了一个函数调用示例。我的情况有点像‘不是(A1)’