【问题标题】:Change chart marker color if there is continuous value higher than a baseline value如果连续值高于基线值,则更改图表标记颜色
【发布时间】:2023-04-03 04:25:02
【问题描述】:

如果图表中的值包含超过基线值 0.7 的 3 个连续尖峰,我目前正在创建一个 VBA 宏来更改图表标记的颜色。

例如,在下图中,我创建了一个宏,如果值高于基线值,则将所有标记颜色更改为红色,但如果有 3 个连续值高于基线值,则不会。

我的代码

这是我尝试过的 - 如果值超过 0.7,则将标记颜色更改为红色

Sub Tester()

Dim cht As Chart, s As Series, p As point
Dim vals, x As Integer

    Set cht = ThisWorkbook.Worksheets("mySheet3").ChartObjects("Chart 1").Chart
    Set s = cht.SeriesCollection(1)
    vals = s.Values
    
    For x = LBound(vals) To UBound(vals)
      If vals(x) > 0.7 Then
        With s.Points(x)
            .MarkerBackgroundColor = RGB(255, 0, 0)
            .MarkerForegroundColor = RGB(255, 0, 0)
        End With
      End If
    Next x
    
End Sub

【问题讨论】:

  • 你的代码有什么问题?问题是什么?
  • 我希望代码能够在只有 3 个连续值高于基线值时更改标记颜色,而不是每个都高于基线值。你明白我的意思吗? @Pᴇʜ
  • 如果有超过 3 个连续的,比如 5,你想要所有 5 个红色还是只有前 3 个?
  • 全部 5 个@Pᴇʜ 有可能吗?

标签: excel vba


【解决方案1】:

为此,您需要使用窗口大小来检查始终连续 3 个点(如果它们高于基线),如果它们是着色的,则进一步移动 1 以检查下一个连续 3 个点。

Option Explicit

Sub Tester()
    Dim cht As Chart
    Set cht = ThisWorkbook.Worksheets("mySheet3").ChartObjects("Chart 1").Chart
    
    Dim s As Series
    Set s = cht.SeriesCollection(1)
    
    Dim vals As Variant
    vals = s.Values
    
    Const WindowSize As Long = 3
    Dim Colorize As Boolean
    
    Dim x As Long
    For x = LBound(vals) To UBound(vals)
        If x + WindowSize - 1 <= UBound(vals) Then
            Colorize = True
            Dim w As Long
            For w = x To x + WindowSize - 1
                If Not vals(w) > 0.7 Then
                    Colorize = False
                    Exit For
                End If
            Next w
            If Colorize Then
                For w = x To x + WindowSize - 1
                    With s.Points(w)
                        .MarkerBackgroundColor = RGB(255, 0, 0)
                        .MarkerForegroundColor = RGB(255, 0, 0)
                    End With
                Next w
             End If
        End If
    Next x
End Sub

【讨论】:

  • 天啊,我很感激你帮我解决了所有关于 VBA 的问题。非常感谢您的帮助!
  • @SteveKush 我在Colorize = False 后面放了一个Exit For,这样会更快一些。
  • 好的,会的,先生。非常感谢。
猜你喜欢
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 2019-07-22
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多