首页 文章

如何一次替换多行上的公式中的行#?

提问于
浏览
0

所以我有一张跟踪员工 生产环境 力的表 . 每行代表一天,每个人有四列 .

目前我在每周末有一行,为四列中的每一列提取“平均总数” . 我注意到,如果这个人因病假/休假而离开,那么计算错误,因为零或0%被计算到平均值 . 因此,我尝试修改公式,以使用“查找和替换”基于其他平均总计算一个% .

我的问题是我可以使用通配符'Find' =AVERAGE(D***:D***) 但是我无法弄清楚如何替换新公式中的行号而不必更改每行的行号 .

示例: Cell D6 的公式为 =AVERAGE(D1:D5) . 我可以'Find'使用 =AVERAGE(D***:D***) 没有问题 . 我想用 =IF(ISERROR($B6/$A6),0,$B6/$A6) 替换它,但不必输入行号,这样我就可以'Replace All' .

这对大多数人来说可能是显而易见的,但我确实尝试在'Replace'字段中使用Wilcard,但它显然不起作用 . =IF(ISERROR($B***/$A***),0,$B***/$A***) . 我也不能只将公式拖到其他行,因为公式只是每6-7行一次 .

我希望这是足够的信息,但如果我错过了一个细节,请告诉我 . 提前致谢!

1 回答

  • 0

    使用VBA可能会更容易 .

    假设,根据您的示例,要替换的公式在D列中从D6开始,并且此范围内不存在包含单词AVERAGE的其他公式,您可以循环范围,如果在其中找到字符串AVERAGE cell.Formula,它将取代你所说的新公式 . 我已经简化了您的替换配方,因为您只需要一个ISERROR .

    R1C1表示法的好处是您只需要说明一个替换公式,并且当放入单元格时它将正确应用(相对参考) . 此代码将进入标准模块,您可以按F5运行 .

    通过使用searchRange.SpecialCells方法仅传递包含公式的范围中的单元格来传递类型参数xlCellTypeFormulas,从而进一步提高效率 .

    类似于以下内容:

    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
    

相关问题