附加图片以便更好地理解问题:
此处,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
答案 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