首页 文章

我有3个excel公式,我想在电子表格中填写范围,如何确保单元格随行变化?

提问于
浏览
1
  • =IF(AND(G2<>100,TODAY()>=H2, TODAY()<=I2), E2, " ")

  • =IF(N2=" ", " ",NETWORKDAYS(H2,TODAY()))

  • =IF(OR(O2 = " ", O2 <= 0), " ", (O2/N2)*100)

这三个公式,我想确保当它们被插入到工作表中时,单元格引用仍将更改以匹配它们所在的行,就像在普通电子表格中一样 . 任何建议将不胜感激! (为了澄清,我需要使用VBA填充范围,因为我使用的代码每次运行时都会清除工作表 . )

4 回答

  • 2

    您可以使用范围对象的FormulaR1C1属性,该范围对象使用"R1C1"表示法作为范围地址

    例如,在“A1”中插入第一个公式将是:

    Range("A1").FormulaR1C1 = "=IF(AND(RC7<>100,TODAY()>=RC8, TODAY()<=RC9), RC5, "" "")"
    

    其中,纯 R 将采用当前单元格行索引,而 C7 代表固定(不随主机单元位置变化)第7列索引引用,依此类推

  • 9

    如果我正确解释了您的问题,您需要以下内容:

    Option Explicit
    Sub InsertFormula()
    
    Dim i As Long
    Dim n As Long
    
    n = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To n
        Cells(i, 1).Formula = "=IF(AND(G2<>100,TODAY()>=H2, TODAY()<=I2), E2, "" "")"
    Next i
    
    End Sub
    

    将n = ...中的1替换为具有最多行数据的列,将 for i = 1 替换为必须从哪一行开始

    您会注意到我已经在公式的末尾添加了额外的引用,这是必要的,因为VBA中的公式中的引号必须被包含在...更多引号中lol

    将此概念应用于其他公式:)

  • 2

    而不是像 G2 这样的绝对引用,你可以使用一些东西

    .FormulaR1C1 = "=SUM(RC[-2]:R[5]C[-2])"

    其中 RC 引用当前单元格的偏移量(正数:向右或向下,负数:向上或向左) .

    以类似于此的方式使用它:

    Dim c
    For Each c In Selection
        c.FormulaR1C1 = "=SUM(RC[-2]:R[5]C[-2])"
    Next c
    
  • 2

    将公式设置为单元格范围时,会调整相对引用:

    [A1:B2].Formula = "=C$1"     ' now the formula in B2 will become "=D$1"
    

    您还可以一次设置多个公式:

    Range("K2:M9").Formula = Array("=IF(AND(G2<>100,TODAY()>=H2, TODAY()<=I2), E2, "" "")", _
                                   "=IF(N2="" "", "" "",NETWORKDAYS(H2,TODAY()))", _
                                   "=IF(OR(O2 = "" "", O2 <= 0), "" "", (O2/N2)*100)" )
    

    或者每行有不同的公式:

    [A1:Z3] = [{"=1";"=2";"=3"}]
    

相关问题