我正在使用以下列创建商务旅行费用表:
"A" = Status
; "B" = planned costs
(其他栏目现在并不重要)
专栏" A"有"计划,完成,取消"下拉列表值。
专栏" B"单元格中始终有一个数字。 (所以在B栏中我不能写任何函数,因为它会覆盖价格)。
当列中的状态为" A"时,我想要的是标准或代码。更改为"取消",然后旁边的计划成本变为0或清除单元格。
我开始使用支持表执行此操作,我在其中编写了一个简单的IF语句(在sheet2随机单元格中)=if(A2="cancelled"; B2=0; "")
。但是这样它就不起作用了。简单地将错误结果输入到随机单元格中。
任何帮助都将不胜感激。
答案 0 :(得分:0)
=if(A2="cancelled"; B2=0; "")
:几件事
您使用的是分号而不是逗号 如果此公式进入B列
,您也不需要明确说明B2 = 0
答案 1 :(得分:0)
正如已经说过的:你不能在没有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")
答案 2 :(得分:0)
=if(A2="cancelled",0,B2)
将此公式放在C2中,C2会根据需要显示结果。
答案 3 :(得分:0)
您可以创建第三列(perhabs hidden),其中包含现在存在于“B”中的值。然后在“B”列中使用函数=IF(A2="cancelled";0;C2)
。
答案 4 :(得分:0)
我认为你不能完全按照你在其他一些细胞中使用公式所要求的那样:
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
但是我强烈建议不要使用这个解决方案,因为现在你只需要在B列的单元格中覆盖任何值为0.因此,您将丢失此单元格中的先前数据。
我会做什么:
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;“&lt;&gt; cancelled”; B:B)