1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8941|回复: 28

绝对高端——漂亮,干净;绝对方便——一键搞定

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-12 22:49 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个应该放哪里?颇费思量。论目的,像是图表,论方法,又是VBA。算了,咱是VBA的常客,还是这里亲切些。

这应该叫什么?权且称为增减趋势图吧。一位也在五百强企业呆过的老同学说,这叫“水瀑图”,他们经常用,很有品位的名字啊。

在外企区域总部,级别很高的会议中经常出现这种图表,要做得漂亮很费力,不过看起来确实直观醒目,让人眼前一亮。

有了这个工具,不必再为做这种图表苦恼了,一键搞定,图表清晰漂亮,不添加冗余列,表格干净整洁。

一段简单的自动演示,包含如何使用加载宏的内容。这种图表,堪称图表皇冠上的明珠,很受老外高管追捧,能轻松拿出这种图表,让人刮目相看哟!

重返论坛以来,连续发了不少东西,希望对大家有所帮助。可能得歇一阵了,忙点别的。

增减趋势图.rar

51.59 KB, 下载次数: 1289

TA的精华主题

TA的得分主题

发表于 2009-6-12 22:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
赶来看看哈。

TA的精华主题

TA的得分主题

发表于 2009-6-12 23:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-12 23:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不太明白具体用法。。楼主如果有空能否录个动画

TA的精华主题

TA的得分主题

发表于 2009-6-13 09:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
多谢分享。
个人建议:设计为自动加载那个加载宏,不要由操作者再选择之。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-13 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 Aeolian-Vox 于 2009-6-13 09:21 发表
多谢分享。
个人建议:设计为自动加载那个加载宏,不要由操作者再选择之。


自动演示时会自动添加加载宏,只是每步留了5秒停顿让大家看清添加过程。对新手来说,也多了解点加载宏有关知识。把水瀑图的图片也放上来吧:

[ 本帖最后由 AIEO.CN 于 2009-6-13 10:12 编辑 ]
水瀑图.JPG

TA的精华主题

TA的得分主题

发表于 2009-6-13 11:00 | 显示全部楼层
瀑布图 做起来也不难
不过多谢楼主分享 顶了

TA的精华主题

TA的得分主题

发表于 2009-6-13 18:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 shlzml 于 2009-6-13 11:00 发表
瀑布图 做起来也不难
不过多谢楼主分享 顶了

下了楼主的附件,感觉操作起来挺麻烦的,对新手而言更不好理解。索性自己做了一个自定义函数,给大
家分享一下。(不适合每月有赤字的,即每月余额小于0)

Sub Newchart()
If MyChart(, xlColumnStacked, Range("B3:B15"), Range("A3:A15"), , , Range("B1")) Then MsgBox "已完成"
End Sub


Function MyChart(Optional ByVal MyChart_Name As String = "我的图表", Optional ByVal MyChart_Type As XlChartType = xlLineMarkers, _
   Optional ByVal MyChart_Source As Range = Nothing, Optional ByVal MyChart_XValues As Range = Nothing, _
   Optional ByVal MyChart_Plotby As XlRowCol = xlRows, Optional ByVal MyChart_Title As Boolean = True, _
   Optional ByVal MyChart_TitleText As String = "标题", Optional ByVal MyChart_HasLegend As Boolean = False, _
   Optional ByVal MyChart_Left As Integer = 420, Optional ByVal MyChart_Top As Integer = 250, _
   Optional ByVal MyChart_Width As Integer = 300, Optional ByVal MyChart_Height As Integer = 200) As Boolean
Dim Mych As ChartObject     '声明变量为嵌入式图表对象
Dim Myarr1, myarr2     '声明数组
ReDim Myarr1(1 To MyChart_Source.Count)      '给数据系列1的数组
ReDim myarr2(1 To MyChart_Source.Count)      '给数据系列2的数组
For k = 1 To UBound(Myarr1)       '以下为把单元格数据分解为数据系列1/2所用的数据
   hz = hz + MyChart_Source.Cells(k, 1)
   Select Case k
   Case 1
      Myarr1(k) = MyChart_Source.Cells(k, 1)
      myarr2(k) = 0
   Case 2 To UBound(Myarr1) - 1
      If MyChart_Source.Cells(k, 1) > 0 Then
         Myarr1(k) = hz - MyChart_Source.Cells(k, 1)
      Else
         Myarr1(k) = hz
      End If
      myarr2(k) = Abs(MyChart_Source.Cells(k, 1))
   Case UBound(Myarr1)
      Myarr1(k) = hz
      myarr2(k) = 0
   End Select
Next
On Error Resume Next     '如出错,则从出错行下一行开始执行
Set Mych = ActiveSheet.ChartObjects(MyChart_Name)     '设置对象
'MsgBox Err.Number
If Err.Number = -2147024809 Then     '设置对象出错,没有对象
   Set Mych = ActiveSheet.ChartObjects.Add(MyChart_Left, MyChart_Top, MyChart_Width, MyChart_Height)     '添加嵌入图表,设置对象
   Mych.Name = MyChart_Name     '设置对象名称
End If
Err.Clear   '清除Err对象
On Error GoTo Myerr     '如出错,则执行Myerr语句
   
With Mych.Chart
   .ChartType = MyChart_Type      '图表类型为xlLineMarkers_数据点折线图
   .HasTitle = MyChart_Title    '图表标题,可见则为 True
   If MyChart_Title Then .ChartTitle.Characters.Text = MyChart_TitleText     '图表标题文本
   '.ChartTitle.Characters.Font.Size = 12      '设置标题的字号
   '.SetSourceData Source:=Myarr, PlotBy:=MyChart_Plotby     '为指定图表设置源数据区域
   .HasLegend = MyChart_HasLegend     '为False ,图表没有图例
   
   .SeriesCollection.NewSeries     '创建新系列
   .SeriesCollection(1).Values = Myarr1    '设置嵌入式图表的系列值1的数据
   For k = 1 To .SeriesCollection(1).Points.Count      '设置系列1的颜色和数据标签
      If k = 1 Or k = .SeriesCollection(1).Points.Count Then
         .SeriesCollection(1).Points(k).Interior.ColorIndex = 5   '2白色 5兰色 3红色 xlColorIndexNone无色
         .SeriesCollection(1).Points(k).ApplyDataLabels Type:=xlDataLabelsShowValue     '显示数据标签
         .SeriesCollection(1).DataLabels(k).Font.ColorIndex = 2   '2白色 5兰色 3红色 xlColorIndexNone无色
      Else
         .SeriesCollection(1).Points(k).Interior.ColorIndex = xlColorIndexNone   '2白色 5兰色 3红色 xlColorIndexNone无色
         .SeriesCollection(1).Points(k).ApplyDataLabels Type:=xlDataLabelsShowNone     '不显示数据标签
      End If
   Next
   .SeriesCollection(1).XValues = MyChart_XValues     '设置水平分类轴标签
   
   .SeriesCollection.NewSeries     '创建新系列
   .SeriesCollection(2).Values = myarr2    '设置嵌入式图表的系列值2的数据
   For k = 1 To .SeriesCollection(2).Points.Count      '设置系列2的颜色和数据标签
      If k = 1 Or k = .SeriesCollection(1).Points.Count Then
         .SeriesCollection(2).Points(k).Interior.ColorIndex = xlColorIndexNone   '2白色 5兰色 3红色 xlColorIndexNone无色
         .SeriesCollection(2).Points(k).ApplyDataLabels Type:=xlDataLabelsShowNone     '不显示数据标签
      Else
         If MyChart_Source.Cells(k, 1) > 0 Then
            .SeriesCollection(2).Points(k).Interior.ColorIndex = 5   '2白色 5兰色 3红色 xlColorIndexNone无色
         Else
            .SeriesCollection(2).Points(k).Interior.ColorIndex = 3   '2白色 5兰色 3红色 xlColorIndexNone无色
         End If
         .SeriesCollection(2).Points(k).ApplyDataLabels Type:=xlDataLabelsShowValue     '显示数据标签
         .SeriesCollection(2).DataLabels(k).Font.ColorIndex = 2   '2白色 5兰色 3红色 xlColorIndexNone无色
      End If
   Next
   .ChartGroups(1).GapWidth = 50     '返回或设置图表的系列和系列之间的间距
End With
Mych.Activate     '对象激活
MyChart = True     '本函数返回True
Exit Function     '退出函数
Myerr:
   MyChart = False     '本函数返回False
End Function

kk.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-6-13 20:37 | 显示全部楼层

抛砖怎能引玉?抛玉才行

原帖由 jiulongpo 于 2009-6-13 18:12 发表

下了楼主的附件,感觉操作起来挺麻烦的,对新手而言更不好理解。索性自己做了一个自定义函数,给大
家分享一下。(不适合每月有赤字的,即每月余额小于0)


真不知道什么叫麻烦? 加载宏添加后,会出现相关菜单,以后需要做这种图表时,只要选中数字系列,选择菜单“自动作图”就完成了。自动演示只是让新手了解怎样添加加载宏及如何使用该工具,以后无需再演示,也不必非得用附件中的“增减趋势图.xls" 文件。

当然,喜欢琢磨的可以将8楼的代码复制,自己去做工具(可能该代码只适用于2007版)。不过如有新手想了解怎样把代码变成可用的工具,还有劳jiulongpo给予耐心解答 ,咱只负责引玉

这已经接近“各尽所能,各取所需”的理想境界了。

[ 本帖最后由 AIEO.CN 于 2009-6-13 20:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-6-13 21:03 | 显示全部楼层
原帖由 AIEO.CN 于 2009-6-13 20:37 发表


真不知道什么叫麻烦? 加载宏添加后,会出现相关菜单,以后需要做这种图表时,只要选中数字系列,选择菜单“自动作图”就完成了。自动演示只是让新手了解怎样添加加载宏及如何使用该工具,以后无需再演示,也 ...


见笑了.与君共勉
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-3-13 01:56 , Processed in 0.029956 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表