视频链接
一、动态图表实现原理
1.小试牛刀-利用IF创建简单的动态图表
1. 目标(通过勾选复选框控制图表)
2. 步骤
a. 首先插入2个复选框,并编辑复选框名字—“彩盒”、“宠物用品”
b. 如何使复选框与单元格联动?
点击右键设置“控件格式”,选中一个单元格作为单元格链接,则发现勾选复选框显示TRUE,不勾选复选框显示FALSE
c. 接下来通过IF函数,实现单元格链接与单元格数据的联动,将IF函数公式剪切到“公式-定义名称-引用位置”,目的是将“彩盒”这个名称与IF函数连接起来。
注意,需要全部加上绝对引用
=IF($U$1,$B$2:$B$13,$F$2:$F$13)
d. 最后插入二维折线图,右键点击“选择数据”,输入“系列名称:彩盒”,“系列值:Sheet1!彩盒”
此时会发现,勾选复选框“彩盒”会显示彩盒的折线数据,不勾选“彩盒”则不会显示数据
同理,“宠物用品”的添加也是相同的
但是此时有一个小问题,即分别勾选“彩盒”和“宠物用品”时,纵坐标轴的数值在不断变化,看起来不美观,可以将其设置成固定的数值
彩盒和宠物用品分别图例
两者不够勾选右键设置坐标轴,填入自己想要的数字,以大的为准
此时发现无论勾选“彩盒”还是“宠物用品”,纵坐标轴的数值均不变
e. 但是此时距离我们完成目标还差一步,在目标中复选框是位于图例前面的,如下图:
首先勾选“图表元素”,即在图表中显示图例
选中图表,设置为“置于底层”,
然后删掉复选框中的文字,只留下单独额复选框
之后将复选框移置图例前面
至此可实现:通过勾选复选框控制图表
二、利用Offset函数与控件创建动态图表
1.Offset函数概述
语法
OFFSET(reference, rows, cols, [height], [width])
参数说明
reference(必需):
基准单元格或范围。rows(必需):
向上或向下偏移的行数(正数向下,负数向上)。cols(必需):
向左或向右偏移的列数(正数向右,负数向左)。height(可选):
返回区域的高度(行数)。默认为1。width(可选):
返回区域的宽度(列数)。默认为1。
返回值
返回一个以reference为起点,经过rows和cols偏移后,指定height和width大小的范围。
示例用法
a. 基本用法:返回单个单元格
=OFFSET(A1, 2, 3)
以A1为基准,向下偏移2行,向右偏移3列,返回D3的值。
b. 返回一个区域
=OFFSET(A1, 0, 0, 3, 2)
以A1为基准,不偏移,返回一个3行2列的区域,范围为A1:B3。
c. 动态范围
=SUM(OFFSET(A1, 1, 1, 5, 1))
以A1为基准,取从A1开始、下移一行右移一列,共5行1列的区域,计算区域的总和。
d. 结合其他函数
=AVERAGE(OFFSET(B2, 0, 0, 3, 3))
以B2为基准,选取一个3行3列的区域,计算区域的平均值。
注意事项
-
OFFSET返回的是一个动态范围,不能单独用于直接计算;通常需要与函数(如SUM、AVERAGE等)配合使用。
OFFSET函数是动态的,每次工作表数据变化时都会重新计算,可能对性能造成影响。
如果偏移量超出表格范围,公式会返回#REF!错误。
2.Offset函数的动态引用示例
问题:常规的用数据透视表插入数据无法实现原数据变化透视表跟着变化
首先选中任意一个单元格,点击“插入-数据透视表-确定”,做一个根据“产品类别”汇总“金额”的数据透视表
此时原数据是125行,若增加3行,即为128行,刷新数据透视表,发现数据并未发生变化。
方法:用offset()函数定义一个变化的数据区域,然后插入数据透视表
首先取一个可变化的数据区域
利用offset函数,以A1为基准,向下移0行,向右移0行,取11列数据-即取到K列,取A列所在的所有非空单元格行,公式=OFFSET($A$1,0,0,COUNTA($A:$A),11),(counta函数)
然后剪切公式,新建“公式-定义名称,名称‘数据区域,引用位置‘所剪切的公式’”
接着“插入-数据透视表-选择单元格区域:数据区域-勾选新工作表”,选择“产品类别”和“金额”,此时的总计数据量是207万多。
然后插入3行新数据(并将其中一个金额改成1000万),再刷新数据透视表,发现此时数据透视表的总计变成1209万多。
3.动态图表1-永远返回最后10行数据
1. 目标图表
2. 步骤
取b列最后10个单元格数据,公式 =OFFSET($B$1,COUNTA($B:$B)-10,0,10,1)
COUNTA($B:$B)
统计整列 B 中的非空单元格数量。
如果列 B 中有 15 个非空单元格,那么 COUNTA($B:$B) 的值为 15。
COUNTA($B:$B)-10
通过减去 10,计算出从第几行开始的偏移量。例如,如果列 B 有 17 个非空单元格,这部分计算的结果是 17 - 10 = 7,即从第 7 行开始偏移
然后将该公式定义为名称是“成交量”的一个新公式(该公式只取成交量的倒数10位的数据)
插入空白折线图,右键“选择数据”,点击“系列-添加”,输入“系列名称:成交量”,“系列值:='图表2 (2)'!成交量”,此时点击图表发现对应原数据最后10行
注:此时多添加几行结果一样显示最后10行
横轴坐标为1-10,我们需要对横轴做同样的过程
4.动态图表2-通过控件控制图表数据
1.目标图表
每点一下第1个滚动条,所取数据向下走1行,但取的行数不变,都是20行数据;第2个滚动条控制取多少数据,点一下取22行,再一点取23行、24行、25行…
这两个滚动条分工不同,分别控制offset中的两个参数,一个是下移多少行,另一个是取多少行
2.步骤
点击“开发工具”,插入“表单控制中的滚动条”,右键“设置对象格式”,找到控制
首先“插入-窗体-滚动条”,并复制一个,如下图:
接下来开始写公式=OFFSET($B$1, $E$3, 0, $E$8, 1)
具体公式参数
$A$1:起始单元格,是偏移计算的参考位置。
$E$3:表示向下偏移的行数,由单元格 F3 的值决定。
0:表示列偏移为 0,即仍在列 A。
$E$8:表示返回的范围包含的行数,由单元格 F6 的值决定。
1:表示返回的范围包含的列数为 1 列。
然后将该公式剪切并定义为名称是“成交量2”的公式,并插入空白柱形图,右键“选择数据”,添加“系列”,“系列名称:成交量、系列值:=Sheet10!成交量2”,此时拖动2个滚动条发现柱形图会随之变化,至此成交量柱形图已完成;但是还差日期
日期同理