绘制二维折线图

 从B6 C6 D6开始选中3列数据绘制二维折线图。

Sub DrawLineChart()
    Dim ws As Worksheet
    Dim LastRow As Long
    Dim ChartObj As ChartObject
    Dim ChartRange As Range
    Dim SheetName As String
    Dim ChartTitle As String
    Dim FirstUnderscorePos As Long
    Dim SecondUnderscorePos As Long
    
    ' 指定当前工作表
    Set ws = ActiveSheet
    
    ' 找到最后一行数据
    LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    
    ' 定义数据区域:从 B6 到 D 最后一行
    Set ChartRange = ws.Range("B6:D" & LastRow)
    
    ' 获取工作表名称
    SheetName = ws.Name
    
    ' 查找第一个下划线的位置
    FirstUnderscorePos = InStr(1, SheetName, "_")
    
    ' 查找第二个下划线的位置
    SecondUnderscorePos = InStr(FirstUnderscorePos + 1, SheetName, "_")
    
    ' 如果找到第二个下划线,则截取第一个到第二个下划线之间的内容
    If SecondUnderscorePos > 0 Then
        ChartTitle = Left(SheetName, SecondUnderscorePos - 1)
    Else
        ' 如果没有第二个下划线,则使用整个工作表名称
        ChartTitle = SheetName
    End If
    
    ' 删除已有的折线图(避免重复)
    For Each ChartObj In ws.ChartObjects
        ChartObj.Delete
    Next ChartObj
    
    ' 添加一个新的折线图
    Set ChartObj = ws.ChartObjects.Add(Left:=ws.Range("G5").Left, _
                                      Top:=ws.Range("G5").Top, _
                                      Width:=ws.Range("S32").Left - ws.Range("G5").Left, _
                                      Height:=ws.Range("S32").Top - ws.Range("G5").Top)
    
    ' 设置折线图数据
    With ChartObj.Chart
        .SetSourceData Source:=ChartRange
        .ChartType = xlLine ' 设置图表类型为折线图
        .HasTitle = True
        .ChartTitle.Text = ChartTitle ' 设置图表标题为工作表名称的第二个下划线前的内容
        
        ' 设置标签位置为低位置
        .Axes(xlCategory, xlPrimary).TickLabelPosition = xlLow
        
        ' 调整折线宽度,匹配手动效果
        Dim srs As Series
        For Each srs In .SeriesCollection
            srs.Format.Line.Weight = 2.25 ' 设置线条宽度为2.25,接近手动绘制效果
        Next srs
        
        ' 修改坐标轴旁边的数字标签颜色为灰色
        With .Axes(xlCategory, xlPrimary).TickLabels.Font
            .Color = RGB(128, 128, 128)
        End With
        With .Axes(xlValue, xlPrimary).TickLabels.Font
            .Color = RGB(128, 128, 128)
        End With
        
        ' 修改图表绘图区网格线颜色为浅灰色
        With .Axes(xlValue).MajorGridlines.Format.Line
            .ForeColor.RGB = RGB(200, 200, 200)
            .Weight = 0.75 ' 设置网格线线宽
        End With
        
        ' 确保值为0的网格线没有加粗
        Dim Gridline As LineFormat
        Set Gridline = .Axes(xlValue).MajorGridlines.Format.Line
        If .Axes(xlValue).MajorUnit = 0 Then
            Gridline.Weight = 0.75
        End If
        
        ' 去除坐标轴的刻度线
        .Axes(xlCategory).MajorTickMark = xlNone
        .Axes(xlCategory).MinorTickMark = xlNone
        .Axes(xlValue).MajorTickMark = xlNone
        .Axes(xlValue).MinorTickMark = xlNone
        
        ' 设置图例位置为底部
        .Legend.Position = xlLegendPositionBottom
    End With
    
    MsgBox "折线图已绘制完成!", vbInformation
End Sub



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值