Excel计算列中的例外

(备用标题:为什么地球上不Excel支持VB的用户定义的公式,并带来的问题?)。

[更新以澄清我的问题]

在Excel中,当你定义一个表格时,它往往会自动复制列中的公式。 这很像“填充”。

但是…如果你需要规则的例外呢?

在我正在build立的表格中进行一些计算,第一行在某些方面往往是“特殊的”。 所以,我想要自动填充,但不是在第一行,或不在标记为自定义的单元格上。 Excel文档在计算列中提到了exception,但只是在查找它们并删除它们时提到了这些exception。

例如,第一行是计算初始值。其余所有行计算一些增量更改。 一个简单的例子 – 1列和4行的表格:

A 1 Number 2 =42 3 =A2+1 4 =A3+1 

第一个公式必须与其他公式不同。 这将创build一个简单的编号列表,其中A2 = 42,A3 = 43,A4 = 44。 但现在,我想改变它,而不是1递增2.如果我编辑A3为“A2 + 2”,Excel将表更改为:

  A 1 Number 2 =A1+2 3 =A2+2 4 =A3+2 

当然哪个是被破坏的 – 它应该允许A2继续是一个特例。

这是不是(例外 – 特别是在表的第一行)是一个非常普遍的要求?

如果您将数据格式化为表格,则可以使用表格公式(例如[@ABC])而不是A1格式(例如A1,$ C2等)。 但有2个技巧来解释。

首先,上一行没有表格公式语法,相反,Excel将默认返回到A1格式,但是您可以使用偏移公式将当前单元格移动到上一行,如下所示。 但是在这种情况下,它会返回#值错误,因为我不能+1到“ABC”。

  ABC 1 =OFFSET([@ABC],-1,0)+1 2 =OFFSET([@ABC],-1,0)+1 3 =OFFSET([@ABC],-1,0)+1 4 .... 

所以第二个技巧是使用一个if语句来初始化这个值,buy检查前一行的值是否是标题值。 如果相同,则使用初始值,否则添加增量。 注意假设表名为Table1

  ABC 1 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1) 2 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1) 3 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],42,OFFSET([@ABC],-1,0)+1) 4 .... 

请注意,您可以将初始值设置为表格外部的单元格,以定义初始值(例如$ A $ 1)和增量(例如$ A $ 2),如下所示

  ABC 1 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2) 2 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2) 3 =IF(OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]],$A$1,OFFSET([@ABC],-1,0)+$A$2) 4 .... 

我一直使用这个IF OFFSET组合来迭代和循环表格。

如果你有很多列需​​要确定它们是否是第一行,那么如果第一行和其他行可以使用简单的话,你可以有一列testing。 例如,ABC会为第一行赋予true,而其他赋值为false,然后使用DEF增加初始值

  ABC DEF 1 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2) 2 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2) 3 =OFFSET([@ABC],-1,0)=Table1[[#Headers],[ABC]] =IF([@ABC],$A$1,OFFSET([@DEF],-1,0)+$A$2) 4 .... 

希望有所帮助

我不知道你是否在寻找像locking公式一样简单的东西。 您可以通过突出显示您不想更改的公式部分,然后按F4来做到这一点。 这绝对是formila的这一部分,使用$来表示它,并且不会在您将其复制/粘贴到表格中时更改。

或者,您可以使用“定义的名称”。 这些你可以在Data选项卡中设置,基本上把一些东西赋给一个名字或者variables,然后把它们放到你的公式中。 这些可以很简单,就像另一张纸上的单元格的简单参考,以令人难以置信的复杂的多张表格forms。

通常情况下,要处理由多列组成的表格的第一行中的“特殊”公式,只需手动input它,然后只填写下面的行。 但是如果你有更多的“例外”情况,你将需要另外一个有0/1值的列来指示exceptins在哪里。 然后你用if(condition, formula_if_true, formula_if_false)到处。

  AB Number Exceptional? 1 if(C1,42,A1+1) 0 2 if(C2,42,A2+1) 1 3 if(C3,42,A3+1) 0 

尽pipe我喜欢Excel,而且它也是整个MS的最佳产品,但它仍然是一个薄弱的工具。 仅供参考,您可以在这里学习现代和function强大的脚本语言,比如Ruby,绝不再受电子表格特性的困扰。