Excel VBA从透视组删除空白

时间:2016-03-15 15:53:52

标签: excel vba excel-vba pivot-table

我有一个需要在Excel中旋转的数据集,然后行标签按月分组(行标签是日期)。我有VBA设置来执行枢轴,然后将行标签分组到几个月,但在它分组到几个月之后,我试图获取下拉列表中的(空白)字段以取消选择。我尝试用录制宏来做这件事,但这不起作用;它只是像“< 11/15/15”那样做了。我发现代码应该适用于我的问题,但我一直收到无法找到数据透视项的错误消息。

以下是应该有效的代码。

Dim p_i As PivotItem

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotItems("(blank)").Visible = True
    For Each p_i In .PivotItems
        If p_i.Name = "(blank)" Then
            p_i.Visible = False
        End If
    Next
End With

问题可能在于我是按月分组项目吗?

4 个答案:

答案 0 :(得分:0)

我的解决方案可能不是最优雅的,但您必须将数据透视表项的Visible值更改为TRUE。然后刷新数据透视表(如果关闭自动工作簿计算),然后您可以自由地将Visible值更改为FALSE:

With ActiveSheet.PivotTables("PivotTable1")
    .PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = True
    .RefreshTable
    .PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = False
End With

我还有另一种解决方案(更不优雅):您可以使用日期过滤器从枢轴中删除空白值:

ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlAfter, Value1:="1901-01-01"

这也可以使用标签过滤器(如果你有一个字符串/数字表):

ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotFilters.Add2 Type:=xlCaptionIsGreaterThan, Value1:="0"

希望有所帮助。

答案 1 :(得分:0)

如果您仍然想计算“空白”的值,则可能需要尝试以下代码:

Dim p_i As PivotItem

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotItems("(blank)").Visible = True
    For Each p_i In .PivotItems
        If p_i.Name = "(blank)" Then
            p_i.NumberFormat = ";;;"
        End If
    Next
End With

答案 2 :(得分:0)

int x = vetor[i-1];
int y = vetor[j-1];

答案 3 :(得分:-1)

如果您打开宏录制器并用鼠标单击步骤,我认为您可以得到答案。试一试,看看它是否能满足您的需求。