首页 > 解决方案 > 使用VBA替换excel公式中的多个文本

问题描述

早上好,

我正在寻求有关如何使用 VBA - Excel 正确替换公式中的多个条件的帮助。我在宏的开头有一个用户表单,用户将在其中选择他们想要运行报告的月份。我使用上个月的报告作为模板,需要更新公式以相应地反映正确的月份。我希望将公式应用于一整列数据。我将公式中的每个月向前移动一个月,以捕获前四 (4) 个月的数据。

例如:我正在为 AUG 运行报告。我将使用上个月运行的 JUL 报告作为模板。

当前在报告中的公式:

  =sum('JUL18'!$E$19+'JUN18'!$E$19+'MAY18'!$E$19+'APR18'!$E$19)/B6

我希望公式更新为:

  =sum('AUG18'!$E$19+'JUL18'!$E$19+'JUN18'!$E$19+'MAY18'!$E$19)/B6

我目前拥有的代码是:

If FormMonth.Value = "AUG" Then
     Columns("D:D").Select
 Selection.Replace What:="JUL", Replacement:="AUG", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="JUN", Replacement:="JUL", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="MAY", Replacement:="JUN", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="APR", Replacement:="MAY", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="MAR", Replacement:="APR", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="FEB", Replacement:="MAR", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End If

-最终结果如下:

  =sum('AUG18'!$E$19+'AUG18'!$E$19+'JUN18'!$E$19+'MAY18'!$E$19)/B6

公式中的前两个月和最后两个月似乎正确更新,但是 JUN(应该更新到 JUL)跳转到 AUG。就好像它继续循环,直到它到达选择的表格月份。

关于为什么会这样的任何想法?仍在适应 VBA,因此代码可能不是最漂亮的。

标签: excelvba

解决方案


你真的不需要宏,你可以使用间接函数。

您将需要的公式:

'=TEXT(EOMONTH(B2,-1),"MMM") '=SUM(INDIRECT(B5&"!A1"),INDIRECT(B6&"!A1"),INDIRECT(B7&"!A1"))

在此处输入图像描述


推荐阅读