Excel 单元格格式/数据验证/vba以确保单元格中的输入正确
我们有一张发票,格式非常严格,必须符合一定的格式。我们手动执行此操作,我经常会得到多个变体,因此我试图创建数据验证来控制发票号的输入 以下是格式: YYYYMMDD-RNNExcel 单元格格式/数据验证/vba以确保单元格中的输入正确,excel,validation,vbscript,Excel,Validation,Vbscript,我们有一张发票,格式非常严格,必须符合一定的格式。我们手动执行此操作,我经常会得到多个变体,因此我试图创建数据验证来控制发票号的输入 以下是格式: YYYYMMDD-RNN 发票号码的长度正好为12个字符 前4个字符是年份(全年,如2018年) 接下来的2个字符是月份(如02,必须有1到9的前导零),并且不允许大于12 接下来的2个字符是日期(如08,必须有1到9的前导零),并且不允许大于31 下一个字符是“-” 下一个字符是区域标识符。允许的数字为0到9 最后两个字符是顺序的#,以01开头。必
需要一个公式来验证这一点。以下公式应该可以工作,但我无法在自定义数据验证中插入它。我怀疑有字符限制。如果有人可以解释一下,那就太好了
=如果(和)(左(A1;4)*1=2000);如果(和)(中(A1;5;2)*1>=1;中(A1;5;2)*1=1;中(A1;5;2)*1=0;中(A1;10;1)*1=1;中(A1;11;2)*1在标准模块代码表中尝试此自定义项
Option Explicit
Function invoiceCheck(rng As Range) As Boolean
Dim tmp As String
tmp = rng.Value2
'check length
If Len(tmp) <> 12 Then Exit Function
'check valid date
If Not IsDate(Join(Array(Mid(tmp, 5, 2), Mid(tmp, 7, 2), Left(tmp, 4)), "/")) Then Exit Function
'check date is today or earlier
If CDate(Join(Array(Mid(tmp, 5, 2), Mid(tmp, 7, 2), Left(tmp, 4)), "/")) > Date Then Exit Function
'make sure there is a hyphen
tmp = Split(tmp, "-")(1)
invoiceCheck = IsNumeric(tmp)
End Function
选项显式
函数invoiceCheck(rng作为范围)作为布尔值
将tmp设置为字符串
tmp=rng.Value2
“检查长度
如果Len(tmp)12,则退出功能
'检查有效日期
如果不是IsDate(Join(数组(Mid(tmp,5,2),Mid(tmp,7,2),Left(tmp,4)),“/”),则退出函数
'检查日期为今天或更早
如果CDate(Join(数组(Mid(tmp,5,2),Mid(tmp,7,2),Left(tmp,4)),“/”)>Date,则退出函数
'确保有一个连字符
tmp=拆分(tmp,“-”)(1)
invoiceCheck=IsNumeric(tmp)
端函数
除了起草一份需求清单之外,您还为解决方案做了什么吗?我能够使用LEN(A1)=12验证长度;我能够使用=EXACT(左(A1,3),“201”)验证201;我能够使用MID(A1,9,1)=“-”验证连字符;我能够使用=和(ISNUMBER(--MID(A1,11,1)),ISNUMBER(--MID验证最后两个数字(A1,12,1)))非常感谢!!!!!!!!!这很有效。自定义数据验证确实有字符限制。我使用了您在发票旁边的另一个单元格中给出的公式,并在自定义数据验证中使用了此公式=和(B1)=TRUE。