我在 Excel 中有一些包含日期的单元格。有些日期的格式是 dd-mm-yy(例如 20-01-15),有些日期的格式只是 mm-yy(例如 01-15)。我想确定哪些单元格包含用户指定的日期。
据我所知,这是不可能的 - 当用户不输入月份中的日期时,excel 的底层日期对象会存储月份的第一天。但是,单元格中不会显示日期,因此必须有某个标志或设置。
如果我可以提取显示的单元格文本,那么我可以解析它来回答我的问题,但我找不到不使用 VBA 即可提取显示的单元格文本的工作表函数。
答案1
如果用户输入日期,他们可以通过格式化来隐藏日期、月份或年份。但这只是单元格显示。但是,如果你看看公式栏;这一天将会清晰可见。
如果你唯一感兴趣的是确定用户选择了哪一种格式,(而不是实际的日期),使用=单元格()工作表函数。
答案2
您可以通过将单元格格式化为文本来阻止 Excel 自动插入月份的第一天。但这必须在输入数据之前完成。
答案3
你的问题有点模糊。我会回答你提出的问题。
存储的内容
如果您输入的内容被 Excel 解释为日期,它会将其存储为日期,而不是输入的实际字符串。日期存储为表示自参考日期以来的天数的数字。因此,存储的值实际上是天数,它不包含或不包含天数取决于是否输入了天数。
其他所有内容(年、月、月日等)均由此得出,格式规范决定显示哪些详细信息。如果输入了月/年日期,则将其存储为日期的唯一方法是将其作为特定日期,因此 Excel 假定为每月 1 日。
单元格查询无用
如果 Excel 将输入解释为日期,则不再分析实际输入以确定用户输入的内容(因此显示单元格文本的功能将无济于事)。
然而,在某些情况下您可能能够假设输入的内容。 我在 Excel 2007 中做了一个快速测试(我认为这种行为在后续版本中没有改变)。
如果 Excel 指定了月份的某一天(因为没有输入任何日期),那么该日期将是该月的 1 号。如果用户的所有日期都是该月的 1 号,并且没有理由始终如此(即,日期没有定义为始终为 1 号),则表明只输入了月份和年份。
相反,如果显示为月份/年份的任何日期包含不是 1 号的日期(通过从另一个单元格引用单元格并在那里显示 mm/dd/yy 来检查),则表明用户输入了日期,但格式禁止了该日期。用户不太可能只在除月份 1 号以外的日期输入日期。
如果单元格已预先设置日期格式,则日期输入将以该格式显示。如果单元格具有常规格式,则日期输入将以默认日期格式显示,该格式显示的信息级别相同。因此,例如,当我在具有常规
07/15
格式的单元格中输入内容时,它显示 15-Jul;与我输入的内容不完全相同,但信息级别相同。如果日期输入有混合格式,则表明单元格未预先格式化。因此,仅显示月份和年份的日期很可能被输入为月份和年份。