(替代标题:为什么地球上没有Excel支持用户定义的带有参数的公式而不需要求助于VB以及需要解决的问题?)。
[更新以澄清我的问题]
在定义表时,在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继续成为特例。
这不是(例外 - 特别是在表格的第一行)一个非常常见的要求吗?
答案 0 :(得分:4)
如果您将数据格式化为表格,则可以使用表格公式(例如[@ABC])而不是A1格式(例如A1,$ C2等)。但有两个技巧需要考虑。
首先,前一行没有表格公式语法,而是excel将默认返回A1格式,但您可以使用偏移公式将当前单元格移动到上一行,如下所示。但是在这种情况下,它会返回一个#值错误,因为我不能+1和#34; ABC"。
ABC
1 =OFFSET([@ABC],-1,0)+1
2 =OFFSET([@ABC],-1,0)+1
3 =OFFSET([@ABC],-1,0)+1
4 ....
所以第二个技巧是使用if语句初始化值,买入检查前一行值是否为标题值。如果相同使用初始值,则添加增量。注意假设表名为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组合来迭代和循环表。
如果你有很多列需要确定它们是否是第一行,你可以在第一行进行一次列测试,其余的可以使用更简单的if。例如,对于其他人,ABC将为第一行假,而对于其他人,则为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 ....
希望有所帮助
答案 1 :(得分:2)
我不知道你是否在寻找像锁定公式这样简单的东西。您可以通过突出显示您不想更改的公式部分然后点击F4来实现。这绝对是formila的这一部分,使用$表示它,并且在你将它复制/粘贴到表格时不会改变。
或者,您可以使用定义的名称。您可以在“数据”选项卡中进行设置,并基本上为名称或变量指定一些内容,然后将其放入公式中。这些可以像对另一张纸上的单元格的简单参考一样简单到非常复杂的多页正式。
答案 2 :(得分:1)
通常,要处理包含多个列的表的第一行中的“例外”公式,只需手动输入,并仅填写下面的行。但是如果你有更多的“例外”案例,你需要另一个列,其中0/1值表示除了这些。然后你到处都使用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,再也不会受到电子表格特性的困扰。