2013-06-05 55 views
4

(替代标题:为什么地球上不支持带有参数的用户定义公式而不诉诸VB以及需要的问题?)。Excel计算列中的例外

[更新澄清我的问题]

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

但是......如果您需要规则的例外,该怎么办?

在我建立的表格中进行一些计算,第一行在某些方面往往是“特殊的”。所以,我想要自动填充,但不是在第一行,或者不在标记为自定义的单元格上。 Excel文档在计算列中提到了例外情况,但只是提及查找它们并将其消除。

例如,第一行是计算初始值 其余所有行计算一些增量更改。 一个小示例 - 第1列和第4行的表:

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

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

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

哪当然是破产 - 它应该允许A2继续是一个特例。

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

+1

它工作正常,只要你不使用Excel的表格 –

回答

4

如果您将数据格式化为表格,则可以使用表格公式(例如[@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检查前一行值是否为标题值。如果相同使用初始值,则添加增量。笔记假设表名为Table

 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组合来迭代和循环表格。

如果您有大量需要确定它们是否为第一行的列,那么如果第一行和其他行可以使用更简单的if,则可以有一列测试。例如,农行将给予真正的第一行假他人,那么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 .... 

希望帮助

+0

它是个好主意,我只是希望有更好的东西 - 因为这似乎是一个如此普遍的问题。 我一直在使用Excel的很多最近,我一直运行到这样的事情 - 看似简单的问题,目前还没有很好的解决方案。 我甚至采取了使用C预处理器来帮助我生成公式粘贴到Excel!至少这样我可以使用#define常量和函数。 – joeking

2

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

或者,您也许可以使用“定义的名称”。这些可以在Data选项卡中设置,并基本上将某些内容赋予名称或变量,然后将其放入公式中。这些可以很简单,只需将另一张纸上的单元格简单地引用到令人难以置信的复杂的多张表格中即可。

1

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

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

尽管我喜欢Excel,并且尽管它是整个MS的最佳产品,但它仍然是一个薄弱的工具。仅供参考,您可以轻松学习modern and poweful scripting languages, such as Ruby, here,并且永远不会再受到电子表格特性的困扰。