2017-10-22 59 views
0

所以我有一張表格來跟蹤員工的工作效率。每行代表一天,每個人有四列。如何一次替換多行上的公式的行號?

目前我在每週結束時都有一行爲四列中的每一列拉出「平均總數」。我注意到,如果這個人因病休假而外出計算,它會計算錯誤,因爲零或0%計算在平均值內。所以我試圖修改公式,以使用Find &替換計算基於其他平均總計的百分比。

我的問題是,我可以使用通配符'查找'=AVERAGE(D***:D***),但我不知道如何替換我的新公式中的行號,而不必更改每行的行號。

例如: Cell D6的公式爲=AVERAGE(D1:D5)。我可以使用=AVERAGE(D***:D***)查找沒有問題。我想用=IF(ISERROR($B6/$A6),0,$B6/$A6)替換它,但不必輸入行號,以便我可以'全部替換'。

這可能對大多數人來說是顯而易見的,但我確實試圖在'替換'字段中使用Wilcard,但它顯然不會以這種方式運行。 =IF(ISERROR($B***/$A***),0,$B***/$A***)。我也不能只將公式拖到其他行,因爲公式每6-7行只有一次。

我希望這是足夠的信息,但如果我錯過了一個細節請讓我知道。提前致謝!

+0

類型在公式中。只要列或行參考字母/數字前面沒有$,字母或數字就會隨着它被複制而改變 –

+0

如果沒有看到數據佈局,就很難知道你需要什麼。 您可以顯示一些示例數據,以便我們可以進一步幫助嗎? – ian0411

回答

0

使用VBA可能會更容易。

假設,根據您的示例,要替換的公式在D6開始的D列中,並且該範圍中不存在其他包含字AVERAGE的公式,您可以循環範圍,並且如果字符串AVERAGE是在cell.Formula中找到的,它將會替換你所陳述的新公式。我已簡化了您的替換公式,因爲您只需要一個ISERROR。

R1C1表示法的優點是您只需要聲明一個替換公式,並且它將在放置在單元格中時正確應用(相對引用)。此代碼將放入標準模塊中,然後按F5運行。

通過僅針對包含公式的範圍中的單元格,通過傳遞類型參數xlCellTypeFormulas的searchRange.SpecialCells方法實現了一些更高的效率。

類似以下內容:它適用,然後只需將它複製向下的第一行中

Sub ReplaceFormula() 
    Dim wb As Workbook 
    Dim ws As Worksheet 

    Set wb = ThisWorkbook 
    Set ws = wb.Worksheets("Sheet1") ' change as appropriate to your sheet name 

    Dim lastRowInColD As Long 

    lastRowInColD = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row 

    Dim searchRange As Range 
    Dim cell As Range 

    Set searchRange = ws.Range(ws.Cells(6, "D"), ws.Cells(lastRowInColD, "D")).SpecialCells(xlCellTypeFormulas) 

    For Each cell in searchRange.Cells 
     If Instr(1, cell.Formula, "AVERAGE") > 0 Then cell.FormulaR1C1 = "=IFERROR(RC[-2]/RC[-3],0)" 
    Next cell 

End Sub 
+0

是的!這工作完美!我從來沒有聽說過R1C1?我花了幾個小時在網上搜索我的問題的答案,並最終放棄並來到這裏發佈求助。我一直可以使用互聯網來教自己特定的宏,或者如何用VBA創建用戶表單,但我低估了它的真棒!非常感謝! – IL0v33xc3L

+0

我很激動!我只是用你的代碼來改變我的所有'= IF(ISERROR =',這是我之前手動完成的,我只是在幾分鐘內完成了整個表格! – IL0v33xc3L

+0

VBA功能強大,可以簡化很多事情。 – QHarr