在表格中减去月份值

时间:2018-12-23 23:28:49

标签: vba

我有一个“摘要”表,其中第一列是取值的日期,随后的列仅是数据。 我试图这样做,以便当我按下按钮时输入数据,但是如果月份发生变化,则会插入“总行”(也就是我可以为其设置值的另一行)。

我不知道如何执行if语句月份检查。

尝试搜索所有内容,无法真正找到与此相关的任何东西,只有一堆我不知道如何组装的东西。

Private Sub CommandButton1_Click()

Dim dtbl As ListObject
Dim ss As Worksheet
Dim newrow As ListRow


Set ss = Worksheets("Summary")
Set dtbl = ss.ListObjects("Summary_Table")
Dim last As Long
Dim slast As Long

last = dtbl.Range.Rows.Count
slast = dtbl.Range.Rows.Count - 1

With dtbl
    If Month(.Cells(last, 1)) - Month(.Cells(slast, 1)) = 0 Then
        'do nothing
    Else
        Set newrow = tbl.ListRows.Add     'need to add above, not below
            With newrow
                .Range(1) = 1 'replace with desired values
                .Range(2) = 2
            End With
    End If
End With

结束子

摘要表:

December 5    data1    data2    data3
December 7    data1    data2    data3
...
December 31   data1   data2   data3
TOTAL         SUM(DATA1)   ...   ...
January 3    data1    data2   data3

1 个答案:

答案 0 :(得分:1)

为什么不将数据作为Excel表格来创建带有月小计行的数据透视表?我会将日期字段作为实际的日期字段,但是将其格式设置为想要的样子。还要添加月份和年份字段以帮助以后的分组。您可以使用应用于日期字段的Year和Month函数来创建这些其他列。在开始时正确设置数据可以使这种格式易于维护。

enter image description here

然后仅在与代码关联的工作表中添加按钮以刷新数据透视表?或者,如果这是唯一需要执行的操作,请右键单击刷新。

Worksheets("SheetName").PivotTables("PivotTableName").PivotCache.Refresh

您甚至可以放入一个worksheet_change事件。