附加图片以便更好地理解问题:
这里,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
关于vba - 根据另一列中月份的开始日期和日期对行值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48898135/