
在Excel销售报表中,希望每手工录入1行销售记录,订单号自动生成。已有销售订单系统的企业不需要这项功能,识别订单应使用指定的订单号。但尚无销售系统的企业,可以考虑加入该功能,把销售报表同时作为销售记录单使用。Excel模板中实现自增订单号最简单的方法是利用函数公式。由此可见其灵活性,不止可用于分析计算,也可用于事务处理。

订单号本身只是个具有一定结构的文本。我们先来拆解它的结构。
例如订单号SN202209170001可分解成三部分:
首先SN是订单号字符头。可以没有,但如果想要分类,则必须考虑它。如普通订单是SN开头,紧急订单是EM开头。本文案例并未做类似分类。如需要,须在输入表增加一个“订单类型”字段,供生成订单号时引用。
接着中间的20220917,我们不能用日期格式如2022-09-17来表示,所以这部分用8位长度的文本。以日期划分订单是一种合理的编码思路。
最后4位是0001,表示当日订单的计数,即当日每增加一笔销售,计数将自动加1。其位数由业务量决定。4位表示单日最大订单量不能超过1万单。如不够用,应增加位数。
订单号编码思路确定了,接下来用函数公式实现它。从之前的拆解我们已清楚:将订单号的三部分文本拼接起来即可。

字符头可引用或直接以常量写在公式里。本文我们选择常量。
日期部分需生成当日日期,包含年月日,然后转换成文本。
自增部分需跟踪计算订单数,数值按“0000”4位占位符格式转换成文本。
最后拼接这三部分。

最终实现的函数公式是这样:

如何更好地理解函数公式?
函数,本质是一个变换。向函数输入数据,它将输出另外一些数据。只要函数确定、输入确定,输出就是确定的。这是函数的优点,即没有副作用(Side Effect)。此外函数天然支持嵌套,一个函数的输出可作为另一函数的输入。输入数据通常称为参数。函数的参数并非必须。Excel中的函数自然拥有这些特点。
因此当我们用Excel里500多个函数公式时,如若不了解它,不妨先弄清函数和输入分别是什么。

示例

由于自增订单号中,TEXT函数最重要。我们以它为例看看如何使用它。
TEXT函数有两个参数:value和format_text,功能是将value这个数值变成文本,且变换成指定的format_text格式。
个数值
所以TEXT函数写成:TEXT([@日期],"yyyymmdd")。第一个参数输入的是日期。请注意第二个参数format_text,即引号里的内容,就是指定的格式。yyyy表示年占4位字符,mm和dd分别表示月、日占2位字符。这是日期格式的表示法。同样TEXT(COUNTIF($B$6:[@日期],[@日期]),"0000"),第一个参数是数值,要求数值呈4位占位符形式,于是使用0这个数值的专用格式符号。
COUNTIF函数涉及到“范围”这个概念。后面我会连同SUMIF函数一并解释。
公式中我还用到了“@日期”。这是表格的写法,表示指定列的当前行所对应的值,相当于引用了一个单元格。表格要优于单元格引用,既方便我们阅读公式,而且由于背后程序运用了迭代,也能提升一部分计算性能。
#五分钟学到手#