vba - 根据另一列中月份的开始日期和日期对行值求和

标签 vba excel

附加图片以便更好地理解问题:

enter image description here

这里,A 列包含日期,B 列包含每日金额,C 列包含每天的累计金额。

我想在每个月底停止基于A列的累计计算,并开始重新计算下个月。就像图像所示。

我使用下面的代码来查找月末和当月第一天分配 B=C,但很困惑如何从第二天开始计算该月的累计金额。

如果有人为我提供实现这一目标的逻辑,我将不胜感激。

Sub MonthInt()

    Dim MaxGain As Workbook
    Dim DailyData As Worksheet
    Dim n As Long, J As Long

    Set MaxGain = Excel.Workbooks("MaxGain.xlsm")
    Set DailyData = MaxGain.Worksheets("DailyData")


   n = DailyData.Cells(Rows.Count, "A").End(xlUp).Row


   DailyData.Range("B2") = DailyData.Range("C2")

   For J = 3 To n

   If DailyData.Range("A" & J) = Application.WorksheetFunction.EoMonth(DailyData.Range("A" & J), 0) Then

   DailyData.Range("C" & J + 1) = DailyData.Range("B" & J)


   End If

    Next
   End Sub

最佳答案

为什么需要 VBA 来获得所需的输出?

您可以使用公式来实现所需的输出。

试试这个...

在C2中

=B2

在C3中

=IF(MONTH(A3)<>MONTH(A2),B3,C2+B3)

并将其复制下来。

编辑:

如果你想通过VBA实现公式,你可以尝试这样的事情......

Sub MonthInt()
    Dim MaxGain As Workbook
    Dim DailyData As Worksheet
    Dim n As Long

    Set MaxGain = Excel.Workbooks("MaxGain.xlsm")
    Set DailyData = MaxGain.Worksheets("DailyData")

    n = DailyData.Cells(Rows.Count, "A").End(xlUp).Row

    With DailyData
        .Range("C2").Value = .Range("B2").Value
        .Range("C3:C" & n).Formula = "=IF(MONTH(A3)<>MONTH(A2),B3,C2+B3)"
        .Range("C3:C" & n).Value = .Range("C3:C" & n).Value
    End With
End Sub

enter image description here

关于vba - 根据另一列中月份的开始日期和日期对行值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48898135/

相关文章:

excel - 在excel中区分零,空白和数字

VBA:在运行时通过用户窗体按钮退出宏会在重新启动宏时导致错误 429

vba - Excel XY 图表(散点图)数据标签无重叠

arrays - 二维数组作为字典的项目

VBA Excel 使用表名检查特定表是否存在

Excel 宏 - 自动电子邮件

excel - 具有 OR 标准的 VBA Countif

vba - 更改 FileDialog 左上角的 Word 图标

css - 获取 CSS 选择器的前一个同级

excel - 运行 powershell 命令时出错