我知道excel“编程”在其他程序员中并不是很受欢迎,但是我一直在努力做到这一点并且管理层在我的脖子上......
我在excel上进行了自定义验证:
=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)))))
上述验证应该接受以下格式的任何有效日期:
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并且仍然出现错误,我需要验证以接受输入:
nn/nn/nnnn
其中“n”是一个数字,我不在乎他们是否输入99/99/9999我可以稍后检查vba代码,但输入必须具有10个字符。
任何帮助都将受到高度赞赏
答案 0 :(得分:3)
我把你的公式放进去,当你把'
放在它工作的日期之前就好了。发生了什么事情,当您将任何值13
置于评估日期的日期时,就像date
一样,它在Excel中存储为number
。如果您有13
以上,则评估为string
。因此,您需要做的是将单元格格式化为Text
格式。然后它应该工作得很好。
答案 1 :(得分:1)
要查看以下内容是否有效,请将日期值放在A1
中A1 - &gt; '14 /二千零十分之十二
如下所述,列出以下公式
B1 - &gt; =MID(A1,3,1) = "/"
C1-&gt; =MID(A1,6,1) = "/"
D1 - &gt; =IFERROR(AND(VALUE(MID(A1,4,2)) >= 1, VALUE(MID(A1,4,2)) <= 12), FALSE)
E1 - &gt; =AND(VALUE(RIGHT(A1,4))>=2000,AND(VALUE(RIGHT(A1,4))<=2100))
F1 - &gt; =AND(B1,C1,D1, E1)
上面的公式是分开的,你必须将它们组合起来(就像在单元格F1中完成的那样) 希望有所帮助。
编辑:验证的组合公式将是(注意,我已将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)))
答案 2 :(得分:0)
你能不能简单地在单元格中选择正确的格式?
答案 3 :(得分:0)
Excel似乎将诸如10/12/2010
之类的值识别为日期,并以不同的格式在内部存储它们,例如自1900年1月1日以来的天数等等。当您在这些日期值上使用LEFT
,MID
和RIGHT
时,Excel不会从其内部格式转换回来。特别是,我将10/12/2010
放在单元格A1中,将=LEFT(A1,10)
放在单元格B1中。然后,单元格B1显示值40522
。 (我在英国并使用Excel 2010 Starter。您可能会在其他语言环境或其他版本的Excel中获得不同的值。)
尝试使用AV15
替换公式中出现的所有TEXT(AV15, "DD/MM/YYYY")
。或者,将=TEXT(AV15, "DD/MM/YYYY")
放在另一个单元格中,并使用公式中的其他单元格代替AV15
。
答案 4 :(得分:0)
如果你不关心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匹配,则返回true,其中n是任意数字。
然后你可以简单地说=DateFormat(AV15)