在另一列

时间:2018-02-21 04:22:46

标签: excel vba excel-vba

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

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

1 个答案:

答案 0 :(得分:3)

为什么需要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