【问题标题】:How to avoid a circular reference with VBA in this case?在这种情况下如何避免使用 VBA 进行循环引用?
【发布时间】:2018-03-11 06:14:28
【问题描述】:

我正在输入多行数据。有时我会在 A 列中输入净额,有时我会在 C 列中输入毛额。净额 + 增值税 = 毛额。在所有情况下,我都希望公式自动为我计算缺失的数字。

我有三列 (ABC) A 栏代表净额,B 栏代表名义增值税,C 栏代表毛额。 我在 B 中有一个公式,如果 A 增值税,或者 B 增值税,否则为空白。

目前,如果我在 A 中放入任何内容,则会计算增值税,而 C 为空白:

  A    B    C
  100  20  

同样,如果我在 C 中添加任何内容,则会计算增值税,但 A 为空白:

A    B    C
    20    120

我想要的是下面,不管是给定的A,还是C。

A    B    C
100  20   120

我正在尝试计算净给定的总数字,以及单行上的总给定净数字。

注意,B 列受保护,我有一个公式可以自动计算增值税,无论是先将数字输入 C 还是先输入 A:

=IF(E2>0,E2*VATRATE,IF(G2>0,G2-(G2/(1+VATRATE)),""))

理想情况下使用 VBA,如果给定 A,则计算 C,如果 C 给定计算 A。

【问题讨论】:

  • 这实际上是一个很好的问题;也是一个艰难的过程。

标签: excel vba


【解决方案1】:

实际上,您根本不需要 VBA。使用这些公式:

  • A2中的网=IF(NOT(ISFORMULA(C2)),C2-B2,0)
  • B2 增值税 =IF(NOT(ISFORMULA(A2)),A2*VATRATE,IF(NOT(ISFORMULA(C2)),C2-(C2/(1+VATRATE)),0))
  • C2 总收入=A2+B2

诀窍是确定一个数字是否是手动输入的。一旦知道这一点,就可以使用 if 语句来避免循环引用。

根据需要复制尽可能多的行。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
相关资源
最近更新 更多