2009-02-03 97 views
57

我想要做條件格式化,以便單元格的顏色會改變,如果值不同於它左邊的單元格中的值(每列是一個月,在每行都是特定對象上的費用,我想很容易監視幾個月的價格變化。)Excel公式引用'CELL到左'

我可以按照單元格和格式拖動它,但我想要一個適用於整個工作表的通用公式。

謝謝!

+3

...以及在某人正在尋找它的情況下...將列置於右側:`= INDIRECT(「RC [1]」,0)` – prograhammer 2014-09-18 21:08:55

+0

這是一個非常好的問題。不幸的是,我不確定我是否正確地理解了這一點,原始海報希望他的單元格不必進行條件格式化,然後將格式畫家粘貼到每個單元格。假設我們在行中有幾個月,在列中有香蕉,蘋果和桔子。在矩陣中是價格。如果價格從前一個月變化到當前月份,我們如何能夠做一些能夠自動着色紅色紅色的東西?如果還有一種自動方法,如果價格下降,將單元格顏色設爲綠色,如果 – Bryan 2015-01-29 18:33:32

回答

63
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) 
+0

不錯,謝謝。邁克爾的答案有用 - 但我喜歡明確的公式... – mik 2009-05-04 12:58:20

+6

使用五個很少使用的需要查看使用函數而不是簡單的A1或RC [-1]相對引用?這就像從布魯克林前往布朗克斯,在瓦拉瓦拉華盛頓停留! – 2009-07-09 00:51:50

11

在創建條件格式,設置範圍,它適用於你想要的(全片)一下,然後輸入一個相對公式(刪除$標誌),就好像你只格式化左上角角。

Excel將正確地將格式應用於相應的其他單元格。

在此示例中,從B1開始,左側的單元格將爲A1。只要使用 - 不需要高級配方。


如果你正在尋找一些更高級的,你可以玩弄column()row()indirect(...)

1

你可以使用VBA腳本改變選擇的條件格式(您可能必須調整的條件&相應格式):

For Each i In Selection 
i.FormatConditions.Delete 
i.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, Formula1:="=" & i.Offset(0, -1).Address 
With i.FormatConditions(1).Font 
    .Bold = True 
End With 
Next i 
7

如果您更改單元格引用使用R1C1符號(工具|選項,常規選項卡),然後您可以使用簡單的符號並將其粘貼到任何單元格中。

現在你的公式很簡單:

=RC[-1] 
54

最短,最兼容的版本是:

=INDIRECT("RC[-1]",0) 

「RC [-1]」 是指一列到左邊。 「R [1] C [-1]」是左下角。

第二個參數0表示使用R1C1表示法解釋第一個參數。

其他選項:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) 

在我看來太長時間。但是,如果相對值是動態的/派生自另一個單元格,則很有用。例如: -

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0, A1) 

最簡單的選擇:

= RC[-1] 

有你需要使用選項中打開R1C1符號,這是一個不走,當其他人都使用Excel的缺點。

2

填寫A1單元格,用下面的公式:

=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1" 

然後自動擴到右,你

1| A | B | C | ect ect 
2| 1| 11| 111| ect ect 

如果offset可用小區的範圍之外,你會得到裁判!錯誤。

希望你喜歡。

0

更簡單:

=indirect(address(row(), column() - 1)) 

偏移參考相對於當前基準的回報,因此,如果間接回報正確的引用,你不需要它。

2

而不是寫的很長一段:

=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1) 

你可以簡單的寫:

=OFFSET(*Name of your Cell*,0,-1) 

因此,例如,你可以編寫成細胞B2

=OFFSET(B2,0,-1) 

到參考細胞B1

還是謝謝Jason Young!如果沒有你的答案,我永遠不會想出這個解決方案!

1

當創建用戶定義函數時,我發現涉及函數OFFSETINDIRECT的其他答案無法應用。

相反,您必須使用Application.Caller來引用已使用用戶定義函數(UDF)的單元格。第二步,將列索引轉換爲相應列的名稱。
最後,您可以使用活動工作表的Range function來引用左側單元格。

Function my_user_defined_function(argument1, argument2) 
    ' Way to convert a column number to its name copied from StackOverflow 
    ' http://stackoverflow.com/a/10107264 
    ' Answer by Siddarth Rout (http://stackoverflow.com/users/1140579/siddharth-rout) 
    ' License (if applicable due to the small amount of code): CC BY-SA 3.0 
    colName = Split(Cells(, (Application.Caller(1).Column - 1)).Address, "$")(1) 

    rowNumber = Application.Caller(1).Row 

    left_cell_value = ActiveSheet.Range(colName & rowNumber).Value 

    ' Now do something with left_cell_value 
0

我偶然發現了這個線程,因爲我想總是引用「左側單元格」,但最重要的是在非易失性方式(無偏移,間接和類似災難)。上下看網絡,沒有答案。 (此線程實際上並沒有提供答案)經過一些修改後,我偶然發現了最令人驚訝的方法,我喜歡與該社區分享:

假設E6中的起始值爲100。假設我在F5中輸入一個增量到這個值,就是5.然後我們將計算F6 = E6 + F5中的延續值(105)。如果您想添加另一個步驟,比較簡單:只需將F列複製到G列,然後在G5中輸入新增量。

這就是我們定期做的。每一列都有一個日期,這些日期必須按時間順序排列(以幫助MATCH等)。每隔一段時間就會發生一次,我們忘記進入一個步驟。現在假設你想在F和G之間插入一列(以彌補你的遺漏)並將F複製到新G中(重新填充延續公式)。這是一場完全災難的短暫現象。試試吧 - 現在H6會說= F6 + H5而不是(因爲我們絕對需要它)= G6 + H5。 (新的G6將是正確的。)

爲了使這項工作,我們可以以最令人驚訝的方式混淆這個平庸的計算F6 = index($ E6:F6; 1; columns($ E1:F1)-1) + F5。複製權,你得到G6 =索引($ E6:G6; 1;列($ E1:G1)-1)+ G5。

這應該永遠不會工作,對吧?循環參考,清楚!嘗試一下,感到驚訝。 Excel似乎意識到雖然INDEX範圍跨越了我們正在重新計算的單元格,但該單元格本身並未被INDEX處理,因此不會創建循環引用。

所以,現在我回家了,幹了。插入F和G之間一列,我們得到正是我們需要的:在老H中的連續值將重提我們在新的G.

0

插入延續價值爲什麼不直接使用:

=ADDRESS(ROW(),COLUMN()-1)