|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 sunya_0529 于 2014-3-28 09:27 编辑
sunya_0529 发表于 2014-3-26 21:24
谢谢楼主的点评,题目中没有要求数据源不能排序。不过我也学到了堆积图中同一柱子堆积的数据放在同一行上就 ...
重新整理了一下代码,加上了新学的一些知识,留个纪念。
- Private Sub CommandButton2_Click() '一键制图
- '生成图表
- Dim w As Shape, x As Chart, arr(15), k As Range, i%, j%, h%
- For Each w In ActiveSheet.Shapes '删除已有图表
- If w.Type = msoChart Then w.Delete
- Next
- Set x = ActiveSheet.Shapes.AddChart.Chart '新建图表
- With x
- .ChartType = xlColumnStacked '设置图表类型为堆积柱形图
- .SetSourceData Source:=[A4] '设置图表数据源
- '设置水平(分类)轴标签
- .SeriesCollection(1).XValues = Array("", "Q1", "", "", "", "Q2", "", "", "", "Q3", "", "", "", "Q4", "", "")
- .Axes(xlCategory).MajorTickMark = xlNone '无横坐标刻度线
- .Axes(xlCategory).TickLabelPosition = xlLow '横坐标标签位置置底
- For Each k In [B4:K4] '循环添加数据系列
- If Len(k.Value) > 0 Then
- i = i + 1
- If i > 1 Then .SeriesCollection.NewSeries
- .SeriesCollection(i).Name = k.Value '添加数据系列名称
- Erase arr '重新初始化数组
- Select Case Application.IfError(Application.VLookup(k.Value, [A13:B21], 2, 0), "")
- Case "水果"
- h = 0
- Case "蔬菜"
- h = 1
- Case Else
- h = 2
- End Select
- arr(h) = k.Offset(1, 0)
- arr(h + 4) = k.Offset(2, 0)
- arr(h + 8) = k.Offset(3, 0)
- arr(h + 12) = k.Offset(4, 0)
- .SeriesCollection(i).Values = arr '添加数据系列值
- End If
- Next
- For j = 0 To UBound(arr) '添加辅助数据列
- If Len(arr(j)) > 0 Then arr(j) = arr(j) * -1
- Next
- .SeriesCollection.NewSeries
- .SeriesCollection(i + 1).Values = arr
- .ChartGroups(1).GapWidth = 0 '列簇间距为0
- .Legend.Position = xlLegendPositionTop '图例项置顶显示
- .Legend.LegendEntries(i + 1).Delete '删除辅助列图例
- .SeriesCollection(i + 1).ApplyDataLabels '设置辅助列数据标签
- .SeriesCollection(i + 1).DataLabels.Position = xlLabelPositionInsideBase '辅助列数据标签位置为“轴内侧”
- .SeriesCollection(i + 1).DataLabels.NumberFormatLocal = "[红色]-0;0;;" '辅助列数据标签颜色
- .SeriesCollection(i + 1).Format.Fill.Visible = msoFalse '辅助列数据系列填充色为无
- .Axes(xlValue).MajorTickMark = xlNone '无主纵坐标轴刻度线
- .Axes(xlValue).TickLabelPosition = xlTickLabelPositionHigh '主纵坐标轴标签显示在右侧
- .Axes(xlValue).Format.Line.Visible = msoFalse '无主纵坐标轴线
- End With
- Set x = Nothing
- End Sub
复制代码
|
评分
-
1
查看全部评分
-
|