Excel 基于单元格条件通过VBA插入动态公式

Excel 基于单元格条件通过VBA插入动态公式,excel,vba,dynamic,formula,Excel,Vba,Dynamic,Formula,我目前正在Excel中做一些工作,我需要某些公式在某些单元格中,但我不想因为明显的原因而自动填充整个列。我有下面的VBA代码,如果适当的字段(H)等于否,它将正确插入公式 我的问题是,我似乎无法找到一种方法使公式根据行号进行更新。只有在使用“8”的情况下,行号才需要是动态的,并根据行进行更新,其余选项都是静态的。任何帮助都将不胜感激 这是当前的代码-我将继续进行实验,同时尝试找到一种方法来完成它 Dim x As Long For x = 1 To 3008 If InStr(1

我目前正在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
尺寸x与长度相同
对于x=1到3008
如果仪表(1,表1.范围($H$”&x),“否”)否,则
表1.范围($K$”&x)==IF($C8=“”),IF($B8=“”,“”),工作日($B8,3,管理员!$B$5:$B$28)),工作日($C8,3,管理员!$B$5:$B$28))”
表1.范围($L$“&x)==IF($H8=”否“)、IF($B8=”)、IF($C8=”)、IF($E8=”阿尔斯特英镑“)、IF($B8=”)、工作日($K8,10))、IF($E8=”阿尔斯特欧元“、IF($B8=”)、工作日($K8,10))、工作日($K8,15))、工作日($K8,10))、”
1.1.1.1.范围(($M($M($M($M($M($M($M(”)和x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)若(或(或(或(或(或(或((((($L8=L8=L8=行政管理!$L8=管理!$B)B)B$B$B$5$B$5,B$5,B$5,$5,$5,$5,$8=L8=L8=L8=L8=L8=行政管理!$B$B$5,$B$B$5,$B$B$5,$6,$6,$8=L8=L8=行政!$B$6,$6,L8=L8=行政!=管理员!$B$26,$L8=管理员!$B$27)=真实,工作日($L8,-1),如果(或($L8=管理员!$B$7,$L8=管理员!$B$12,$L8=管理员!$B$15,$L8=管理员!$B$20,$L8=管理员!$B$23,$L8=管理员!$B$28)=真,工作日($L8,-2),$L8)),“”“
表1.范围($N$”&x)=“如果($H8=”否“)、如果($B8=”、”、工作日($M8,10))、“)
1.1.1.1.1.1范围((($O($O($O($O($O($O($O($O($O($O($O(”)和x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)x)如果(或(或(或(或(或(或(或((((((($N8=8=N8=行政管理!$N8=8=8=管理!$N8=管理!N8=管理!$B$B$B$B$5$B$5$5$5,$5,$5,$5,$B$5,$5,$6,$N8=N8=N8=8=管理!N8=行政!N8=N8=管理!$B$6,$B$B$6$6$6,$=管理员!$B$26,$N8=管理员!$B$27)=真实,工作日($N8,-1),如果(或($N8=管理员!$B$7,$N8=管理员!$B$12,$N8=管理员!$B$15,$N8=管理员!$B$20,$N8=管理员!$B$23,$N8=管理员!$B$28)=真,工作日($N8,-2),$N8)),“”“
表1.范围($P$”&x)=“如果($H8=”否“)、如果($B8=”)、“工作日($B8,38))、”
1.1.1.1.1.1.范围(($Q($Q($Q($Q(””)和x x((($Q($Q($Q($Q($Q(”)和x)x((($Q(($Q(”)和x)x((($Q($Q($Q($Q($Q(”)x)x(=x)是:)如果,)如果(或者(或者(或者)如果)如果)如果)如果(或者(或者((($P8=P8=P8=8=行政管理!$P8=管理!$P8=管理!$P8=管理!$B)5)5)5)B(($B($5)5)5)B$B$B$B$5,B$5,B$5,$5,B$5,$5,$5,$5,$5,$5,$5,$5,$5,$5,$5,$5,=管理员!$B$26,$P8=管理员!$B$27)=真实,工作日($P8,-1),如果(或($P8=管理员!$B$7,$P8=管理员!$B$12,$P8=管理员!$B$15,$P8=管理员!$B$20,$P8=管理员!$B$23,$P8=管理员!$B$28)=真,工作日($P8,-2,$P8)),“”“
如果结束
下一个

为了得到答案,请参考@simoco的评论:

你有两种选择:

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

2) 按照现在所做的操作,调整公式如下:
Sheet1.Range(“K”&x)=“=IF($C”&x+7&“=”)


您可以在不使用
的情况下对x=1到65536进行操作
循环:
Sheet1.Range(“K1:K100”).Formula=“=IF(…)”
和excel自动调整您的所有公式:在
K1
中,它将是
=IF($C8=/code>,在
K2
-
=IF($C9=
等等。顺便问一下,你真的想循环到65536吗?这个链接可能很有趣:如果我这样做,它会将公式放在引用范围列的每个单元格中,我只需要它在声明“否”时才将公式放进去“在该行的H列中。我同意循环到65536是一个坏主意,并会将其调整为仅包括我正在使用的数据范围。有两种方法:1)
Sheet1.range(“K1:K100”).Formula=“=IF(…)”
,然后循环并从H列中“否”的单元格中删除公式。2)做你现在正在做的事情,并像这样调整公式:
Sheet1.Range(“K”&x)==IF($C”&x+7&“=”…)
非常好,非常感谢你的帮助。