[英]Excel formula to reference 'CELL TO THE LEFT'
我正在嘗試進行條件格式設置,以便如果值與其左側單元格中的值不同,單元格顏色會發生變化(每列是一個月,每行是某個對象的費用。我想監控幾個月內價格很容易發生變化。)
我可以對每個單元格進行格式化並拖動它,但我想要一個適用於整個工作表的通用公式。
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
最短最兼容的版本是:
=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 時,這是不行的。
創建條件格式時,設置它適用於您想要的范圍(整個工作表),然后輸入一個相對公式(刪除$
符號),就像您只格式化左上角一樣。
Excel 會相應地將格式應用於其余單元格。
在此示例中,從 B1 開始,左側單元格將是 A1。 只需使用它 - 不需要高級公式。
如果您正在尋找更高級的東西,您可以使用column()
、 row()
和indirect(...)
。
如果您將單元格引用更改為使用 R1C1 表示法(工具|選項,常規選項卡),那么您可以使用簡單的表示法並將其粘貼到任何單元格中。
現在你的公式很簡單:
=RC[-1]
而不是寫很長:
=OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)
你可以簡單地寫:
=OFFSET(*Name of your Cell*,0,-1)
因此,例如,您可以寫入 Cell B2 :
=OFFSET(B2,0,-1)
引用單元格B1
仍然感謝傑森楊!! 如果沒有您的回答,我永遠不會想出這個解決方案!
使用以下公式填充 A1 單元格:
=IF(COLUMN(A1)=1;"";OFFSET(A20;0;-1))&"1"
然后自動向右擴展,你得到
1| A | B | C | ect ect
2| 1| 11| 111| ect ect
如果偏移量超出可用單元格的范圍,您將獲得#REF! 錯誤。
希望你喜歡。
更簡單:
=indirect(address(row(), column() - 1))
OFFSET 返回相對於當前引用的引用,因此如果間接返回正確的引用,則不需要它。
為什么不直接使用:
=ADDRESS(ROW(),COLUMN()-1)
創建User Defined Function時,我發現無法應用涉及函數OFFSET
和INDIRECT
的其他答案。
相反,您必須使用Application.Caller
來引用已使用用戶定義函數 (UDF) 的單元格。在第二步中,將列的索引轉換為相應列的名稱。
最后,您可以使用活動工作表的Range 函數來引用左側單元格。
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
我偶然發現了這個線程,因為我想始終引用“左側單元格”,但以非易失性方式(沒有偏移、間接和類似災難)至關重要。 上下瀏覽網頁,沒有答案。 (這個帖子實際上也沒有提供答案。)經過一番修改后,我偶然發現了最令人驚訝的方法,我喜歡與這個社區分享:
假設 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=index($E6:G6;1;columns($E1:G1)-1)+G5。
這應該永遠不會工作,對吧? 循環引用,清楚! 嘗試一下並感到驚訝。 Excel 似乎意識到,雖然 INDEX 范圍跨越了我們正在重新計算的單元格,但該單元格本身並沒有被 INDEX 尋址,因此不會創建循環引用。
所以現在我在家干了。 在 F 和 G 之間插入一列,我們就得到了我們需要的結果:舊 H 中的延續值將引用我們在新 G 中插入的延續值。
您可以使用 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
對於那些尋找非易失性答案的人,您可以通過在命名公式中使用 INDEX 函數來完成此操作。
選擇單元格 A2
打開Name Manager
(Ctrl+F3)
點擊New
將其命名為“LeftCell”(或您喜歡的任何名稱)
對於Scope:
,選擇Workbook
在Refers to:
中,輸入公式:
=INDEX(!A1:!A2, 1)
單擊OK
並關閉Name Manager
這告訴 Excel 始終查看當前單元格左側的值,並且會隨着選擇不同的單元格而動態更改。 如果名稱單獨使用,它提供單元格的值,但在范圍內它使用引用。 歸功於這個關於單元格引用的答案。
我認為這是最簡單的答案。
使用“名稱”來引用偏移量。
假設您想將一列(A 列)一直求和,但不包括保存總和的單元格(例如單元格 A100); 做這個:
(我假設您在創建名稱時使用 A1 引用;隨后可以切換到 R1C1)
=SUM(A1:OneCellAbove)
因為這是回答@zipper 的唯一方法
你的公式的原因:
="OFFSET(INDIRECT(ADDRESS(ROW(), COLUMN())),0,-1)=""xyz"""
沒有條件格式化,因為公式在字面上要求 ="THIS PHRASE" 等於 "THAT PHRASE",嘗試這樣寫: =OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),0,-1)="xyz"
其中 "xyz" 是您的文本,"-1" 是您要搜索左側的列數。
請選擇整個工作表和 HOME > Styles - Conditional Formatting, New Rule..., Use a formula to determine which cells to format and Format values where this formula is true: :
=A1<>XFD1
格式... ,選擇格式, OK , OK 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.