【问题标题】:How to pass the "If" result to another cell如何将“If”结果传递给另一个单元格
【发布时间】:2016-01-14 13:01:30
【问题描述】:

我正在创建一个包含以下列的商务旅行费用表: "A" = Status ; "B" = planned costs(其他列现在无所谓) 列“A”具有“计划、完成、取消”值的下拉列表。 “B”列单元格中始终有一个数字。 (所以在B栏我不能写任何函数,因为它会覆盖价格)。

我想要的是一个标准或代码,当“A”列中的状态更改为“已取消”时,旁边的计划成本变为0或清除单元格。

我开始使用支持表来执行此操作,在该支持表中我写了一个简单的 IF 语句(在 sheet2 随机单元格中)=if(A2="cancelled"; B2=0; "")。但是以这种方式它不起作用。只是在随机单元格中给出错误的结果。

任何帮助将不胜感激。

【问题讨论】:

  • 如果你不能在B列输入,我认为没有VB你将无法覆盖它。您可以做的是,添加一个额外的列,并执行=IF($A2="cancelled"; B2*0; B2) 之类的操作来显示更新后的费用。

标签: excel vba if-statement


【解决方案1】:

我认为你不能完全按照你的要求在其他一些单元格中使用公式:

Making Excel functions affect 'other' cells

'=if(A2="cancelled"; B2=0; "")' 如果 A2 恰好被取消,则如果 B2 等于 0,则简单地返回“问题”的逻辑值。这不是你想要的。

您可以创建一个 VBA 代码,每次在您的工作表中发生更改时都会执行该代码。

automatically execute an Excel macro on a cell change

按 Alt+F11 然后双击您想要的功能并添加代码

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Value = "cancelled" Then
    Target.Offset(0, 1) = 0
End If

End Sub

但我强烈建议不要使用此解决方案,因为现在您只需用值 0 覆盖 B 列中单元格中的任何内容。因此您会丢失此单元格中以前的数据。

我会做什么:

1) 如果 B 列中的数据是从其他地方提供的(不是手动编写的),那么我会在那里编写函数,即 "=if(A2="cancelled";0; .get_original_value)"

2)如果输入是手动的,我会添加另一列以保持“真实价值”,这将像第 1 点中的函数一样工作)

3) 或者代替 2),您可以使用条件格式根据 A 列中的值仅更改 B 列中单元格的显示 例如,您可以在此处开始阅读 http://www.excel-easy.com/data-analysis/conditional-formatting.html 您很可能会计算一些聚合(如总和),并希望取消的值为 0 以便进行此计算。通过仅更改显示,该值将保持非零,因此您必须使用 SUMIF 并排除取消的值,而不是常规 SUM,例如 =SUMIF(A:A;"cancelled";B:B)。

【讨论】:

    【解决方案2】:

    =if(A2="cancelled"; B2=0; ""): 几件事

    您使用的是分号而不是逗号 如果这个公式进入 B 列,你也不需要明确声明B2 = 0

    【讨论】:

    • 分号和逗号由客户端的区域设置定义。
    【解决方案3】:

    如前所述:没有 VBA,您无法更改单元格。您需要在工作表的代码窗格中使用类似的内容:

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count = 1 And Target.Column = 1 Then
        If Target.Value = "cancelled" Then Target.Offset(0, 1).Value = 0
      End If
    End Sub
    

    或者使用如下公式以“帮助列”的方式进行操作(如前所述):

    =$B2*($A2<>"cancelled")
    

    【讨论】:

      【解决方案4】:
      =if(A2="cancelled",0,B2)
      

      将此公式放入C2中,C2将显示您想要的结果。

      【讨论】:

        【解决方案5】:

        您可以创建第三列(可能是隐藏的)来保存现在存在于“B”中的值。然后在“B”列中使用函数=IF(A2="cancelled";0;C2)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-05
          • 2015-12-23
          • 1970-01-01
          相关资源
          最近更新 更多