excel - 使用 VBA 更改图表范围
问题描述
每次运行代码时,我都想将图表的范围向右移动一列。所以最小范围向右移动一个,最大值也向右移动,这意味着计数是相同的。
示例:我在单元格 P13-U13 中有一个过去 6 周的销售额图表,我只想查看 6 周的数据,所以当我添加新的第 7 周时,图表应该在单元格 Q13-V13 中显示数据。(共 6 周)
我找到了这段代码,它每次运行时都会在图表中添加一个额外的列。意思是第一次运行它显示第 1-7 周,第二次运行 1-8,下一个 1-9,我希望它显示 2-7、3-8、4-9 等。我的想法是更改代码,使左侧也向右移动一个。但我还不能让它工作。
Sub ChartRangeAdd()
On Error Resume Next
Dim oCht As Chart, aFormulaOld As Variant, aFormulaNew As Variant
Dim i As Long, s As Long
Dim oRng As Range, sTmp As String, sBase As String
Set oCht = ActiveSheet.ChartObjects(1).Chart
oCht.Select
For s = 1 To oCht.SeriesCollection.count
sTmp = oCht.SeriesCollection(s).Formula
sBase = Split(sTmp, "(")(0) & "(<FORMULA>)" ' "=SERIES(" & "<FORMULA>)"
sTmp = Split(sTmp, "(")(1) ' "..., ..., ...)"
aFormulaOld = Split(Left(sTmp, Len(sTmp) - 1), ",") ' "..., ..., ..."
aFormulaNew = Array()
ReDim aFormulaNew(UBound(aFormulaOld))
' Process all series in the formula
For i = 0 To UBound(aFormulaOld)
Set oRng = Range(aFormulaOld(i))
' Attempt to put the value into Range, keep the same if it's not valid Range
If Err.Number = 0 Then
Set oRng = oRng.Worksheet.Range(oRng, oRng.Offset(0, 1))
aFormulaNew(i) = oRng.Worksheet.Name & "!" & oRng.Address
Else
aFormulaNew(i) = aFormulaOld(i)
Err.Clear
End If
Next i
sTmp = Replace(sBase, "<FORMULA>", Join(aFormulaNew, ","))
Debug.Print "Series(" & s & ") from """ & oCht.SeriesCollection(s).Formula & """ to """ & sTmp & """"
oCht.SeriesCollection(s).Formula = sTmp
sTmp = ""
Next s
Set oCht = Nothing
End Sub
(链接:VBA:修改图表数据范围)
谢谢!
解决方案
推荐阅读
- google-sheets - 在谷歌电子表格中查找(CTRL+F)
- r - summarise(n=n()) 返回“评估错误:不应直接调用此函数。” 即使没有加载 plyr
- linux - 重击。读取符号之间的输入“单词”字符串
- javascript - subscription.unsubscribe() 和 subscription.remove() 有什么区别?
- python - 使用 selenium 时 Python 文件对话框冻结问题
- javascript - FullCalendar - 多个 Google 日历
- java - Java并发:可重置启用/禁用等待条件
- javascript - 我收到 SyntaxError:WordPress 主题中的解析器错误
- r - spatstat 不均匀 K-、F- 和 G- 函数中的意外行为
- python - 如何用特定键而不是键盘中断异常停止无限循环?