对于这个问题,我提出了三种可能的解决方案。
- 将您的数据表转换为数据透视表并使用数据透视图(目前仅在 Windows 版本中可用,如果您使用的是 Mac,请见谅)。
- 使用一点 VBA 来隐藏空行。
- 使用一点 VBA 来修改图表上显示的数据。
示例数据设置
尽管您提供了数据的屏幕截图,但要将其转换为测试用例来演示这三种解决方案并不容易。因此,我将这个非常简单的设置拼凑在一起。
- A 列包含可能的“用户”列表。
- 单元格 D1 是用于更改 B 列和 C 列内容的用户条目。
- B 列包含实际的“用户”。它是用计算的
=IF(A2<=$D$1,A2,"")
- C 列包含与“用户”相关的数据。它是用计算的
=IF(B2<>"",10,"")
- 图表将添加到工作表中。
下面是示例设置的屏幕截图,其中包括所有潜在用户。(注:是Sheet1)
下面是示例设置的屏幕截图,其中仅包括潜在用户 A 到 E。
第二张图片中的空白是我们试图解决的问题。
解决方案 1:制作数据的数据透视表
- 选择所有相关数据,在本例中为
B1:C12
。
- 选择插入 -> 数据透视表
- 在“创建数据透视表”对话框中,确保选中“新建工作表”,然后单击“确定”。
- 在数据透视表上,将“用户”字段放在“行”中,将“总计”字段放在“值”中。为“总计”字段选择值字段设置...,并确保它使用总和。
- 在数据透视表中,选择行标签下拉列表、标签过滤器、大于...。在对话框中键入“”,然后选择“确定”。
- 从数据透视表工具 -> 分析,选择数据透视图。从对话框中选择条形图。
下面是数据透视表的屏幕截图。
在包含数据的选项卡上,将最后一个潜在用户从 E 更改为 G。在数据透视表上,刷新数据。
下面是刷新后的数据透视表的屏幕截图。
解决方案 2:使用 VBA 隐藏空行
下面的代码附加到工作表上可见的按钮上。(nb还有其他方法可以激活代码,例如更改事件,但这将取决于此答案范围之外的许多因素)。
Sub HideRows()
Dim AllCatRange As Range
Set AllCatRange = Worksheets("Sheet1").Range("B2:B12")
Dim iLoop As Long
For iLoop = 1 To AllCatRange.Rows.Count
If AllCatRange.Cells(iLoop, 1) = "" Then
AllCatRange.Cells(iLoop, 1).EntireRow.Hidden = True
Else
AllCatRange.Cells(iLoop, 1).EntireRow.Hidden = False
End If
Next iLoop
Set AllCatRange = Nothing
End Sub
下面是添加了按钮的数据选项卡的屏幕截图。
单击按钮后,它现在看起来像这样......
此代码将在包含数据时展开行,并在不包含数据时折叠行。
这种方法的一个潜在问题是,如果图表覆盖这些行,则展开/折叠行将改变图表的大小。
解决方案3:使用VBA修改图表
下面的代码附在一个按钮上,用于在源数据更改后修改图表。
Sub ModifyChart()
Dim AllCatRange As Range
Set AllCatRange = Worksheets("Sheet1").Range("B2:B12")
Dim lastRow As Long
lastRow = 1
Dim iLoop As Long
For iLoop = 1 To 11
If AllCatRange.Cells(iLoop, 1) <> "" Then
lastRow = lastRow + 1
End If
Next iLoop
Dim PlotCatRange As Range
Set PlotCatRange = Worksheets("Sheet1").Range("B2:B" & lastRow)
Dim PlotSerRange As Range
Set PlotSerRange = Worksheets("Sheet1").Range("C2:C" & lastRow)
Worksheets("Sheet1").ChartObjects(1).Chart.FullSeriesCollection(1).XValues = "=Sheet1!" & PlotCatRange.Address
Worksheets("Sheet1").ChartObjects(1).Chart.FullSeriesCollection(1).Values = "=Sheet1!" & PlotSerRange.Address
Set AllCatRange = Nothing
Set PlotCatRange = Nothing
Set PlotSerRange = Nothing
End Sub
下面是带有新按钮的数据选项卡的屏幕截图。
以下是单击按钮后的选项卡屏幕截图。
包起来
我个人的偏好是在数据修改后使用 VBA 来修改图表,因为这反映了您将手动执行的操作。