楼主 syz105729913 |
Q:如何判断单元格里的数据类型为日期? A:可用以下公式
Book1.rar |
2楼 chrisfang |
这个函数判断是有致命缺陷的,即这个函数本质上是对单元格数字格式的判断。如果把一个文本数据的单元格数字格式设置为日期,函数结果是会误判为日期的。 |
3楼 apolloh |
修改一下,应该可以解决方版提出的问题。
|
4楼 chrisfang |
同样有问题,非日期的数值依然会被误判,例如小于0的。 |
5楼 apolloh |
=IF(AND(LEFT(CELL("format",A1))="D",N(A1)>0)),"日期") 应还有最大日期的问题。 |
6楼 toby08 |
好像还要保证A1的数是大于或等于1这样判断才有意义。 |
7楼 chrisfang |
呵呵,还是有问题。以数字格式判断总归是有缺陷的。比如把一个日期数据自定义格式为为“yyyy年”,判断就会出错了。 |
8楼 apolloh |
必须跳出这个思路
|
9楼 chrisfang |
从判断日期数据这个角度上来讲,黄版主的这个公式没问题很正确。但恐怕有违发表这个帖子的初衷,这个帖子实际上是希望排除掉单纯显示纯数值的情况,如顶楼附件中A2和A4单元格所示。 这个帖子本意应该是想和VBA函数中的日期数据判断做个类比,还没试过VBA函数到底是怎样进行判断的。 |
10楼 apolloh |
哦,如果是这样,isdate判断A5时应该也是非日期。因为它也是判断单元格的格式是否包含日期格式的元素,而A5是常规格式“G/通用格式”下的日期。所以,孙版的例子也不太合适。 get.cell(7,a1)可以判断日期的具体格式,但如果把自定义格式也包含进来的话,这个判断将会非常冗长。 定义名称Format,用宏表函数获取具体日期格式
判断日期格式数据.rar |
11楼 syz105729913 |
呀,昨天没来,已经讨论了这么多了,我确实是想用工作表函数来代替VBA中的ISDATE函数 看来没那么简单 |
12楼 chrisfang |
自定义格式可能性非常多,比如对一个数值型数据的单元格自定义格式为 #\y,上面的判断还是会出现误差。 我觉得这个命题本身应该讨论一下,比如到底满足怎样的条件应该属于“日期”? |
13楼 gouweicao78 |
2958465是Excel最大日期9999-12-31 |