这个自定义validation不起作用,但我不知道发生了什么
我知道excel“程序devise”在同行程序员中并不是很受欢迎,但是我一直在努力做到这一点,并且pipe理在我的脖子上。
我有在Excel中的自定义validation:
=AND(LEN(AV15)=10,((VALUE(LEFT(AV15,2)))<=31),NOT(ISERROR(VALUE(LEFT(AV15,2)))),MID(AV15,3,1)="/",((VALUE(MID(AV15,4,2)))<=12),NOT(ISERROR(VALUE(MID(AV15,4,2)))),MID(AV15,6,1)="/",((VALUE(RIGHT(AV15,4)))<=2100),NOT(ISERROR(VALUE(RIGHT(AV15,4)))))
上面的validation应该接受以下格式的任何有效date:
dd/mm/yyyy
这似乎是部分工作,但不知何故,它不会接受比“12”低的一天,例如:
14/12/2010 -->accepted 13/10/2010 -->accepted 25/10/2010 -->accepted 12/10/2010 -->gives error
乍一看, ((VALUE(MID(AV15,4,2)))<=12)
导致这种行为,但我改变它为31,我仍然得到错误,我需要validation来承认input:
nn/nn/nnnn
其中“n”是一个数字,我不在乎,如果他们input99/99/9999我可以检查,稍后vba代码,但input必须具体有10个字符。
任何帮助将不胜感激
我把你的公式,当你把一个'
date之前工作就好了。 发生什么事情是,当你把任何一个值低于13
值作为评估date的date
,就像在Excel中存储一个number
。 当你超过13
它会评估为一个string
。 所以你需要做的是将单元格格式化为Text
格式。 那么它应该工作得很好。
要查看下面的工作,将date值放在A1中
A1 – > '14 / 12/2010
把下面的公式放在下面
B1 – > =MID(A1,3,1) = "/"
C1 – > =MID(A1,6,1) = "/"
D1 – > =IFERROR(AND(VALUE(MID(A1,4,2)) >= 1, VALUE(MID(A1,4,2)) <= 12), FALSE)
=AND(VALUE(RIGHT(A1,4))>=2000,AND(VALUE(RIGHT(A1,4))<=2100))
F1 – > =AND(B1,C1,D1, E1)
上面的公式是分开的,你将不得不把它们组合起来(就像在单元格F1中完成的那样)。
希望有所帮助。
编辑 :validation的组合公式( 注意 ,我用A1作为单元格)
=AND(MID(A1,3,1) = "/", MID(A1,6,1) = "/", IFERROR(AND(VALUE(MID(A1,4,2)) >= 1, VALUE(MID(A1,4,2)) <= 12), FALSE), AND(VALUE(RIGHT(A1,4))>=2000,AND(VALUE(RIGHT(A1,4))<=2100)))
你不能简单地在单元格中select正确的格式吗?
- 右键单击单元格,然后select“格式单元格”
- 从左侧导航select“自定义”
- 在“types”框中input:dd / mm / yyyy
Excel似乎将诸如10/12/2010
值识别为date,并以不同的格式(例如自1900年1月1日以来的天数等)存储在内部。 发生这种情况时,在这些date值上使用LEFT
, MID
和RIGHT
时,Excel不会从内部格式转换回来。 特别是,我把2010年10月12日放在单元格A1中,将=LEFT(A1,10)
放在单元格B1中。 细胞B1然后显示我的价值40522
。 (我在英国并使用Excel 2010 Starter,在其他地区或其他版本的Excel中可能会得到不同的值。)
尝试用TEXT(AV15, "DD/MM/YYYY")
replace公式中所有出现的AV15
。 或者,在另一个单元格中放入=TEXT(AV15, "DD/MM/YYYY")
,并在公式中使用这个其他单元来代替AV15
。
如果你不关心VBA,那么简单的UDF呢?
Public Function DateFormat(rng As Range) Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "\d\d/\d\d/\d\d\d\d" test = regEx.Execute(rng.Value).Count > 0 End Function
如果单元格的值匹配nn / nn / nnnn(其中n是任意数字),则返回true。 那么你可以简单地说=DateFormat(AV15)