excel - 根据每月更改的轴标签更新图表上的条形颜色
问题描述
我的图表衡量因子回报,将最高回报因子放在图表顶部。由于订单可能每月更改,我想根据因子顺序动态调整颜色。
我想遍历每个条,将因子名称与我的 if 语句块中的 RGB 代码匹配,然后移动到下一个条。
会发生什么:代码从第一个栏开始,正确地将栏与因子名称颜色匹配,然后移动到下一个单元格,而不是移动到下一个系列。
Sub update_factor_barcharts()
Dim cht As Chart
Dim i As Long
Dim c As Range
Dim rng As Range
Set cht = ActiveSheet.ChartObjects("Chart 7").Chart
Set rng = ActiveSheet.Range("Q26:Q31")
For i = 1 To cht.SeriesCollection.Count
For Each c In rng.Cells
If c = "Size" Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS19").Value, Range("AT19").Value, Range("AU19").Value)
ElseIf c = "Value" Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS20").Value, Range("AT20").Value, Range("AU20").Value)
ElseIf c = "Mom." Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS21").Value, Range("AT21").Value, Range("AU21").Value)
ElseIf c = "Low Vol." Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS22").Value, Range("AT22").Value, Range("AU22").Value)
ElseIf c = "Quality" Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS23").Value, Range("AT23").Value, Range("AU23").Value)
ElseIf c = "Div. Yield" Then
cht.SeriesCollection(1).Points(i).Interior.Color = RGB(Range("AS24").Value, Range("AT24").Value, Range("AU24").Value)
End If
Next c
Next i
End Sub
解决方案
您的代码正在移动到下一个单元格,因为一旦找到系列并更改颜色,if 语句就会结束并且循环将其强制到 Next c。
两种选择:
- 为“c”循环中的每个系列创建一个 if 语句,以便在找到并更改该系列后,它会检查下一个 if 语句。
- 使用 'select case' 代替 'c' For 循环。比使用一堆 if 语句更容易。
推荐阅读
- ruby-on-rails - Rails 6:如何只加载一次全局变量?
- python - 如何提高python中熵权法的算法效率
- mysql - MYSQL 更新同一张表后如何更新表中的一行?
- c# - 以随机间隔运行函数C#
- html - 暗模式下的 HTML 邮件
- python - Pandas DataFrame 计数函数结果中的重复数据和错误名称
- sql - 最近旅行的乘客
- python-3.x - 在每 N 行中获得最高或不同,然后再次比较它们
- mysql - 在 MySql 中以编程方式更改表
- flutter - 属性 android:requestLegacyExternalStorage 未找到颤振图像选择器