2013-06-05 53 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,並且永遠不會再受到電子表格特性的困擾。