【发布时间】: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 的解决方案,但是我并不完全清楚在这种情况下它会是什么样子:/
我确信有一个优雅的解决方案,我感谢任何提示。 感谢您的宝贵时间和帮助!
【问题讨论】: