zoukankan      html  css  js  c++  java
  • VBA绘制Excel图表



    VBA调试运行进入:

    右键Excel的Sheet - 查看代码 - Microsoft Visual Basic for Applications(VBA)

      为了方便,建议开启“开发工具”栏

    文件 - 选项 - 自定义功能区 - 勾选“开发工具”



    几个例子:

    删除工作表内所有图表

    Sub 删除全部图表()
        ActiveSheet.ChartObjects.Delete
    End Sub
    

    VBA测试例子

    录制一个宏

    ' 录制的创建折线图代码
    Sub 宏12()
    '
    ' 宏12 宏
    '
    
    '
        Range("D1,D2:D16,E1,E2:E16,G1,G2:G16,H1,H2:H16").Select ' 选择数据区域
        Range("H2").Activate
        ActiveSheet.Shapes.AddChart2(227, xlLine).Select        ' 选择插入折线图
        ActiveChart.SetSourceData Source:=Range( _
            "测试Sheet名称!$D$1,测试Sheet名称!$D$2:$D$16,测试Sheet名称!$E$1,测试Sheet名称!$E$2:$E$16,测试Sheet名称!$G$1,测试Sheet名称!$G$2:$G$16,测试Sheet名称!$H$1,测试Sheet名称!$H$2:$H$16" _
            )                                                   ' 图表的数据选区
        Application.CutCopyMode = False                         ' 取消剪切赋值模式
        Application.CutCopyMode = False
        ActiveChart.FullSeriesCollection(1).XValues = "=测试Sheet名称!$B$2:$B$16" ' 选择 X 轴坐标选区
        ActiveChart.SetElement (msoElementLegendRight)          ' 选择图例右边显示
        ActiveChart.ChartTitle.Select
        ActiveChart.ChartTitle.Text = "我是标题"                 ' 设置标题名称
        Selection.Format.TextFrame2.TextRange.Characters.Text = "我是标题"
        With Selection.Format.TextFrame2.TextRange.Characters(1, 4).ParagraphFormat
            .TextDirection = msoTextDirectionLeftToRight
            .Alignment = msoAlignCenter
        End With
        With Selection.Format.TextFrame2.TextRange.Characters(1, 4).Font ' 字体设置
            .BaselineOffset = 0
            .Bold = msoFalse
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.RGB = RGB(89, 89, 89)
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 14
            .Italic = msoFalse
            .Kerning = 12
            .Name = "+mn-lt"
            .UnderlineStyle = msoNoUnderline
            .Spacing = 0
            .Strike = msoNoStrike
        End With
    End Sub
    
    

    简化宏再使用

    由录制得到的内容可以简化后使用:

    Sub 生成图表()
        ActiveSheet.Shapes.AddChart2(227, xlLine).Select        ' 选择插入折线图
        ActiveChart.SetSourceData Source:=Range("测试Sheet名称!$D$1:$D$16,$E$1:$E$16,$G$1:$G$16,$H$1:$H$16")   ' 图表的数据选区
        ActiveChart.FullSeriesCollection(1).XValues = "=测试Sheet名称!$B$2:$B$16" ' 选择 X 轴坐标选区
        ActiveChart.SetElement (msoElementLegendRight)          ' 选择图例右边显示
        ActiveChart.ChartTitle.Text = "我是标题"                 ' 设置标题名称
    End Sub
    

    大量图表可采用for循环

    Sub 批量生成图表()
    Dim numInt, cntInt As Integer
    Dim sheetNameStr, rowStartStr, rowEndStr, titleNameStr As String
    sheetNameStr = "测试Sheet名称":
    cntInt       = 0:
        For numInt = 2 To 500 Step 20
            rowStartStr   = Replace(Str(numInt), " ", ""):           ' 去除数字转字符中的多余空格
            rowEndStr     = Replace(Str(numInt + 19), " ", ""):
            cntInt        = cntInt + 1:
            titleNameStr  = Replace(Str(cntInt * 10), " ", ""):
    
            ' 使用简化的宏
            ActiveSheet.Shapes.AddChart2(227, xlLine).Select:        ' 选择插入折线图
            ActiveChart.SetSourceData Source:=Range(sheetNameStr & _
                "!$D$1,$D$" & rowStartStr & ":$D$" & rowEndStr & _
                ",$E$1,$E$" & rowStartStr & ":$E$" & rowEndStr & _
                ",$G$1,$G$" & rowStartStr & ":$G$" & rowEndStr & _
                ",$H$1,$H$" & rowStartStr & ":$H$" & rowEndStr _
                ):   ' 图表的数据选区
            ActiveChart.FullSeriesCollection(1).XValues = "=" & sheetNameStr & "!$B$" & rowStartStr & ":$B$" & rowEndStr: ' 选择 X 轴坐标选区
            ActiveChart.SetElement (msoElementLegendRight):          ' 选择图例右边显示
            ActiveChart.ChartTitle.Text = "我是标题:" & titleNameStr  ' 设置标题名称
        Next
    End Sub
    

    上面的代码生成效果如下:
    批量生成图表

    注:

    操作 方式
    注释 单引号 '
    多行合并 冒号 :
    分多行书写 末尾用下划线 _
    变量定义 Dim varx,vary As String
    连接字符串变量和字符串 与号 &
    for循环 Dim num As Integer
    for num = 1 To 15 Step 2
    ...循环内容...
    Next



    CSDN上用积分下载的一个例子

    Public Sub CreateChart()
        Dim ws As Worksheet
        Dim myRange As Range
        Dim myChart As ChartObject
        Dim N As Integer
        Dim xmin As Single, xmax As Single, ymin As Single, ymax As Single
        Dim sj As String, X As String, Y As String, A As String, B As String
        Set ws = ThisWorkbook.Worksheets("Sheet1")    '指定数据源工作表
        ws.ChartObjects.Delete     '删除工作表上已经存在的图表
        N = ws.Range("A65536").End(xlUp).Row    '获取数据个数
        X = "数据序列X"    'X坐标轴标题
        Y = "数据序列Y"    'Y坐标轴标题
        A = "A" & 2 & ":A" & N    'X坐标轴数据源
        B = "B" & 2 & ":B" & N    'Y坐标轴数据源
        xmin = Application.WorksheetFunction.Min(ws.Range(A))    'X坐标轴最小值
        xmax = Application.WorksheetFunction.Max(ws.Range(A))    'X坐标轴最大值
        ymin = Application.WorksheetFunction.Min(ws.Range(B))    'Y坐标轴最小值
        ymax = Application.WorksheetFunction.Max(ws.Range(B))    'Y坐标轴最大值
        Set myRange = ws.Range("A" & 1 & ":B" & N)     '图表的数据源
        Set myChart = ws.ChartObjects.Add(100, 30, 400, 250)     '创建一个新图表
        With myChart.Chart
            .ChartType = xlXYScatterSmooth    '指定图表类型
            .SetSourceData Source:=myRange, PlotBy:=xlColumns    '指定图表数据源和绘图方式
            .HasTitle = True    '有标题
            .ChartTitle.Text = "制作图表示例"
            With .ChartTitle.Font    '设置标题的字体
                .Size = 16
                .ColorIndex = 3
                .Name = "华文新魏"
            End With
            .Axes(xlCategory, xlPrimary).HasTitle = True    'X坐标轴有图表标题
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = X
            .Axes(xlValue, xlPrimary).HasTitle = True    'Y坐标轴有图表标题
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Y
            With .Axes(xlCategory)
                .MinimumScale = xmin      'X坐标轴最小刻度
                .MaximumScale = xmax      'X坐标轴最大刻度
            End With
            With .Axes(xlValue)
                .MinimumScale = ymin      'Y坐标轴最小刻度
                .MaximumScale = ymax      'Y坐标轴最大刻度
            End With
            With .ChartArea.Interior    '设置图表区的颜色
                .ColorIndex = 15
                .PatternColorIndex = 1
                .Pattern = xlSolid
            End With
            With .PlotArea.Interior    '设置绘图区的颜色
                .ColorIndex = 35
                .PatternColorIndex = 1
                .Pattern = xlSolid
            End With
            With .SeriesCollection(1)
                With .Border    '设置第一个数据系列的格式
                    .ColorIndex = 3
                    .Weight = xlThin
                    .LineStyle = xlDot
                End With
                .MarkerStyle = xlCircle
                .Smooth = True
                .MarkerSize = 5
            End With
            .Legend.Delete     '删除图例
        End With
        Set myRange = Nothing
        Set myChart = Nothing
        Set ws = Nothing
    End Sub
    

    VBA数组

    Sub tests()
    Dim  my_array()
        my_array  = [{"111", "222", "333", "world"}]
    
        my_array(1) = "111"
        my_array(2) = "222"
        my_array(3) = "333"
        my_array(4) = "world"
    End Sub
    
  • 相关阅读:
    jquery中ajax请求的使用和四个步骤示例
    jzoj6094
    2019.03.27【GDOI2019】模拟 T3
    AGC019F
    浅谈高维前缀和
    刷题清单
    为什么要遍历两次?——个人对于kosaraju算法的理解
    我的黑客和渗透测试学习路线
    一个假猪套神器:NET CAT-NC
    kali linux(二):使用与介绍
  • 原文地址:https://www.cnblogs.com/yllinux/p/13276802.html
Copyright © 2011-2022 走看看