VBA折线图,显示3列(3行)的最后5个值

问题描述 投票:0回答:1

我的任务是创建一个图表,以可视化方式显示最后 5 个接受测试的受试者的结果。每个受试者都在 5 个不同的点进行测试,所有这些点都具有相同的极限值,也应该在图表中表示。

让我用一个虚拟表来解释一下:

主题 第1点 第2点 第3点 限制1 限制2
A 0,2 0,1 0,1 1 -1
B 0,3 -0,2 0,2 1 -1
C 0,4 0,2 0,3 1 -1
D 0,3 0,7 0,4 1 -1
E 0,1 0,1 0,5 1 -1
F 0,4 -0,4 0,6 1 -1

该表不断增长,每天都会添加新主题(这已经用 vba 编码)。点数和限制数始终相同。从这张表中,我要做的是绘制一个折线图,每个“点”有三条线。只取最后 5 行(在本例中是从 B 行到 F 行)。

在每个主题图中,两个限制应始终与其中一个点的值一起表示。下面是第 1 点的示例图表:

Chart for point 1

我知道如何在没有 vba 的情况下通过使用偏移函数来实现这一点。但由于某种原因,大多数功能都不适用于我。所以我真的需要用vba来做。问题是我不知道如何选择动态表的最后 5 个。有什么帮助吗?

excel vba dynamic charts
1个回答
0
投票

要更改系列的 X 和 Y 值,您可以写入其属性

XValues
Values
。以下例程将所有系列的数据设置为一系列数据的最后 n 值。它假设所有列都由一个系列表示,并且第一列(在您的情况下为
SUBJECTS
)保存 x 值。

Sub setChartToLastLines(ch As Chart, r As Range, Optional rowCount As Long = 5)
    Dim colData As Range
    With r.CurrentRegion
        Set colData = .Columns(1)
        Debug.Print colData.Address
        If .Rows.Count > rowCount Then
            Set colData = colData.Offset(.Rows.Count - rowCount).Resize(rowCount)
        End If
    End With
    
    With ch
        Dim i As Long
        For i = 1 To .FullSeriesCollection.Count
            .FullSeriesCollection(i).Values = colData.Offset(0, i)
            .FullSeriesCollection(i).XValues = colData
        Next i
    End With
End Sub

您将应修改的图表本身以及数据中的单元格或范围作为参数传递。该例程将计算包含 X 轴最后 n 个值 (

colData
) 的范围。 Y 轴的值使用
Offset
函数检索。

您可以这样称呼它(我的数据和图表在同一张纸上):

Sub test()
    With ThisWorkbook.Sheets(1)
        Debug.Print .ChartObjects.Count
        setChartToLastLines .ChartObjects(1).Chart, .Range("A1"), 5
    End With
End Sub

在写入数据的例程末尾添加此调用,图表应指向最后 5 个条目。

© www.soinside.com 2019 - 2024. All rights reserved.