首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何一次替换多行公式上的row#?

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

Stack Overflow用户
提问于 2017-10-22 04:00:43
回答 1查看 739关注 0票数 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行只有一次。

我希望这是足够的信息,但如果我遗漏了一个细节,请告诉我。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-22 09:15:26

对于VBA来说,这可能更容易。

假设,如您的示例所示,要替换的公式位于从D6开始的D列中,并且在此范围中没有包含单词AVERAGE的其他公式,则可以循环该范围,如果字符串平均值在cell.Formula中找到,它将替换为您所述的新公式。我简化了你的替换公式,因为你只需要一个ISERROR。

R1C1表示法的好处是,您只需声明一个替换公式,当将它放置在单元格中时,它将正确应用(相对引用)。这段代码将放在一个标准模块中,您将按下F5来运行。

通过searchRange.SpecialCells方法传递类型参数xlCellTypeFormulas,仅以包含公式的单元格为目标,进一步提高了效率。

如下所示:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46870363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档