图7.133中A列的值用于描述房屋面积或长宽高规格,其中文本都存放在【】中,数字和运算符在【】以外。是否有办法将这些包含数学表达式和文本的字符串转换成计算结果呢?
图7.133 包含字符描述的表达式
解题步骤
将这种复杂表达式转换成值必须借助宏表函数EVALUATE才能实现,具体操作步骤如下。
1.选择B2单元格,按组合键<Ctrl+F3>,弹出“名称管理器”对话框。
2.单击“新建”按钮弹出“新建名称”对话框,然后将名称设置为“结果”,将引用位置设置为以下公式:
设置界面如图7.134所示。
图7.134 定义名称
3.单击“确定”按钮保存设置,然后返回工作表界面。
4.在B2单元格输入公式“=结果”,然后双击B2的填充柄,将公式向下填充到B4,公式的计算结果如图7.135所示。
图7.135 忽略文本将表达式转换成值
知识扩展
1.EVALUATE是宏表函数,不能在单元格中直接调用,必须在名称中调用此函数,然后在单元格中调用名称执行运算。
2.本例中要计算的表达式存在干扰符,.EVALUATE 函数无法直接将它转换成值,好在干扰符都有明显的规律,只要将干扰符替换成空文本即可执行后期的数据运算。
本例中所有干扰符都在【】中,【】也属于干扰符。本例的处理方法是使用 SUBSTITUTE函数将【替换成“*istext(""”,将】替换成“"")”,那么原本的“【客厅2个】”将会被转换成“*istext("客厅2个")”。
ISTEXT 函数用于判断参数是否为文本,由于本例【】中间的字符全是文本,因此 ISTEXT的计算结果为True,True参与数值运算时当作1处理,因此“*istext("客厅2个")”的运算结果其实是“*1”。同理,其他所有干扰符都会被转换成“*1”,因此“12【长】*5【宽】*9.5【高】”通过替换后相当于“12*1*5*1*9.5*1”,也就相当于“12*5*9.5”。
换言之,两个SUBSTITUTE函数的嵌套应用可以将干扰符转换成“*1”,又由于任何数乘以1都等于原值,因此最终结果是忽略了所有干扰符。
3.如果本例中的【】替换成其他符号,处理方法也一样,替换公式中对应的符号即可。
4.如果没有干扰符,只是“1*2+5”、“(12+8)*5-5/2”这种标准的表达式,那么在定义名称时可以改用“=EVALUATE(A2)”。