【问题标题】:Excel vba chart- having problems in spliting the series to create multiple seriesExcel vba图表-在拆分系列以创建多个系列时遇到问题
【发布时间】:2020-04-09 15:26:04
【问题描述】:

我录制了宏以运行一个图表,其中该系列不是我所期望的 它正在改变图表中的系列和类别

    Sub Macro13()

 ' Macro13 Macro
 '
 ' Keyboard Shortcut: Ctrl+b
 Dim myString As String
myString = Selection.Address
ActiveSheet.Shapes.AddChart2(227, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range(myString),PlotBy:=xlRows
ActiveChart.Legend.Select
Selection.Delete
End Sub

当我删除图表并运行宏时。得到以下图表

但是想要下面的图表

月份-年份应在 x 轴(类别)上,系列应为 0、1、2、3 等。 以下数据为

series  Sep-10  Oct-10  Nov-10  Dec-10  Jan-11  Feb-11
0   7   8   90  80  110 1
1   5   1   18  36  97  1
2   5   1   18  36  97  1
3   5   1   18  36  97  1
4   5   1   18  36  97  1
5   5   1   18  36  97  1
6   5   1   18  36  97  1
7   5   1   18  36  100 1
8   5   1   18  40  97  1
9   5   7   18  36  97  1
10  5   1   89  36  97  1
11  5   1   18  36  97  1
12  5   1   18  36  97  1
 ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$14") 'was changed to 
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$G$14"), PlotBy:=xlRows then it added the series name to it but got like this with series included in x-axis

当我录制宏时,这是我选择并删除了图例的图表。

【问题讨论】:

  • 我对 VBA 方面的事情并不积极,但我想我会和你一起仔细检查几件事。 1)您使用的是折线图还是 XY 散点图? 2)您的日期数字是否格式化为看起来像字符串,或者它们是实际的字符串?您可以使用 =isnumber(A2) 之类的东西进行测试。
  • 折线图,它是数字,因为 =isnumber(A2) 导致 TRUE
  • 把左上角的Series这个词去掉。创建图表后,您可以将其添加回来。

标签: excel vba


【解决方案1】:

试试这个。

Sub test()
    Dim obj As ChartObject, Cht As Chart
    Dim Ws As Worksheet
    Dim Srs As Series
    Dim rngDB As Range, rngHead As Range
    Dim rng As Range

    Set Ws = ActiveSheet
    With Ws
        Set rngHead = .Range("b1", "g1")
        Set rngDB = .Range("a2", "a14")
    End With
    Set obj = Ws.ChartObjects.Add(400, 200, 600, 400)
    Set Cht = obj.Chart
    With Cht
        .HasLegend = False
        .HasTitle = True
        .ChartType = xlLineMarkers
        With .ChartTitle
            .Characters.Text = "Chart Title"
            .Characters.Font.Size = 12
        End With
        For Each rng In rngDB
            Set Srs = .SeriesCollection.NewSeries
            With Srs
                .Name = rng
                .XValues = rngHead
                .Values = rng.Offset(, 1).Resize(1, 6)
            End With
        Next rng
    End With
End Sub

根据动态范围形成的图表。

Sub setChart()
    Dim obj As ChartObject, Cht As Chart
    Dim Ws As Worksheet
    Dim Srs As Series
    Dim rngDB As Range, rngHead As Range
    Dim rng As Range
    Dim rngChart As Range
    Dim r As Integer, c As Integer

    Set Ws = ActiveSheet
    Set rngChart = Selection
    r = rngChart.Rows.Count - 1
    c = rngChart.Columns.Count - 1
    If r < 1 Or c < 1 Then
        MsgBox "set the range correctly!"
        Exit Sub
    End If


    With rngChart
        Set rngHead = .Range("b1").Resize(1, c)
        Set rngDB = .Range("a2").Resize(r)
    End With
    Set obj = Ws.ChartObjects.Add(400, 200, 600, 400)
    Set Cht = obj.Chart
    With Cht
        .HasLegend = False
        .HasTitle = True
        .ChartType = xlLine
        With .ChartTitle
            .Characters.Text = "Chart Title"
            .Characters.Font.Size = 12
        End With
        For Each rng In rngDB
            Set Srs = .SeriesCollection.NewSeries
            With Srs
                .Name = rng
                .XValues = rngHead
                .Values = rng.Offset(, 1).Resize(1, c)
            End With
        Next rng
    End With
End Sub

【讨论】:

  • 上述工作但我正在努力实现 - 当用户指向/突出显示范围时,它应该通过宏生成图表。有没有办法将范围值偏移到 b1 以使“系列”不出现在图表中
  • @viji, 什么意思是“有办法将范围值偏移到 b1 以便“系列”不出现在图表中“
  • 我的意思是不要选择 b1。如果用户选择范围说 A1:G14。我正在将代码更改为Dim myString As String myString = Selection.Address ActiveChart.SetSourceData Source:=Range(myString) , PlotBy:=xlRows rngHead 值是否可以更改为从 b1 开始。因此,可以从我的最后一张照片中删除系列出现在 x 轴上的照片。因为我想通过选择范围并运行宏来尽可能地自动化应该生成图表
  • @viji,添加了基于范围创建灵活图表的内容。
【解决方案2】:
  1. 确保左上角的单元格为空白

  1. 开始录制宏
  2. 选择您的数据范围

  1. 插入您选择的图表样式

  1. 右键单击图表并选择“选择数据..”

  1. 左键单击“切换行/列”按钮

  1. 根据自己的喜好格式化图表
  2. 将文本添加到左上角

  1. 停止录制

【讨论】:

  • 您可能仍需要指定PlotBy
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2017-10-04
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多