Vba从D列开始为第一个开始日期往右判断是否有七天的日期,如果有就开始折叠,没有就在数据最后一列往右移到一列计算新开始计算七天的汇总的值
时间: 2024-05-09 16:21:29 浏览: 76
以下是一个实现上述功能的VBA代码示例:
```
Sub FoldData()
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long
Dim startDate As Date, endDate As Date
Dim i As Long, j As Long, k As Long
Dim sumRange As Range
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
For j = 4 To lastCol
If ws.Cells(1, j).Value <> "" Then
startDate = ws.Cells(1, j).Value
endDate = DateAdd("d", 6, startDate)
For i = 2 To lastRow
If ws.Cells(i, j).Value <> "" Then
If ws.Cells(i, j).Value >= startDate And ws.Cells(i, j).Value <= endDate Then
ws.Rows(i).OutlineLevel = 1
ws.Rows(i).ShowDetail = False
Else
Exit For
End If
End If
Next i
Else
Exit For
End If
Next j
Set sumRange = ws.Cells(2, lastCol + 1)
For k = 2 To lastRow
If ws.Cells(k, lastCol).Value <> "" Then
If ws.Cells(k, lastCol).Value >= endDate Then
sumRange.Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(k, j), ws.Cells(k, lastCol)))
Set sumRange = sumRange.Offset(1, 0)
startDate = DateAdd("d", 1, endDate)
endDate = DateAdd("d", 6, startDate)
End If
End If
Next k
End Sub
```
该代码首先定义了一个工作表对象ws,以及最后一行和最后一列的行号和列号。然后在循环中,从第4列开始循环,判断该列是否有开始日期。如果有,就从第二行开始循环,判断该行的日期是否在七天范围内,如果是,则将该行折叠起来。如果该行日期超出七天范围,则跳出循环,进入下一列的判断。如果最后一列没有七天日期范围内的数据,则在数据最后一列往右移动一列,计算新的七天汇总值。
在计算新的七天汇总值时,代码使用了一个名为sumRange的Range对象,用于记录当前需要汇总的单元格位置。在循环中,如果当前行的日期超出了七天范围,则将该行数据从第一列到最后一列求和,并将结果写入sumRange所指向的单元格中。然后将sumRange向下移动一行,并将开始日期和结束日期更新为下一个七天范围。这样就可以依次计算每个七天范围的汇总值了。
阅读全文