ARTICLE · 1295701
56个Excel函数,放到电力交易里怎么用?(带公式,可复制)
长期分享电力和AI知识。如果有什么不同见解,欢迎分享观点,感谢点击♥和👍,谢谢!
客户问这个月用了多少电,你要从明细里找数;月底核对购电成本,要把电量和价格一笔笔对上;做交易复盘,还得找出哪些时段花的钱最多。
我用同一张小表,边算边讲。遇到什么业务,该用哪个函数,公式又有哪些容易用错的地方,都放在对应的例子里。SUMIFS、SUMPRODUCT这类函数平时会经常用到(这2我每次直播都讲);LENB、INDIRECT用得少一些,知道它们就够了。
先看四笔电量,后面都用这张表来讲
新建一个工作表,取名“明细”。从A列到F列,依次填写:时间、用户、时段组、电量MWh、电价元/MWh、金额元。
第2行:2026/10/01 00:00;SIM-U01;A段;1;200;200。 第3行:2026/10/01 01:00;SIM-U01;B段;4;800;3200。 第4行:2026/10/01 02:00;SIM-U02;B段;2;300;600。 第5行:2026/10/01 03:00;SIM-U02;A段;3;100;300。
SIM-U01和SIM-U02是两个示例客户的编号。MWh就是兆瓦时,1MWh等于1000度电。第一笔买了1MWh,每MWh是200元,金额自然是200元;第二笔买了4MWh,单价800元,金额就是3200元。
F2填写=D2*E2,再向下填到F5,这四笔金额就算出来了。A列按日期时间填写,电量和电价按数字填写。后面的计算公式放在表内空白位置,别覆盖这四行数据。
数字都是假设。我只抽取四笔演示,不是整个月的完整账单。A段、B段只是方便比较的分组,不是广东规定的峰谷时段;这里也只算电量乘价格的金额,实际账单中的合同结算、输配等项目要另算。
一、先回答:用了多少电,花了多少钱?
01|SUM:把电量和金额加起来
收到一张电量表,先看合计数,是最常见的第一步。
=SUM(D2:D5)
就是把D2到D5的电量加起来,得到10MWh。换成=SUM(F2:F5),总金额是4300元。后面不管按客户拆,还是按日期拆,加回来的合计都应该对得上这两个数。
02|SUMIF:只算某个客户的电量
如果只想知道客户SIM-U01用了多少电,就给求和加一个条件。
=SUMIF(B2:B5,"SIM-U01",D2:D5)
意思是:“到B列找SIM-U01,把对应D列的电量加起来。”结果是1+4=5MWh。它按公式里的条件计算,不是只计算屏幕上看得见的行;把某些行隐藏起来,不会让它少算。
03|SUMIFS:既指定客户,又指定日期
客户接着问:“那10月1日这一天,金额是多少?”这就不止一个条件了,要用SUMIFS。
=SUMIFS(F2:F5,B2:B5,"SIM-U01",A2:A5,">="&DATE(2026,10,1),A2:A5,"<"&DATE(2026,10,2))
意思是:找SIM-U01,找10月1日这一天,再把金额加起来,结果是3400元。日期写成“从当天零点开始,到次日零点之前”,01:00、02:00这些时点才不会漏掉。
04|SUMPRODUCT:算出每买一兆瓦时,实际花了多少钱
把200、800、300、100四个价格平均,得到350元/MWh。但这四笔电实际花了4300元,买到10MWh,每MWh的成本应该是430元。
=SUMPRODUCT(D2:D5,E2:E5)/SUM(D2:D5)
SUMPRODUCT先把每笔电量乘以对应价格,全部加起来后,再除以总电量。这两个数别混了:350元/MWh是四个时点的普通平均价,430元/MWh才是这几笔电实际买回来的单位成本。高价的时候买得多,实际成本就会被拉高。 这就是按电量加权。表里如果还有卖出电量,买和卖要分开算。
05|COUNT:看看电量有没有被存成文字
有时一列看着都是数字,加起来却少了一笔。原因可能是某个“数字”其实被Excel当成了文字。
=COUNT(D2:D5)
正常应得到4,说明这四格都被Excel识别成了数值。如果只有3,就要找找哪一格出了问题。它能帮你查这类问题,但数字本身填得对不对,还得回看原始记录。
06|COUNTA:数一数,有多少行填了客户
客户编号是文字,用COUNTA来看有没有填写。
=COUNTA(B2:B5)
结果是4,意思是四行都有内容,可不是有四个客户。我们实际只有两个客户,各出现两次。还有一种容易忽略的情况:单元格里有公式,只是看起来是空白,COUNTA仍会把它算进去。
07|COUNTIF:数一数高价记录
假设我们想先看,价格达到500元/MWh的记录有几条。
=COUNTIF(E2:E5,">=500")
结果是1。500只是这次分析自己选的分界,不是市场限价。如果同一个小时的价格出现在多个客户的行里,数出来的是多条记录;要回答“高价持续了几个小时”,同一小时只能数一次。
08|COUNTIFS:检查同一笔电量有没有记重
同一个客户、同一个小时,是否被导入了两次?就让COUNTIFS同时检查客户和时间。
=COUNTIFS(B2:B5,B2,A2:A5,A2)
结果是1,也就是与第2行客户、时间相同的记录只有一条。如果是2,先查查是不是真重复。两行也可能属于不同交易品种,不能直接删。同样的写法还能统计某客户的高价记录:=COUNTIFS(B2:B5,"SIM-U01",E2:E5,">=500"),本例是1条。
09|COUNTBLANK:检查有没有漏填电价
算金额前,先看价格是否齐全。
=COUNTBLANK(E2:E5)
本例是0,也就是没有空白价格。如果有空白,先查清再算账。没查到电价,和电价确实是0,是两回事。 写着“待匹配”的格子也不算空白;公式显示的空字符串则会被它计入,不能只凭肉眼判断。
二、接着看:价格高在哪,钱主要花在哪?
10|MAX:找最高电价、最大金额
=MAX(E2:E5)得到最高电价800元/MWh;=MAX(F2:F5)得到最大单笔金额3200元。
这两个数值得分开看。价格很高,但买得很少,花的钱未必多;价格不算最高,却买了很多,也可能是主要成本。找到数值后,再回到明细查看发生在哪个小时。
11|MIN:找最低电价
=MIN(E2:E5)得到100元/MWh。研究低价采购或储能充电时段,先把最低价找出来。
但“那一小时价格最低”,还不等于“我一定能在那一小时买够电”。还得继续看可买数量、用电需求和设备能力。数据里如果出现负电价,真实数值也得保留,不能直接改成0。
12|AVERAGE:看价格的普通平均水平
=AVERAGE(E2:E5)得到350元/MWh,就是四个价格相加再除以4。
想看这几个时段的大致价格,用AVERAGE没问题。但它不管每个时段买了多少电。所以,要回答“我们每兆瓦时花了多少钱”,还得看第04项的430元/MWh。算之前也得看看,有没有漏时段,或者把同一时段放了两次。
13|SMALL:找第2低、第3低的价格
=SMALL(E2:E5,2)得到200元/MWh,末尾的2就是“第2低”。
看储能充电机会时,光知道最低价还不够,还得看低价时段多不多、连不连续。SMALL把第2低、第3低的价格找出来后,再回时间表看是哪几个时段。如果最低价出现两次,这两次都会占位置,不会自动合并成一个数。
14|LARGE:找出金额最大的几笔
=LARGE(F2:F5,2)得到600元,即第2大的单笔金额。想查第2高电价,就把范围改成E列,结果是300元/MWh。
月底复盘时间有限,可以先从金额较大的记录查起。不过花钱多未必是买错了,也可能那时必须用电。要判断交易做得好不好,还得比较:当时有没有可行、成本更低的选择。
15|RANK:给价格排个名次
在G2输入=RANK(E2,$E$2:$E$5,0),向下填到G5,名次依次是3、1、2、4。最后的0表示价格越高,排得越靠前。
排名靠前的记录就能直接筛出来。价格相同时会并列,所以“前10名”有时不止10条。如果必须选10条,同价时按金额排,还是按时间先后排,得提前定好。
16|MEDIAN:看看中间水平,少受极端价格影响
=MEDIAN(E2:E5)得到250元/MWh。把四个价格从低到高排成100、200、300、800,中间的200和300取平均,就是250。
普通平均价是350,中位价是250,能看出800这个高价把平均值拉高了。看价格分布时,中位数很有用。但算实际花费时,高价那一笔仍要一分不少地计入。
17|AVERAGEIF:比较不同时间段的均价
=AVERAGEIF(C2:C5,"B段",E2:E5)得到550元/MWh,是800和300的平均;A段则是150元/MWh。
想比较哪组时段的价格通常更高,就用AVERAGEIF。实际工作中也可以按峰、平、谷来比较,但得先确认当地、当期的时段划分。这里的A段、B段只用来演示,不能直接拿去做广东电费结算。
18|AVERAGEIFS:只看某客户、某一时段组的均价
=AVERAGEIFS(E2:E5,B2:B5,"SIM-U01",C2:C5,"B段")得到800元/MWh。
它比上一项多了一个客户条件。不过这次只有一条记录符合条件,800就是那一条的价格。就凭这一条,还不能说这个客户长期买电更贵。看均价时,顺手再看看一共有多少条记录参与计算。
三、算账时,这些小数和时间怎么处理?
19|INT:把“日期加时间”变成“只有日期”
想把一天24小时汇总成日报,可以先从时间里取出日期。输入=INT(A3),把结果设置成日期格式,就会看到2026/10/01。
Excel把日期和时间存在同一个数里,整数部分是日期,小数部分是当天的时间。INT取到日期,按天汇总就方便了。但碰到负数别按“去掉小数”来理解:=INT(-1.8)的结果是-2。
20|ROUND:把金额保留到小数点后两位
=ROUND(SUM(F2:F5),2)会把合计金额保留两位小数,算出来是4300。想让表里显示4300.00,得再把显示格式设成两位小数。一个是计算结果,一个是显示样式,别混在一起。
对账时,这里常差一分钱:两笔0.004元,各自四舍五入后相加是0.00元;先加成0.008元,再四舍五入则是0.01元。先算合计再取小数,还是每笔取完再相加,要按结算要求统一。
21|ROUNDUP:不够一个数量单位时,往多了取
假设计划需要3.14159MWh,而这道练习要求按0.1MWh填写,那么=ROUNDUP(3.14159,1)得到3.2MWh,取完不会少于原需求。
实际交易允许按多小的单位申报,要查对应要求,不能照搬0.1。还要记住,ROUNDUP对负数是往离0更远的方向取:=ROUNDUP(-3.14159,1)得到-3.2。
22|ROUNDDOWN:不能超过上限时,往少了取
如果最多只能安排3.14159MWh,同样按0.1MWh填写,=ROUNDDOWN(3.14159,1)得到3.1MWh。
做储能计划时,这可以帮助控制填写数量,但储能到底能放多少电,还得先算清剩余电量、功率和效率。对负数,它往靠近0的方向取:=ROUNDDOWN(-3.14159,1)得到-3.1。
23|RAND:试试看,电量变一点会怎样
做报价测算时,可以先问:“如果用电量比预计多5%,或者少5%,成本会变多少?”
=D2*(0.95+0.10*RAND())
本例会生成0.95至1.05MWh之间的电量,包含0.95、不包含1.05。这只是随机试算,不是负荷预测。表格重新计算时,数字还会变;想保留这次结果,就先复制,再用“选择性粘贴”只保留数值。
24|MOD:只取时间中的几点几分
想比较每天凌晨1点的电价,先把时刻提出来会更方便。输入=MOD(A3,1),把结果的显示格式设成hh:mm,就能看到01:00。
它取的是日期时间中的小数部分。原日期列还要留着,否则10月1日的01:00和10月2日的01:00就分不清了。
四、遇到不同情况,让公式知道该怎么处理
25|AND:几个条件都满足,才算通过
比如我们想筛出“电量大于0,而且电量、电价都填的是数字”的记录,可以写:
=AND(D2>0,COUNT(D2:E2)=2)
本例得到TRUE,就是这两个条件都满足。AND就是“既要这样,也要那样”。这里没有要求电价必须大于0,因为真实价格可能是负数;电量是0的记录也可以另行查看,不必直接删掉。
26|OR:符合其中一个条件,就找出来
如果负电价要看,高于600元/MWh的价格也要看,可以写:
=OR(E2<0,E2>600)
第2行的200元返回FALSE,第3行的800元返回TRUE。这是在帮你挑出值得关注的记录,不是在判定价格有错。600是这次练习自选的分界,负价本身也不代表数据错误。
27|NOT:把某个条件反过来
这条公式这么读:=NOT(B2="SIM-U01"),“这行不是SIM-U01吗?”第2行返回FALSE,SIM-U02所在行返回TRUE。
想先排除一个客户、看看其余客户时,可以这样设置筛选条件。不过空着的客户栏也满足“不是SIM-U01”,所以漏填客户的行要另外处理。
28|IF:有电量就算单价,没电量就提示
计算每兆瓦时成本时,金额要除以电量。如果电量是0,就不该继续相除。
=IF(D2=0,"无电量",F2/D2)
本例得到200元/MWh;电量是0时显示“无电量”。IF就是“如果……就……否则……”。如果一行没有电量却有金额,别直接忽略,继续查查是固定费用还是填错了。
29|IFNA:查不到价格,就明明白白标出来
先新建“价格表”。A1写“时间”,B1写“电价元/MWh”;把“明细”的A2:A5复制到价格表A2:A5,把E2:E5复制到价格表B2:B5。这样每个时点都对应一个价格。本例只放同一地区、同一种价格,不混入旧版数据。
=IFNA(VLOOKUP(A2,价格表!$A$2:$B$5,2,FALSE),"待匹配")
本例查到200;找不到时会显示“待匹配”。IFNA专门处理#N/A这类未找到结果的错误。查不到价格时,写出问题比填个0更有用,否则漏价的那笔电量会显得像是免费买来的。
30|IFERROR:报错时,换成看得懂的提醒
=IFERROR(F2/D2,"核查电量或金额")正常算出200;遇到除以0等错误,就显示“核查电量或金额”。
它能处理的公式错误比IFNA多,但提醒只是为了方便查错,不是把错误消除了。如果公式没报错,只是引用了错误的电价,它也看不出来。
五、价格在另一张表里,怎样准确找过来?
31|LOOKUP:按价格高低分档
新建“分档表”,A2:A5填0、300、600、1000;旁边B2:B5填低档、中档、高档、极高档。这四档是我们自己为了方便分析设的。
=LOOKUP(E3,分档表!$A$2:$A$5,分档表!$B$2:$B$5)
800会被分到“高档”:它达到600,但还没到1000。左边的数字一定要从小到大排。LOOKUP是按区间分档的,不是用来精确查某个交易时点的。负价低于这张表的第一档时,会报#N/A,得单独处理。
32|VLOOKUP:按时间找到对应电价
接着用第29项建好的“价格表”。想查01:00的价格,在“明细”的空白格输入:
=VLOOKUP(A3,价格表!$A$2:$B$5,2,FALSE)
结果是800元/MWh。VLOOKUP在选定范围的第一列找到A3这个时间后,取同一行第2列的价格;FALSE要求时间完全相同。查之前先看看,同一个时间是不是只对应一条价格。如果还有不同地区、日前和实时等多种价格,就不能只凭时间来找。
33|HLOOKUP:价格横着排,也能找
有些表把季度横着排。新建“季度参数”:A1:D1依次填季度、Q1、Q2、Q3;A2:D2填参考价、300、350、400,单位是元/MWh。
=HLOOKUP("Q2",季度参数!$A$1:$D$2,2,FALSE)
结果是350。HLOOKUP在第一行找到Q2后,取该列第2行的值。VLOOKUP沿第一列往下找,HLOOKUP沿第一行往右找,表怎么摆,函数就怎么选。
34|INDEX:告诉它位置,把那个数取出来
=INDEX(价格表!$B$2:$B$5,3)得到300元/MWh。
就是“在B2到B5这四个价格里,取第3个”。这里从B2开始数,所以第3个在B4,不是工作表第3行。单独用INDEX,得自己知道位置;下一项MATCH就是来找位置的。
35|MATCH:先找位置,再交给INDEX取价格
=MATCH(A3,价格表!$A$2:$A$5,0)得到2,说明01:00在这四个时间里排第2个。末尾的0,是要求两边完全相同才算找到。
把两步合起来,就是:
=INDEX(价格表!$B$2:$B$5,MATCH(A3,价格表!$A$2:$A$5,0))
结果是800元/MWh。MATCH负责找哪一行,INDEX负责拿那一行的价格。查找列和价格列可以分别指定,表格列位置变化时也更容易调整。同一时点有多个价格时,仍要先分清自己要哪一种。
36|CHOOSE:方便切换低、中、高三种假设
做零售报价测算,可能想看看:采购价分别按300、400、500元/MWh,利润会差多少。
=CHOOSE(2,300,400,500)
结果是400,也就是从后面三个价格里选第2个。把前面的2改成1或3,就能切换假设。这些价格只拿来试算,不是预测结果,也不代表三种情况的概率相同。
六、日期弄清楚,才不会错
37|TODAY:算算合同还有多久到期
=DATE(2026,12,31)-TODAY()计算今天到2026年12月31日还差多少天。假设今天是2026年10月30日,结果是62天。
拿它做合同到期提醒很方便,因为过一天,结果就会跟着变。但如果要保存“当时还有多少天”的历史记录,就要把那一次的结果固定下来。到期当天算不算,按合同约定来。
38|DATE:把年、月、日拼成一个日期
=DATE(2026,10,1)得到2026年10月1日。做按日、按月汇总时,可以用它写清楚统计从哪天开始。
它比只写“10/1”更明确,但不会帮你拦住所有输入错误。例如月份写13,Excel会顺延到下一年,而不是提醒“月份填错”。年份、月份、日期仍要核对。
39|YEAR:从日期里取出年份
=YEAR(A2)得到2026。整理跨年的采购记录、做年度电量比较时,可以用它增加一列年份。
先确认取的是哪种日期:用电日期、开票日期还是合同签订日期。同样一笔业务,这几个日期可能不在同一年,年度报表要选对。
40|MONTH:按月份查看电量和成本
=MONTH(A2)得到10,做月报时很常用。
但“10月”没有年份。把两年的数据放在一起,仅按10汇总,就会把两年10月合并。可以把年、月一起用,也可以用=DATE(YEAR(A2),MONTH(A2),1)得到2026/10/01,用这个日期代表2026年10月。
41|DAY:取出这是一个月的第几天
=DAY(A2)得到1,方便按月内日期排列数据,看看哪一天少了记录。
它只能告诉你“几号”,不能告诉你星期几或是不是节假日。做负荷分析时,工作日、周末、调休等信息还要配合日历补充。
42|NOW:显示现在的日期和时间
=NOW()会显示当前日期和时间,用在报表上可以提醒自己这次计算是什么时候。
别把时间更新和电价数据更新当成一回事。若要记录数据什么时候下载、什么时候发布,就保存当时的实际时间。不然每次打开表格,NOW都会把它改成“现在”。
43|DATEDIF:算两个日期相隔多少天
=DATEDIF(DATE(2026,10,1),DATE(2026,10,31),"D")得到30,最后的D表示按天计算。
算合同期间,或者两个结算日期隔了多久,都可以用DATEDIF。10月1日到10月31日相隔30天;如果业务要求首尾两天都算,那就是31天。这两种算法别混,开始日期也不能晚于结束日期。
七、导出的文字看着乱,这些函数
44|LEFT:从左边取出地区名称或编号
我们给一个示例文件起名GD-DA-20261001,其中GD表示地区,DA表示日前,后8位是日期。
=LEFT("GD-DA-20261001",2)得到GD,也就是从左边取2个字符。文件都按同一种方式命名时,就能按前两位分类。这里的命名是示例,实际文件要先看清自己的命名规则。
45|RIGHT:从右边取出日期
=RIGHT("GD-DA-20261001",8)得到20261001。
每天收到一批同格式文件时,RIGHT能把末尾日期取出来。不过取出来的还是文字,得转成日期后才能做日期计算。如果文件名后面还有.xlsx等后缀,就要先把后缀去掉,不能直接取最后8位。
46|MID:取出中间的交易品种
=MID("GD-DA-20261001",4,2)得到DA,意思是从第4个字符开始取2个。
地区、日前或实时、日期,就能这样拆成几列。MID要求文件名的格式比较整齐。如果地区名称有长有短,中间内容的位置也会变,这时再用下面的FIND找位置。
47|FIND:先找到分隔符,再拆文字
=FIND("-","GD-DA-20261001")得到3,就是第一个横线在第3位。再配合LEFT:=LEFT("GD-DA-20261001",FIND("-","GD-DA-20261001")-1),就能取出横线前面的GD。
48|LEN:找出多余空格这类小问题
两个客户编号看着一样,却总是匹配不上,原因可能只是末尾多了一个空格。
=LEN("SIM-U01")得到7,=LEN("SIM-U01 ")得到8。
49|LENB:遇到旧系统的字节长度要求时再用
=LENB("电价")在支持双字节语言的Excel环境中,通常得到4;换一种语言设置,结果可能不同。
普通电量和成本分析很少用到它。只有旧系统明确按这类字节长度限制导入内容时,才需要用LENB。
50|TEXT:把日期整理成容易辨认的样子
想把时间和客户编号放在一起,方便核对,可以写:
=TEXT(A2,"yyyy-mm-dd hh:mm")&"|"&B2
结果是2026-10-01 00:00|SIM-U01,哪天、几点、哪个客户一眼能看明白。TEXT会把结果变成文字,所以原来的日期列要留着。这里保留到分钟;如果原数据精确到秒,就不能省掉秒后还认为每条记录都能分清。
51|VALUE:把看起来像数字的文字变回数字
=VALUE("123.45")得到数值123.45。电量从网页或其他文件复制过来,不能正常求和时,先看看它是不是文字。如果是,再用VALUE转回数值。
但客户编号不要随手转成数字,比如00123转完会丢掉前面的0。带单位的金额还要先去掉单位,具体写法见第53项。
52|REPLACE:替换指定位置的一段文字
=REPLACE("GD-DA-20261001",7,8,"20261002")得到GD-DA-20261002,也就是把从第7位开始的8个字符换成新日期。
按固定规则生成新报表名称时,REPLACE很好用。但别弄混:这里改的是文件名,不是文件里的数据。生成10月2日的名称后,里面还得放10月2日的数据。
53|SUBSTITUTE:去掉文字里的单位,再转成数字
有的电价单元格写着“123.45元/MWh”,先去掉已确认的单位,再把剩下的文字转成数值:
=VALUE(SUBSTITUTE("123.45元/MWh","元/MWh",""))
结果是123.45。这里只是去掉文字,没有换算单位。0.35元/kWh等于350元/MWh,不能删掉单位后就直接当0.35元/MWh。
八、最后三个:编序号、找列数、按地址取值
54|ROW:给明细加上序号
=ROW(A2)-ROW($A$2)+1得到1,向下填充就是2、3、4。
打印明细、讨论某一行时,有序号会方便些。不过重新排序或插入记录后,行号可能变化。想长期追踪一笔交易,仍应记录它属于哪个客户、哪个时间和哪个交易品种,不能只记“第20行”。
55|COLUMN:知道某一列排第几
=COLUMN(E2)得到5,说明E列是第5列。本例第5列放的是电价。
整理宽表、检查取数位置时可以用它。如果下载的新模板调整了列顺序,第5列可能已经变成别的内容,所以还要看表头,别只记住列号。
56|INDIRECT:把单元格里写的地址,变成真正的引用
另建“引用演示”工作表,B1写E2,E2填200,在F2输入=INDIRECT(B1),就得到200。它先读到B1里的“E2”,再去E2取值。
由选项控制取数位置的小工具,常会用到INDIRECT。不过表格越复杂,文字写成的地址越不好排查;插行、改名后,也不一定自动跟着调整。日常购电账本能直接引用清楚的单元格,就不必绕这一层。
来个练习题,哈哈
先算两个客户各自的账:SIM-U01买了5MWh,花了3400元,平均每MWh花680元;SIM-U02同样买了5MWh,花了900元,平均每MWh花180元。合起来10MWh、4300元,每MWh是430元。
再看800元/MWh那一笔:它占总电量40%,却花掉总金额的约74.42%。这时就要问:“为什么偏偏在这一小时买得多?”可能是必须用电,也可能与申报量或合同安排有关,得往下查才知道。
练习时,可以故意把一个电量存成文字、漏填一个价格,再重复放入一条记录。看看自己能不能发现问题、恢复原来的账,并解释为什么四个价格平均是350元/MWh,实际购电成本却是430元/MWh。















































































