如何在Excel图表中显示隐藏行,而不是隐藏列?

如何在Excel图表中显示隐藏行,而不是隐藏列?,excel,vba,Excel,Vba,有没有办法使Excel图表能够在隐藏行而不是隐藏列中打印数据?我已经知道如何在右键单击图表时使用“选择数据”选项转到“隐藏和空单元格”选项,该选项提供了“在隐藏的行和列中显示数据”的选项。然而,我找不到一种方法来显示隐藏行中的数据,而不同时显示隐藏列中的数据,我希望有人能够建议一种VBA解决方案 非常感谢, 杰夫我刚刚为你准备好了这个。作为警告,使用图表可能非常棘手。此代码仅适用于某些类型的图表,您可能需要进行一些调整才能使用特定的数据集 Option Explicit Sub RemoveH

有没有办法使Excel图表能够在隐藏行而不是隐藏列中打印数据?我已经知道如何在右键单击图表时使用“选择数据”选项转到“隐藏和空单元格”选项,该选项提供了“在隐藏的行和列中显示数据”的选项。然而,我找不到一种方法来显示隐藏行中的数据,而不同时显示隐藏列中的数据,我希望有人能够建议一种VBA解决方案

非常感谢,


杰夫

我刚刚为你准备好了这个。作为警告,使用图表可能非常棘手。此代码仅适用于某些类型的图表,您可能需要进行一些调整才能使用特定的数据集

Option Explicit

Sub RemoveHiddenColumns()

Dim myChart As ChartObject
Set myChart = ActiveSheet.ChartObjects("Chart 1") 'place in here whichever chart you need to reference, asssumes the chart is on the activesheet

myChart.Activate 'first activate the chart

Dim i As Integer

For i = 1 To ActiveChart.SeriesCollection.Count 'loop through each series

    Dim strText As String, strCol As String, strSht As String, intCol As Integer

    strText = Split(ActiveChart.SeriesCollection(i).Formula, ",")(2) 'extract sheet name and column of series
    strSht = Split(strText, "!")(0) 'get sheet name of series
    strCol = Split(strText, "!")(1) 'get column range of series

    Dim wks As Worksheet
    Set wks = Worksheets(strSht)

    If wks.Range(strCol).EntireColumn.Hidden = True Then 'if the column is hidden
        ActiveChart.SeriesCollection(i).Delete 'remove the series
    End If

Next


End Sub

我刚为你准备好这个。作为警告,使用图表可能非常棘手。此代码仅适用于某些类型的图表,您可能需要进行一些调整才能使用特定的数据集

Option Explicit

Sub RemoveHiddenColumns()

Dim myChart As ChartObject
Set myChart = ActiveSheet.ChartObjects("Chart 1") 'place in here whichever chart you need to reference, asssumes the chart is on the activesheet

myChart.Activate 'first activate the chart

Dim i As Integer

For i = 1 To ActiveChart.SeriesCollection.Count 'loop through each series

    Dim strText As String, strCol As String, strSht As String, intCol As Integer

    strText = Split(ActiveChart.SeriesCollection(i).Formula, ",")(2) 'extract sheet name and column of series
    strSht = Split(strText, "!")(0) 'get sheet name of series
    strCol = Split(strText, "!")(1) 'get column range of series

    Dim wks As Worksheet
    Set wks = Worksheets(strSht)

    If wks.Range(strCol).EntireColumn.Hidden = True Then 'if the column is hidden
        ActiveChart.SeriesCollection(i).Delete 'remove the series
    End If

Next


End Sub

可能有更好的方法,但是您可以从头开始创建图表,并循环遍历数据范围中的列,选择只添加可见列。或者,您可以选中
显示隐藏行和列中的数据
,并使用VBA循环查看序列值,以查看该列是否隐藏,如果隐藏,则从图表中删除该序列。谢谢Scott。这听起来绝对值得一试。不过,我不太确定如何创建这样的代码。对于您建议的第二个选项,您是否可以提供一些通用代码,假设D:AE列都已填充,并且在不同的场景下,不同的列将被隐藏?可能有更好的方法,但您可以从头开始创建图表,并在数据范围内的列之间循环,选择仅添加可见列。或者,您可以选中
显示隐藏行和列中的数据
,并使用VBA循环查看序列值,以查看该列是否隐藏,如果隐藏,则从图表中删除该序列。谢谢Scott。这听起来绝对值得一试。不过,我不太确定如何创建这样的代码。假设D:AE列都已填充,并且在不同的场景下,不同的列将被隐藏,那么您是否可以为您建议的第二个选项提供一些通用代码?非常感谢。这是一个巨大的帮助,我真的很感谢你的努力!这是一个很好的问题。我喜欢解决它:)非常感谢。这是一个巨大的帮助,我真的很感谢你的努力!这是一个很好的问题。我喜欢解决它:)