根据单元格标准通过VBA插入动态公式

时间:2014-04-05 14:48:55

标签: excel vba dynamic formula

我目前正在研究Excel中的某些东西,我需要在某些单元格中使用某些公式,但我不想仅仅因为显而易见的原因而自动填充整个列。我有以下VBA代码,如果适当的字段(H)等于否,则正确插入公式。

我的问题是,我似乎找不到根据行号更新公式的方法。只有使用“8”的实例,行号需要是动态的并且基于行更新,其余选项是静态的。任何帮助将不胜感激。

这是当前的代码 - 我将继续尝试,同时尝试找到一种方法。

    Dim x As Long
For x = 1 To 3008
    If InStr(1, Sheet1.Range("$H$" & x), "No") <> No Then
        Sheet1.Range("$K$" & x) = "=IF($C8="""",IF($B8="""","""",WORKDAY($B8,3,Admin!$B$5:$B$28)),WORKDAY($C8,3,Admin!$B$5:$B$28))"
        Sheet1.Range("$L$" & x) = "=IF($H8=""No"",IF($B8="""","""",IF($C8="""",IF($E8=""Ulster Sterling"",IF($B8="""","""",WORKDAY($K8,10)),IF($E8=""Ulster Euro"",IF($B8="""","""",WORKDAY($K8,10)),WORKDAY($K8,15))),WORKDAY($K8,10))),"""")"
        Sheet1.Range("$M$" & x) = "=IF($H8=""No"",IF(OR($L8=Admin!$B$5,$L8=Admin!$B$6,$L8=Admin!$B$8,$L8=Admin!$B$9,$L8=Admin!$B$10,$L8=Admin!$B$11,$L8=Admin!$B$13,$L8=Admin!$B$14,$L8=Admin!$B$16,$L8=Admin!$B$17,$L8=Admin!$B$18,$L8=Admin!$B$19,$L8=Admin!$B$21,$L8=Admin!$B$22,$L8=Admin!$B$24,$L8=Admin!$B$25,$L8=Admin!$B$26,$L8=Admin!$B$27)=TRUE,WORKDAY($L8,-1),IF(OR($L8=Admin!$B$7,$L8=Admin!$B$12,$L8=Admin!$B$15,$L8=Admin!$B$20,$L8=Admin!$B$23,$L8=Admin!$B$28)=TRUE,WORKDAY($L8,-2),$L8)),"""")"
        Sheet1.Range("$N$" & x) = "=IF($H8=""No"",IF($B8="""","""",WORKDAY($M8,10)),"""")"
        Sheet1.Range("$O$" & x) = "=IF($H8=""No"",IF(OR($N8=Admin!$B$5,$N8=Admin!$B$6,$N8=Admin!$B$8,$N8=Admin!$B$9,$N8=Admin!$B$10,$N8=Admin!$B$11,$N8=Admin!$B$13,$N8=Admin!$B$14,$N8=Admin!$B$16,$N8=Admin!$B$17,$N8=Admin!$B$18,$N8=Admin!$B$19,$N8=Admin!$B$21,$N8=Admin!$B$22,$N8=Admin!$B$24,$N8=Admin!$B$25,$N8=Admin!$B$26,$N8=Admin!$B$27)=TRUE,WORKDAY($N8,-1),IF(OR($N8=Admin!$B$7,$N8=Admin!$B$12,$N8=Admin!$B$15,$N8=Admin!$B$20,$N8=Admin!$B$23,$N8=Admin!$B$28)=TRUE,WORKDAY($N8,-2),$N8)),"""")"
        Sheet1.Range("$P$" & x) = "=IF($H8=""No"",IF($B8="""","""",WORKDAY($B8,38)),"""")"
        Sheet1.Range("$Q$" & x) = "=IF($H8=""No"",IF(OR($P8=Admin!$B$5,$P8=Admin!$B$6,$P8=Admin!$B$8,$P8=Admin!$B$9,$P8=Admin!$B$10,$P8=Admin!$B$11,$P8=Admin!$B$13,$P8=Admin!$B$14,$P8=Admin!$B$16,$P8=Admin!$B$17,$P8=Admin!$B$18,$P8=Admin!$B$19,$P8=Admin!$B$21,$P8=Admin!$B$22,$P8=Admin!$B$24,$P8=Admin!$B$25,$P8=Admin!$B$26,$P8=Admin!$B$27)=TRUE,WORKDAY($P8,-1),IF(OR($P8=Admin!$B$7,$P8=Admin!$B$12,$P8=Admin!$B$15,$P8=Admin!$B$20,$P8=Admin!$B$23,$P8=Admin!$B$28)=TRUE,WORKDAY($P8,-2),$P8)),"""")"
    End If
Next

1 个答案:

答案 0 :(得分:0)

为了答案,来自@simoco的评论:

  

两种方式:

     

1)Sheet1.Range("K1:K100").Formula = "=IF(...)"然后循环并删除H列中“否”的单元格中的公式。

     

2)做你现在正在做的事情并调整这样的公式:Sheet1.Range("K" & x) = "=IF($C" & x+7 & "=""""...)