我有一個工作表上看起來像=((E9-E8)/E8)
遍佈整個地方的許多單元格。我想用前兩個值進入這個新公式,(EXP((LN(E9/E8)/14.32))-1)
。簡單的Excel查找和替換公式
我怎樣才能一次性將它們全部更改爲新配方?
我有一個工作表上看起來像=((E9-E8)/E8)
遍佈整個地方的許多單元格。我想用前兩個值進入這個新公式,(EXP((LN(E9/E8)/14.32))-1)
。簡單的Excel查找和替換公式
我怎樣才能一次性將它們全部更改爲新配方?
如果公式是相同的,您可以使用查找和替換Match entire cell contents
已檢查和Look in: Formulas
。選擇範圍,進入查找和替換,進行輸入並單擊「全部替換」。
還是你的意思是,有幾個公式與此相同的形式,但不同的單元格引用?如果是這樣,那麼一種方法是正則表達式匹配和替換。正則表達式不是內置於Excel(或VBA)中,但可以通過Microsoft的VBScript正則表達式庫訪問。
以下功能提供必要的匹配和替換功能。它可以在一個子程序中使用,該子程序可以識別具有指定範圍內的公式的單元格,並使用公式作爲函數的輸入。對於與您正在查找的模式相匹配的公式字符串,該函數將生成替換公式,然後將其寫回工作表。
Function RegexFormulaReplace(formula As String)
Dim regex As New RegExp
regex.Pattern = "=\(\(([A-Z]+\d+)-([A-Z]+\d+)\)/([A-Z]+\d+)\)"
' Test if a match is found
If regex.Test(formula) = True Then
RegexFormulaReplace = regex.Replace(formula, "=(EXP((LN($1/$2)/14.32))-1")
Else
RegexFormulaReplace = CVErr(xlErrValue)
End If
Set regex = Nothing
End Function
爲了使該功能正常工作,您需要添加對Microsoft VBScript Regular Expressions 5.5庫的引用。從主功能區的Developer
選項卡中,從主工具欄中選擇VBA
,然後選擇References
。向下滾動以查找對庫的引用,並選中它旁邊的框。
是的有幾個公式具有相同的形式,但不同的單元格引用。 – Tomulent
使用通過ctrl + h可訪問的find和replace命令,確保您正在搜索單元格的功能。然後可以使用通配符來適應公式的任何偏差。 *用於#通配符,?爲charcter通配符,和〜?或〜*搜索?要麼 *。
事實證明,解決方案是切換到R1C1單元參考。我的工作表是這樣構建的,即每個公式都有相同的結構,只是不同的引用。運氣雖然,他們總是定位在所述方式相同
=((E9-E8)/E8)
成爲
=((R[-1]C-R[-2]C)/R[-2]C)
和
(EXP((LN(E9/E8)/14.32))-1)
成爲
=(EXP((LN(R[-1]C/R[-2]C)/14.32))-1)
在R1C1引用,每式是相同的,從而查找和代表花邊不需要通配符。謝謝那些回答!
我通常處理的方式是使用第二塊軟件。 對於Windows,我使用記事本++,對於OS X我使用Sublime Text 2。
*遍佈整個地方* - 所以沒有任何單個列或行?大概有多少是*全部*? – pnuts
在整個地方意味着有三個不同的列,公式將發生總共31次。由於結構在每種情況下都是相同的,我最終轉向R1C1。看到我的答案。 – Tomulent
轉換爲RC格式是大規模應用這種方式的方式,但不值得(因爲我懷疑)小規模。請注意,我會考慮31小規模!考慮到exa和其他答案,我認爲這是一個值得高分的問題,所以我的+1 - 儘管這隻會讓它回到0恐怕。 – pnuts