首页 > 解决方案 > 根据每月更改的轴标签更新图表上的条形颜色

问题描述

我的图表衡量因子回报,将最高回报因子放在图表顶部。由于订单可能每月更改,我想根据因子顺序动态调整颜色。

我想遍历每个条,将因子名称与我的 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

图表和因子名称

RGB 代码

标签: excelvba

解决方案


您的代码正在移动到下一个单元格,因为一旦找到系列并更改颜色,if 语句就会结束并且循环将其强制到 Next c。

两种选择:

  1. 为“c”循环中的每个系列创建一个 if 语句,以便在找到并更改该系列后,它会检查下一个 if 语句。
  2. 使用 'select case' 代替 'c' For 循环。比使用一堆 if 语句更容易。

推荐阅读