【问题标题】:How to create a chart on the same worksheet using a for loop statement?如何使用 for 循环语句在同一个工作表上创建图表?
【发布时间】:2018-08-08 22:15:18
【问题描述】:
Name       Progress  
Student1    93    
Student2    80
Student3    51
Student4    91
Student5    65
Student6    45          
student7    33

我还是 VBA 编程新手。上面是我的数据集示例,下面是我的代码,它能够向右填充列 C 到 E 而不会出现任何错误。下面是我的图表代码,当我运行它时它给了我一个糟糕的图表。请告知如何在同一工作表的条形图上的 C 到 E 列上绘制这些填充值,其中绿色条显示进度 >= 90,琥珀色条显示 50

Sub ClassCategories()

    Dim startRow As Long, lastRow As Long, n As Integer
    startRow = 2
    n = 8
    Dim i As Long, Progress As Long
    Dim sClass1 As String
    Dim sClass2 As String
    Dim sClass3 As String

    For i = startRow To n
        Progress = ThisWorkbook.Worksheets("sheet1").Range("B" & i).Value
        ' Check progress and classify accordingly
        If Progress >= 90 Then
            sClass3 = Progress
        Else
            sClass3 = " "
        End If

        If 50 <= Progress And Progress < 90 Then
            sClass2 = Progress
        Else
            sClass2 = " "
        End If

        If Progress < 50 Then
            sClass1 = Progress
        Else
            sClass1 = " "
        End If

        ' Write out the class to column C to E
        Worksheets("sheet1").Range("C" & i).Value = sClass1
        Worksheets("sheet1").Range("D" & i).Value = sClass2
        Worksheets("sheet1").Range("E" & i).Value = sClass3
    Next
End Sub

私有子 Createachart()

    Dim oChObj As ChartObject, rngSourceData As Range, ws As Worksheet

    Set ws = Sheets("Sheet1")

    Set rngSourceData = ws.Range("C3:E8")

    Set oChObj = ws.ChartObjects.Add(Left:=ws.Columns("A").Left,     
    Width:=290, Top:=ws.Rows(8).Top, Height:=190)



        With oChObj.Chart

             .ChartType = xlColumnClustered

             .SetSourceData Source:=rngSourceData, PlotBy:=xlColumns

             .Axes(xlCategory).CategoryNames = ws.Range("A2:A8")

             .HasTitle = True
        End With


   End Sub

【问题讨论】:

  • 录制宏。然后在需要的地方进行调整
  • 请使用tour 并阅读How to Ask。您已经完成了一半,但您目前拥有的代码并未显示任何创建图表的努力,因此看起来您希望有人为您提供完整的解决方案。请尝试自行解决问题并修改您的问题,以便说明您需要帮助解决的具体、可回答的问题或错误。
  • 那么,我们应该为您创建图表吗?
  • 抱歉,忘记包含我的图表宏。
  • 你想把它绘制在同一张图表上吗?

标签: vba excel loops charts


【解决方案1】:

我想这段代码是你需要的(假设你的示例表从 A1 单元格开始):

Sub CreateChart()
    
    Dim sh As Shape
    Dim ch As Chart
    Dim ser As Series
    Dim lColor&, i%, x, arr
    
    '// Remove all charts
    For Each sh In ActiveSheet.Shapes
        If sh.Type = msoChart Then sh.Delete
    Next
    
    '// Add chart to sheet
    With Range("A10:N30")
        Set ch = .Parent.Shapes.AddChart(xlColumn, .Left, .Top, .Width, .Height).Chart
    End With
    
    With ch
    
        '// If user's selection is within chart data range,
        '// then Excel will create chart based on data in this range.
        '// We don't need it, so clear the chart out.
        .ChartArea.ClearContents
        
        '// Add series
        Set ser = ch.SeriesCollection.NewSeries()
        ser.Values = Range("B2:B8").Value
        ser.XValues = Range("A2:A8").Value
        
        '// Get values
        arr = ser.Values
        
        '// Format points based on values
        For i = 1 To UBound(arr)
            x = arr(i)
            Select Case True
                Case x >= 90: lColor = vbGreen
                Case x >= 50 And x < 90: lColor = vbYellow
                Case x < 50: lColor = vbRed
            End Select
            ser.Points(i).Format.Fill.ForeColor.RGB = lColor
        Next
    End With

End Sub

您可以使用代码here 下载工作簿。

结果:

【讨论】:

  • 谢谢,非常感谢您的帮助 JohnyL。您帮助我以不同的方式看待问题,即使用一列范围而不是使用三列范围,而不是我以前想象的。我将继续自学学习VBA,以便明天我也可以为帮助他人做出贡献。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
相关资源
最近更新 更多