easyui 动态设置单元格控件_Excel 动态图表(基础1)

5911d290d90796c74a5db5088161fbd0.png

场景假设:

有一个小型制造工厂,没有自动化数据采集系统,但设备台数不是太多。有管理人员(不会VBA),需要每天记录各个设备的产量数据,并更新成曲线图表用以直观感受变化。

在这样一个场景下,最通常的做法是每日不停更新数据,并仅保留有限天数的历史数据,用以满足图表的数据选择区域的限定;或者为更新图表,不停地重新选择图表数据区域。

这样的操作在效率上明显不是很高,并且当我想看到更为久远的数据时,往往是力不从心的。

动态图表更新方案:

f0021b97893cac53ecbc7a75d6d3d37b.gif
动态图表更新方案

上面GIF动图是一个没有VBA参与下的动态图表更新方案。在这样的方案下,产量登记人员,仅仅需要关心的是在“产量录入”表内正确地输入对应设备的产量即可。不需要具体关心曲线图表的生成问题,因为当他在开始输入数据时,图表的更新工作就已经在进行了。

那上面的这一切是怎样实现的呢。

Step1:合理的数据录入表

设计一个合理的数据录入表,对于数据的正确输入、分析以及后期的图表生成极其重要。但好在一个如“产量录入表”类似的常规表格,通常能满足大部分的数据录入需求。

69dd29279eb3c30e225a3cae1e7c6960.png
产量录入表

对于长期需要录入更新的表格,后期数据会越来越多。为了对项目名的对应检视需求,最通常也是最直接的做法是冻结窗格。在本次示例中,我是冻结了首列(视图-->冻结窗格-->(下拉选择)),这样对于数据记录人员而言,可以忽略前面的历史数据,直接在数据表最后端录入新日期的数据,且能很好地正确对应设备名(行项目名)。

Step2:图表数据生成

插入一个图表是一个很容易的事,难的是选择合适的图表形式,按我们想要的姿态展现数据,同时兼顾配色,以期达到最理想的视觉效果。这是一个很深奥的问题,在本示例中我们不作探讨。我们探讨另一个最简单的问题——选择数据。

a280432d2d61b11dd44ddb88be94b88b.png
选择数据对话框

上图显示的是图表的“选择数据源”对话框,这样一个对话框内,能看到的东西很直观。最常用的是“切换行/列”与“隐藏的单元格和空单元格”。内容不复杂,涉及到了具体的操作,简单尝试一下就出来了。

从一开始的GIF 动画中,我们清楚地可以看到图表的变化。能产生这样的变化,可以想到的方法基本可能存在如下两个可能

1:自动变化数据选择区域
2:图表数据区域内的数据自动按要求变化

通过尝试,“图表数据区域”内基本是不接受诸如 INDIRECT OFFSET 等区域引用函数的,由此,第一个可能就排除了,那我们尝试用第二个方法来实现。

由于图表数据选择区的死板,可知第二套方案的要义是:一个可以可控更新的固定数据表

根据要义精神,我们的图表想直接引用“产量录入”中的原始数据,是不可能看到最新数据的。那可能的方法是新建一个辅助表,它具有固定大小,且数据内容可按要求定位到数据源中想要的位置。

acace70d49325a353aaac8eb4288aa34.png
图表数据(辅助表)

可以想像出,辅助表的样式是和原始表的样式是一致的。但它具有固定的大小,列方向不能无限的延伸。我们的曲线图当引用到这样一个数据区域时,一个需求中的图像也就基本地成功显示了。后面的主要精力就是放在图表的更新和历史的回溯上了。

Step3:用函数配合自动更新

我们在设计该示例时的初衷是能自动更新曲线图表,完成了Step2显然是不够的,可以发现当数据有新录入时,图表并不会随之更新。

为了实现图表的更新,我们必须让数据表内的数据能紧随更新。这里我们不得不介绍一个重要的函数 OFFSET

6abed00d3d93bc4033c7d893e6a3f1d8.png
OFFSET 的基本参数
OFFSET 函数语法具有下列参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。): Reference 必需。作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用;否则,OFFSET 返回错误值 #VALUE!。 Rows 必需。相对于偏移量参照系的左上角单元格,上(下)偏移的行数。如果使用 5 作为参数 Rows,则说明目标引用区域的左上角单元格比 reference 低 5 行。行数可为正数(代表在起始引用的下方)或负数(代表在起始引用的上方)。 Cols 必需。相对于偏移量参照系的左上角单元格,左(右)偏移的列数。如果使用 5 作为参数 Cols,则说明目标引用区域的左上角的单元格比 reference 靠右 5 列。列数可为正数(代表在起始引用的右边)或负数(代表在起始引用的左边)。 Height 可选。高度,即所要返回的引用区域的行数。Height 必须为正数。 Width 可选。宽度,即所要返回的引用区域的列数。Width 必须为正数。

以上是OFFSET的官方解释。为了比较直观地理解这个函数,可以看我提供的GIF

30ab013240df0da9459c1c772409bb89.gif
OFFSET 函数辅助理解

在理解OFFSET函数后,就可以通过Count函数计算数据录入的总天数,用这个总天数构成更新引用的参考,就像存在一个移动窗口一样,始终能定位到最新的数据录入位置。如果这一切都要在一个公式里实现肯定是复杂的!不过,既然作为辅助表,并不需要展现给他人,我们完全可以建一些辅助行,用以安抚复杂公式罗列过程中受伤的脑细胞,并把它所在的Sheet隐藏起来(反正自己用着方便就行)。

于是出现我这样一个辅助表样式(假如我的图表始终显示7天的数据)

bfb1445f1d7ff33108651333a657c950.png
动态图表的辅助数据表样式

在上图中,可以发现,我的主表添加了两行辅助行数据,这些数据是不用在曲线图上显示的。

“No”行:解决的是以右侧为起点的,数据所在位置

“源定位”行:解决的是本表列,映射到“产量录入”表的数据所在位置,为OFFSET函数的Cols参数提供参考。

此外我还有几项辅助参数

“最新记录列”:它有公式 =COUNT(产量录入!2:2) 自动计算生成,它体现的是“产量录入”表中总记录数(数据列)

“滚选值”“滚选最大值”是表单控件 “滚动条” 的相关参数。这个控件无需VBA编程,预先设置好最小值和最大值,通过拖拉控件游块便能产生一个相对值,就像可调电阻一样。(控件添加方法和参数设置见图)。我们通过拖动滚动条上的游标,曲线图就可以回溯到“最大值”指定的那日生产数据。

357769b25316dc53d4bb7adf4e07635f.png
滚动条 添加步骤

911fb506197d0a632958c46ca4bd46df.png
滚动条的参数设置界面(右击控件)

有了滚动条的加入,知道了最新的记录列,配合No,我们很容易就可以用公式计算出源定位值,也就是辅助表所在列对应于产量记录表所在列

05b331e70882ffbed9c5c05a450f5f9e.png
源定位 公式

既然两个表的列对应值已经计算出来了,那我们就可以通过前面的OFFSET函数,完成辅助表内Sample公式(基础公式)录入。

d789d93525530978187315bb7951b0fe.png
在辅助表内运用offset函数

基础公式录入完成后,进行常规的推拉操作就可以完成整表的覆盖(offset 函数注意Rows偏移值的递增)

898643ad6581577c1d7e54b7f1e5f035.png
Rows偏移值的递增

回顾

到这里,我们一开始GIF展示的效果就全部实现了。可以试着把滚动条的游标拉到最右侧,曲线图将显示当前的最新数据,当“产量录入”表的源数据有新纪录时,图表自动更新显示最新数据。当我们想回溯过往历史数据时,也仅仅是拖动游标即可。

拓展:

如果会数组公式的话,可以充分利用OFFSET提供的参数,一次性填充表格。十分高效!

具体步骤:

  1. 选择 表格辅助!B7:H11 区域
  2. 公式栏输入公式 =OFFSET(产量录入!$A$2,0,表格辅助!B6,5,7)
  3. shift+ctrl+enter 组合键

以上实例分享我的QQ群里,按需共享!

QQ交流群: 625157714 (交流&文件共享)

微 博 :Sina Visitor System

(后期QQ群有变动时,会在微博中告知)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值