使用 VBA 根据最近添加的列和上个月结束日期调整现有公式

问题描述 投票:0回答:1

我目前正在构建一个宏来更新每周更新的库存文件。添加了本周的所有新数据后,我需要调整总计列(“MTD Chg”)中的公式,以从上个月的最后一周和添加的最新列中提取数据。我已经能够在“MTD Chg”列中选择正确的单元格,但现在由于“MTD Chg”和上个月日期列范围是动态的,我陷入了困境。

Sub try_to_update_formula()
Sheets("Summary").Select
    Cells.Find(What:="MTD Chg", After:=[A1], LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False).Activate
 Dim rwRng As Range, curCol As Long
    curCol = ActiveCell.Column
Set rwRng = Union(Cells(51, curCol), Cells(52, curCol), Cells(53, curCol), Cells(54, curCol), Cells(58, curCol), Cells(59, curCol), Cells(60, curCol), Cells(61, curCol), Cells(62, curCol), Cells(63, curCol), Cells(64, curCol), Cells(65, curCol), Cells(68, curCol), Cells(69, curCol))
    rwRng.Select

上面的代码搜索带有“MTD Chg”的列,并选择该列中调用的单元格 - 当新的当前周列插入到右侧时,“MTD Chg”列范围每周都会发生变化。在所附照片中,我需要更新公式以从 N51 而不是 M51 提取;单元格 O51 中的新公式为 =L51-N51。随着月份的变化,我将遇到的另一个问题是从上个月的最后一周提取公式更新。例如:在四月第一周更新文件时,“MTD Chg”列公式需要为“三月最后一周列 - 四月第一周列”。

关于如何实现这一目标有什么建议吗?如果您需要更多信息,请告诉我。

example of what my sheet looks like

更新:

我能够弄清楚如何使公式的第二部分适应新添加的列!

rwRng.Formula = "=L51-RC[-1]"

我仍然不确定如何在新的月份开始时从上个月列的最后一周提取公式 - 即,如果当前月份是三月,那么二月列的最后一周需要是“L51”单元格,那么在四月份,三月的最后一周列需要是“L51”单元格。

excel vba dynamic updates
1个回答
0
投票

添加评论中的答案,这应该可以解决公式问题:

With Sheets("Summary")
    Dim curCol As Long:  curCol = .Cells.Find(What:="MTD Chg", After:=[A1], LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Column
    Dim rwRng as Range:  Set rwRng = Union(.Cells(51, curCol), .Cells(52, curCol), .Cells(53, curCol), .Cells(54, curCol), .Cells(58, curCol), .Cells(59, curCol), .Cells(60, curCol), .Cells(61, curCol), .Cells(62, curCol), .Cells(63, curCol), .Cells(64, curCol), .Cells(65, curCol), .Cells(68, curCol), .Cells(69, curCol))
End With
rwRng.FormulaR1C1 = "R[51]C[-1]-RC[-1]"

我使用了一些点符号,因此您实际上是在使用指定工作表中的单元格,而不是不合格的,例如,

Cells()
Sheets(1).Cells()

© www.soinside.com 2019 - 2024. All rights reserved.