繁体   English   中英

我想使用3个Excel公式来填充电子表格中的范围,如何确定单元格随行而变化?

[英]I have 3 excel formulas that I would like to fill ranges in a spreadsheet with, how can I make sure the cells change with the rows?

  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)

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

您可以使用范围对象的FormulaR1C1属性,该属性对范围地址使用“ R1C1”符号

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

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

其中 R将假定当前单元格行索引,而C7表示固定的 (不随宿主单元位置而变化)第七列索引参考,依此类推

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

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数据行最多的那一列,将for i = 1替换for i = 1它必须开始的那一行

您会注意到我在公式的末尾添加了额外的引号,这是必需的,因为必须将VBA中的公式引号括起来...在更多引号中大声笑

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

除了像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

将公式设置为单元格范围时,将调整相对参考:

[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"}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM