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

时间:2016-12-09 11:25:03

标签: excel vba excel-vba excel-formula

  1. =IF(AND(G2<>100,TODAY()>=H2, TODAY()<=I2), E2, " ")
  2. =IF(N2=" ", " ",NETWORKDAYS(H2,TODAY()))
  3. =IF(OR(O2 = " ", O2 <= 0), " ", (O2/N2)*100)
  4. 这三个公式,我想确保在插入工作表时,单元格引用仍会更改以匹配它们所在的行,就像在普通电子表格中一样。任何建议将不胜感激! (为了澄清,我需要使用VBA来填充范围作为代码我使用每次运行时清除工作表。)

4 个答案:

答案 0 :(得分:9)

你可以使用范围对象的FormulaR1C1属性,它使用&#34; R1C1&#34;范围地址的表示法

例如在&#34; A1&#34;中插入您的第一个公式将是:

accounts = [dict(Name="Account%d" % idx) for idx in xrange(5)]

其中 pure Range("A1").FormulaR1C1 = "=IF(AND(RC7<>100,TODAY()>=RC8, TODAY()<=RC9), RC5, "" "")" 将采用当前单元格行索引,而R代表 fixed (不随主机单元位置而变化) )第7列索引引用,依此类推

答案 1 :(得分:2)

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

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 :(得分: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

答案 3 :(得分: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"}]