【问题标题】:VBA Create chart on filtered dataVBA 在过滤后的数据上创建图表
【发布时间】:2019-02-18 23:34:47
【问题描述】:

我将来自不同来源的数据集组合到一张 Excel 工作表中,我的目标是自动创建图表。但是,根据工作表上复选框的状态,图表在这两种状态下都应该只包含一组经过过滤的表格。

为了给你更好的印象,我的表格是这样的:

因此,当检查框时,请过滤G列中的数据从剩余行构建图表。如果未选中,则过滤其他数字等。

S 列中的值由公式计算得出。所以总的来说,我的方法是这样的:

Sub Analysis()

Dim ws As Worksheet
Set ws = ActiveSheet

'Clear worksheet data
ws.Range("A2:R" & CStr(ws.UsedRange.Rows.Count)).Clear

'Copy data from source files to active sheet

Dim lngRows as long
lngRows = ws.UsedRange.Rows.Count

'##########################################################################
'Apply filters according to checkbox on sheet
'If only supplier parts checked, filter according to column "Beschaffungsart"

'Has checkbox been checked to only regard parts from supplier?
Dim onlySupplierParts As Boolean
onlySupplierParts = CBool(ws.Cells(9, ColC2N("U")).Text = "WAHR")

If onlySupplierParts Then
    ws.Range("$A$1:$S$" & CStr(lngRows).AutoFilter Field:=1
    ws.Range("$A$1:$S$" & CStr(lngRows).AutoFilter Field:=17, Criteria1:="F"
Else
    'don't filter for supplier parts, only filter empty rows
    ws.Range("$A$1:$S$" & CStr(lngRows).AutoFilter Field:=17
    ws.Range("$A$1:$S$" & CStr(lngRows).AutoFilter Field:=1, Criteria1:="<>"

    'ATTENTION: if not filtered for supplier parts, filter accordingly
    ws.Range("$A$1:$S$" & CStr(lngRows).AutoFilter Field:=7, Criteria1:=Array("101", "102", "103"), Operator:=xlFilterValues
End If
'##########################################################################


'Sort retrieved data according to date column
[...]

'Apply sum formula to column S
Range("S2").Select
ActiveCell.FormulaR1C1 = "=RC[-7]"
Range("S3").Select
ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-7]"
Range("S3").Select
Selection.AutoFill Destination:=Range("S3:S" & CStr(Worksheets("Warenbewegungen").UsedRange.Rows.Count - 4)), Type:=xlFillDefault

'Delete old chart
Dim chtobj As ChartObject
For Each chtobj In ws.ChartObjects
   chtobj.Delete
Next chtobj

'Add chart
Dim rng As Range
Set rng = ws.Range("B6:P70")
Set chtobj = ws.ChartObjects.Add(Left:=rng.Left, Width:=rng.Width, Top:=rng.Top, Height:=rng.Height)
chtobj.Chart.ChartType = xlLine
chtobj.Chart.HasTitle = True
chtobj.Chart.ChartTitle.Text = "Verlauf Lagerbestand"

With chtobj.Chart.SeriesCollection.NewSeries
   .Name = "Progress over time"
   .Values = ws.Range("S2:S" & CStr(lngRows))
   .XValues = ws.Range("I2:I" & CStr(lngRows))
End With

End Sub

现在我的问题是图表包含的范围不限于应用过滤器后仍然可见的单元格。

我曾想过将整个数据集保存在一个数组中并“手动”过滤它,但我确实觉得这非常低效。对该主题的研究表明,应该有某种使用 xlSpecialCells 的解决方案,但是我并不完全清楚在这种情况下它会是什么样子:/

我确信有一个优雅的解决方案,我感谢任何提示。 感谢您的宝贵时间和帮助!

【问题讨论】:

    标签: excel vba charts


    【解决方案1】:

    默认情况下,图表不会在表格的隐藏行中绘制数据。只需使用表格的所有行制作图表,过滤表格时,隐藏某些行,这些行不会被绘制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多