【问题标题】:While loop until a condition is met for every cell in a columnWhile 循环,直到列中的每个单元格都满足条件
【发布时间】:2019-12-04 01:03:22
【问题描述】:

问题:将“周期性”值(使用嵌套 if 语句)添加到“草稿日期”,直到日期大于或等于“截止日期”。对列中的所有单元格重复此操作。

参考示例图像:在单元格 S28 (5/09/2019) 中,它已应用“P28+14”公式,但调整后的日期 (19/09/2019) 仍小于截止日期(2019 年 11 月 25 日)。宏应重复此周期公式,直到调整后的日期达到 28/11/2019(5 次额外迭代)。

我尝试使用 Do While 循环,其中“更改基线”循环中的值仍为“是”...但由于缺乏 VBA 经验,我没有成功。

单元格 S4 中的示例周期公式:

=IF($G4="Weekly",P4+7,
   IF($G4="Fortnightly",P4+14,
     IF($G4="Monthly",EDATE(P4,1),
       IF($G4="2-Monthly",EDATE(P4,2),
        IF($G4="Quarterly",EDATE(P4,3),
          IF($G4="6-Monthly",EDATE(P4,6),"No"))))))

VBA 中的示例周期公式:

"=IF(RC7=""Weekly"",RC[-3]+7,IF(RC7=""Fortnightly"",RC[-3]+14,IF(RC7=""Monthly"",EDATE(RC[-3],1),IF(RC7=""2-Monthly"",EDATE(RC[-3],2),IF(RC7=""Quarterly"",EDATE(RC[-3],3),IF(RC7=""6-Monthly"",EDATE(RC[-3],6),""No""))))))"

【问题讨论】:

  • 你的代码在哪里?你能编辑你的问题并发布你到目前为止的内容吗?
  • 您好,我相信发布我的代码不会增加任何价值,因为这是我第一次编写 VBA 代码,感谢您的回复! :)
  • 我相信,如果您不发布代码,您将无济于事。该站点为那些表明他们试图自己解决问题的人提供帮助。如果没有您的代码以及您哪里出错了,您希望任何人提供帮助吗?我们不会为您编写代码...
  • 感谢您的评论,我已经用我目前(非常失败)的尝试编辑了这个问题!
  • 您希望宏为您创建一个公式,还是希望 S 列中的确切计算日期?

标签: excel vba


【解决方案1】:

创建一个函数,它会为您提供比截止日期更多的日期,而不是使用公式,这样您就可以在我们的公式或您的子例程中使用此函数。

Function getModifiedDate(date,cutoff,periodicity)
  while date<cutoff
    if periodicity="Monthly" then
        date=date+ 1 month 'your logic to make it add a month (+1 will add a day)
    'elseif periodicity='....
    '....
    'and so on...
    end if
  wend
  getModifiedDate=date
end Function

现在在您的子例程中,循环遍历您想要的单元格,并使用之前定义的函数。

或直接使用 S 列中的公式 =getModifiedDate(P5,P$1,Q5) 你应该得到修改后的日期。

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2021-12-24
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多