2013-02-03 44 views
0

假設我已經將單元格A1-A10填充了數字。我在B1單元格中的初始公式是= A1-A6。但是,我希望刪除單元格A3(如果可能,請將內容保留在刪除下方),並且我希望B1中的公式能夠識別此更改,然後自動將其自動調整爲= A1-A7 (這個想法是我想讓A1在單元格中的數字減去5個「未擊出」單元格中的數字)。然後,如果我打出A5單元格,我希望公式將自己調整爲= A1-A8等等。有誰知道如何做到這一點?動態Excel減法

回答

1

編輯#1:誤讀輸入,抱歉)

有點簡單,但做的工作:類型=A1-INDIRECT("A"&SMALL(IF(A:A<>"",ROW(A:A),""),6))並按CTRL + SHIFT + ENTER,而不是通常的ENTER - 這將定義一個ARRAY公式,並在其周圍產生{}括號(但不要手動輸入!)。

要加速計算,您可以將A:A替換爲任何有限的範圍。

樣品文件(所得的式是黃色標記):https://www.dropbox.com/s/sy7zkg71xtfgib9/Subtract5th.xlsx

EDIT#2:誤讀了 「擊出」,對不起)

字體樣式(以及類似的電池特性)可能不會被默認Excel函數讀取,這就是爲什麼你需要添加UDF稱爲StrikeOut

  1. 按ALT - F1 1 - 這將打開VBA編輯器。
  2. 插入新模塊:Insert > Module。在A1:A10=A1-INDIRECT("A"&(6+StrikeOut(A2:A10)))

  3. 集刪除線字體的任何細胞:

    Function StrikeOut(R As Range) As Long 
    Dim c As Range 
    StrikeOut = 0 
    For Each c In R.Cells 
        If c.Font.Strikethrough = True Then StrikeOut = StrikeOut + 1 
    Next 
    End Function 
    
  4. 式添加到B1:

  5. 代碼添加模塊粘貼。

  6. 遺憾的是,單元格格式更改不會觸發任何更改事件,因此您需要按F9或更改工作表上的任何單元格值以重新計算並因此更新B1中的結果。

樣品文件共享:https://www.dropbox.com/s/n9o7tn3ks3x8nza/StrikeOut.xlsm

P.S.至少對我來說這是非常有用的)))

+0

我試過這個,但不能得到它的工作。如果我點擊一個數字,公式結果不會更新(包括'F9'強制重新計算) –

+1

@請注意,由於我的英語水平不好,我們似乎有一個誤解:我理解爲「清除」,即清除或刪除單元格是空的。你打算什麼意思?文本存在,但它通過一條線? –

+0

我認爲罷工是一個通過它的線。我們將需要OP澄清... –