(单元格 A1)发票参考号EPS-I-S151001
(单元格 B1)发票日期 2015 年 10 月 5 日
一旦手动输入发票日期,发票参考号将自动生成。
Reference No的格式如下:EPS-I-S151001。
“EPS-IS”始终都是固定字符。
前 2 位数字“15”=“年份”
接下来的 2 位数字“10”=“月份”
最后 2 位数字“01”= 从 01 开始的连续数字。
例如:
发票编号 发票日期
EPS-I-S151001 2015 年 11 月 10 日
EPS-I-S151002 2015 年 11 月 15 日
EPS-I-S151003 2015 年 11 月 30 日
最后 2 位数字将继续按顺序运行。
前 4 位数字将受月份或年份的任何变化影响。月份或年份的任何变化都将导致后 2 位数字重置为01。
发票编号 发票日期
EPS-I-S151001 2015 年 11 月 10 日
EPS-I-S151002 2015 年 11 月 15 日
动力传动系统1201 22-十二月-15(新月)
EPS-I-S151202 2015 年 12 月 23 日
EPS-I-S151203 2015 年 12 月 25 日
电动助力转向系统0101 03-简-16 (新年/月)
EPS-I-S160102 2016 年 1 月 15 日
EPS-I-S160103 2016 年 1 月 22 日
答案1
我认为我们已经为你找到了解决方案:
忽略略有不同的日期格式,这只是格式化。我需要留空第一行数据,因为日期会与前一行进行比较,而 LibraOffice Calc 中该行需要为空白或日期(在 Excel 中跳过它可能有效,但我没有现成的权限来测试这一点)。另一种方法是将第 2 行中的第一个发票号硬编码。
因此,在 A3 中开始的公式将是:
=IF(ISBLANK(B3),"","EPS-I-S"&TEXT(B3,"yy")&TEXT(B3,"mm")&TEXT(IF(MONTH(B3)=MONTH(B2),VALUE(RIGHT(A2,2))+1,1),"00"))
将其复制到 A 列,直到您需要为止。单元格将保持空白,直到您在 B 列中输入日期。这就是 ISBLANK 测试在开始时所做的。您已经弄清楚了接下来的几个术语,尽管您在更新问题时将其删除了。它们提供前缀、年份和月份。
这引出了序列号。年份的变化也涉及月份的变化(假设您不会在下一张发票前经过整整一年,在这种情况下,您要担心的事情会比这个电子表格更大)。因此,如果日期与前一个日期在同一个月,它会添加1
到数字中。否则它以 开头1
。
答案2
如果您使用“辅助列”——包含您不想显示的中间结果但用于构建您想要的值的列——这样的问题会更容易解决。对于这个问题,我将使用一个辅助列,一旦您看到它们,它的内容就一目了然。我将使用 Column G
。参考您问题的先前版本,我假设您的数据从第 3 行开始,并且我假设该单元格G2
为空白。
- 设置
G3
为=IF(TEXT(B3,"yymm")<>TEXT(B2,"yymm"), 1, G2+1)
这表示“如果此行的发票日期 (B3
) 与上一行的日期 ( ) 有不同的年份或月份B2
,则设置G3
为1
;否则,添加1
到上一个值 (G2
)。 ”即,这是一个正在运行的系列,1
每当有新月份时就会重置为。 - 设置
A3
为=IF(B3="", "", "EPS-I-S" & TEXT(B3, "yymm") & TEXT(G3, "00"))
表示“如果此行(单元格 )上的发票日期B3
为空白,则不显示任何内容。否则,使用常量字符串、列 中日期的年份和月份B
以及列 中的单数G
(格式化为两位数,必要时带有前导零)构建发票参考号。”
然后将公式在列中向下拖动/填充到A
您G
想要的位置。
注意:一旦一切正常,您就可以隐藏辅助列。
答案3
感谢提供公式,它一直运行到序列号 100。100 之后,它从 001 重新启动 这是我的公式:=IF(ISBLANK(N6),"",F6&"-"&TEXT(O6,"yyyy")&"-"&TEXT(IF(YEAR(N6)=YEAR(N5),VALUE(RIGHT(A5,2))+1,1),"000")) 其输出为 OHSAS-2020-001 / EMS-2019-001 等,其中 OHSAS / EMS 是标准,2020/2019 是年份,001 是数字