我正在使用excel和约会。情况如下: 我们有一个包含许多选项卡的月度报告,宏将导入到中央电子表格中,它有大约120列。导入后,我需要在最后几列中添加一些与数据相关但未包含在数据中的公式,其中一个是期间编号(我们为一年中从4月1日和13日开始的客户工作一年中有4周的时间)。为了完成这个,我有一个单独的表单,其中包含A列中的所有日期,然后是以下列中的句点和其他数据。一个简单的Vlookup查找日期并返回句点。
但是,有些日期存储为文本(因此vlookup有#N / A),简单修复,粘贴特殊 - 添加一个空白单元格,然后它可以工作。如果我手动完成,这确实有效。但这是为了为用户完成所有工作,所以我尝试按照以下代码以编程方式进行:
'Sheets("dates and Periods").Activate
'Range("P1").Copy
'Sheets("Data").Activate
'Range(Cells(2, 5), Cells(lastrow, 5)).PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
'Range(Cells(2, 5), Cells(lastrow, 5)).NumberFormat = "dd/mm/yyyy"
我从"日期和期间"得到空白单元格。因为我知道它一定是空白的。
现在,当我运行此代码时,它适用于大多数值。但是对于E列中日期小于月份的所有日期,例如4月1日,5月4日等,它会切换日期和月份,这不是格式化,通过更改为长日期我可以看到它已经更改了周围的数据。
有解决方法吗?我找了一个解决方案,但我在搜索时遇到的所有问题都与1904日期系统或格式有关。
任何帮助将不胜感激。
解决方案:[将其分解成部分并将其重新组合在一起]
For Each cell In Range(Cells(2, 5), Cells(lastrow, 5))
cell.Value = Mid(cell, 4, 2) & "/" & Left(cell, 2) & "/" & Right(cell, 4)
Next cell
答案 0 :(得分:1)
我多次遇到这个问题。答案通常特定于解决方案,但您可以尝试将日期转换为dd-mmm-yyyy格式的字符串,然后再返回。
答案 1 :(得分:0)
当您在Excel单元格中输入看起来像日期的内容时,它会根据Windows区域设置对其进行解析。不适合的字符串作为文本输入,字符串会变为Excel日期。后者通常与预期日期不同。
我建议在导入过程中更正此问题。具体如何执行此操作取决于您未包含的细节,但过程是使用数据/导入过程并通过文本导入向导。该向导将允许您指定每列的格式;包括E的日期格式。这将确保Excel将您的所有日期正确理解为日期。因此,如果传入的日期格式是MDY,您将指定MDY; Excel将正确存储它,然后以默认设置或以您格式化该列的任何方式显示它。
如果可行,另一个选项是更改报告生成器,以便生成与Windows区域设置的短日期格式相同格式的日期
答案 2 :(得分:0)
我将通过电子邮件发送给我的大量文件导入到数据库中,这一直是个问题。问题不是由不正确的数据,错误的格式化或任何此类事情引起的,而只是excel中的错误(我相信微软称之为功能),它试图以美国格式理解日期并自动“纠正”任何内容认定。它变得更糟,因为如果一个日期不能用美国格式,那么它会把它转换成一个文本文件,让你有一些日期格式化,另一种日期。
我找到的唯一解决方案是更改源表上的数据,以便Excel无法以任何方式将其理解为日期,然后导入它,然后将其转换回来,这是一个庞大的算法。微软请把它排除在外,它浪费了很多时间编程解决方法!