分享

VBA一键绘制甘特图

 Excel实用知识 2024-11-28 发布于广东

你知道怎么绘制甘特图吗?本号以前讲过怎么利用公式来制作甘特图,那是相当的麻烦,做了一个又一个辅助列,今天我来教教大家怎么用VBA来制作甘特图,先来看看效果。

效果展示:

图片

图片

怎么样,一键生成甘特图+美化图表,下面我们来看看代码

代码展示:

图片

Sub gantetu()Dim X, Y, Z, F1, F2, F3Dim sht As WorksheetSet sht = ActiveSheetWith sht X = Application.Transpose(.Range('A2:A13').Value) Y = Application.Transpose(.Range('B2:B13').Value) Z = Application.Transpose(.Range('C2:C13').Value) ReDim F1(1 To UBound(Y)) ReDim F2(1 To UBound(Y)) ReDim F3(1 To UBound(Y))End WithFor i = 1 To UBound(X) Y(i) = DateValue(Y(i)) * 1 Z(i) = DateValue(Z(i)) * 1 F1(i) = Z(i) - Y(i) F2(i) = Date * 1 F3(i) = iNext iDim chtobj As ChartObject, cht As ChartSet chtobj = sht.ChartObjects.Add(sht.Range('D1').Left, 0, sht.Range('O1').Left, sht.Range('A20').Top)Set cht = chtobj.ChartCall addser(cht, xlBarStacked, '开始时间', X, Y)Call addser(cht, xlBarStacked, '任务周期', X, F1)Call addser(cht, xlXYScatterSmoothNoMarkers, '当前日期', F2, F3)With cht .Axes(xlValue).MinimumScale = Application.Min(Y) .Axes(xlValue).MaximumScale = Application.Max(Z) .Axes(xlValue).MajorUnit = 10End WithCall 图表美化(cht)End SubSub addser(cht As Chart, typ, strname, arrX, arrY)Dim ser As SeriesSet ser = cht.SeriesCollection.NewSeriesWith ser .ChartType = typ .Name = strname .XValues = arrX .Values = arrYEnd WithEnd Sub
第6-8行:分别将数据源装进三个数组
第9-11行:定义三个辅助列,F1用来装历时天数,F2,F3用来做当前日期系列
第14-18行:给辅助列赋值
第22行:创建堆积条形图
第24-26行:创建三个系列
第28-30行:最大最小值设置,间隔设置
第32行:call美化图表程序
第33-43行:添加系列程序

看看以下效果图,利用VBA一键美化的图表,你喜欢哪一个呢?
图片

图片
图片
图片
图片

美化程序就不讲解了,详见VBA美化图表系列,那里将所有元素的常见美化方法都写出来啦,感兴趣的去看看吧

好了,今天的教程就到这里啦,我们下期再见

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多