单元格 A1 中有一些信息。
然后单元格B1有一个公式(称为“Formula1”)来修改A1,从而得到B1的值。
然后单元格 C1 有一个公式(称为“Formula2”)来修改 B1,其值是在将其公式应用到 A1 后创建的,从而得到 C1 的值。
有没有一种方法可以让我编写一个公式,要求他在单个单元格中先执行公式 1,然后执行公式 2,而不需要在不同的单元格中编写 2 个不同的公式?
我尝试在公式框中这样写,但是它是将一个与另一个进行比较,而不是先执行一个,再执行另一个,并得到第一个的结果:
=公式1
=公式2
也尝试了 =Formula1&Formula2 和 =Formula1+Formula2,但它们做了其他事情......
我怎样才能在单个单元格中编写公式:
=公式1 THEN 公式2 THEN 公式3,等等(每个更高级别的公式都对前一个公式的结果进行运算)
谢谢
例子
输入单元
A1:迈克尔.约翰$乔希.安德鲁斯
A2:迈克尔%乔什.安德鲁斯
A3:迈克尔·约翰
A4:迈克尔.约翰
B 列的公式 1:=LEFT(A1,FIND("$",A1& "$")-1)
C 列的公式 2: =IF(SUMPRODUCT(LEN(B1)-LEN(SUBSTITUTE(B1,"$","")))=1,LEFT(B1,FIND("$",B1)-1),IF(SUMPRODUCT(LEN(B1)-LEN(SUBSTITUTE(B1,"%","")))=1,MID(B1,FIND("%",B1)+1,LEN(B1)-FIND("%",B1)),IF(SUMPRODUCT(LEN(B1)-LEN(SUBSTITUTE(B1,".","")))>=1,B1,"")))
我必须写入 A 列,然后执行公式 1 来获取 B 列,然后在公式 1 的结果之后再次在 B 列值之上执行公式 2,然后才获取 C 列。这使得 excel 图表显示我不想出现的信息,也不想分部分计算,而只显示一次计算的最终结果。
我希望只有 A 列和 B 列,其中 A 是输入,B 列一次性计算所有公式。如何制作一个包含这两个公式的单一公式,先计算公式 1,然后直接将公式 2 应用于公式 1 的结果?
谢谢
答案1
回答你最初的问题,“有没有一种方法可以让我编写一个公式,要求他在单个单元格中先执行公式 1,然后执行公式 2,而不需要在不同的单元格中编写 2 个不同的公式?“——不,直到 Excel 2016 的最新版本发布后它才存在。
在 excel 中有很多有效的公式编写方法,根据您提供的示例,我相信下面的方法应该可以满足您的需求
=IF(ISERROR(FIND(".",MID(A1,IFERROR(FIND("%",A1)+1,1),LEN(LEFT(A1,FIND("$",A1& "$")-1))-IFERROR(FIND("%",A1),0)))),"",MID(A1,IFERROR(FIND("%",A1)+1,1),LEN(LEFT(A1,FIND("$",A1& "$")-1))-IFERROR(FIND("%",A1),0)))
由于您实际上并未陈述您的要求,我只能假设您正在尝试实现以下目标:
- 截断任何文本后$ 符号(如果存在)然后
- 截断任何文本前% 符号(如果存在),然后
- 检查是否存在“。”符号,如果不存在则空白,否则接受上一步的输出
尝试一下并告诉我们您的想法。
答案2
是的,您将构建一个复杂的公式,使用替换先前公式的输入。假设如下:
A1
=2(您的输入)
B1
=A1*2(您的第一个操作)
C1
=B1/12(您的第二个操作)
单个公式可能是C1
=(A1*2)/12
,使用 () 来强制操作顺序。
答案3
由于您接受的答案并未回答您所提的问题,因此我将提供另一个答案。
重新表述你的问题,你有两个函数,你称之为“Formula1”和“Formula2”;我称它们为f()
和g()
。你目前正在定义 和,并且你想定义,从而消除中间人。B1=f(A1)
C1=g(B1)
B1=g(f(A1))
如果你能解释一下就好了为什么你想这样做。毕竟,这是一种很常见的技术,我们经常在回答中推荐它。如果问题需要特别复杂的表达式,我们经常建议提问者创建一个“辅助列”来保存中间结果。然后使用辅助列作为输入生成最终的期望结果。
但是,如果你只是不想在电子表格中看到B1
(即)值,f(A1)
- 简单的解决方法是隐藏 Column
B
。 - 更复杂的解决方法是将公式从移动到 (或其他一些偏僻的列),然后设置。如果需要,您可以隐藏 列。
f(A1)
B1
Z1
B1=g(Z1)
Z
更先进的方法是实施
g()
作为 VBA 用户定义函数。然后您可以定义B1
为=g(LEFT(A1,FIND("$",A1&"$")-1))
在工作表公式形式中使用 Formula1。
或者你可以从逻辑上得出这个结论:实施
f()
和g()
作为 VBA 用户定义函数,并定义B1
为=g(f(A1))
当然,你可以赋予函数名称来反映它们的作用。
答案4
实际上,获取公式的能力在 Excel 中已经存在 30 年了。
Excel 4 宏函数GET
能够做到这一点,这是它能够做的众多事情之一,人们使用它就像使用现在更为人熟知的EVALUATE
函数一样。
进一步扩展这一点是没有意义的,因为FORMULATEXT()
现在已经存在了。
但根据记录,这可以很容易地完成,而且需要很长很长的时间。也许这就是为什么 MS 花了很长时间才开发出这样的函数FORMULATEXT()
?同样,也许这就是为什么 MS 如此明显地抵制对简单的单元格端公式将文本字符串直接转换为公式的明显需求。是的,EVALUATE
工作正常(强调“-ish”),但它不是单元格端的,而且由于使用方式间接,通常很难在公式中使用。因此,例如没有公式片段表,人们可以从文本片段和基于手头数据中的因素的查找中构建公式。因此,单元格中没有易于维护片段的简单公式。(此外,不,INDIRECT()
对我所描述的完全没有用处。)
但 Bharat Anand 说当时不可能做到这一点是错误的。GET
功能,选项 6。