Excel(VBA):格式为日期的数据无法识别

Excel(VBA):格式为日期的数据无法识别,excel,vba,date,type-conversion,Excel,Vba,Date,Type Conversion,所以我有一个excel文件,里面有一些VBA代码。问题在于,我需要首先按条形码编号对大量数据进行排序,然后按访问日期(每个条形码访问多次)排序 这一切都适用于我生成的随机测试数据。它按条形码排序,然后按日期从最晚到最早排序。太棒了 但事实并非如此,当我尝试使用实际数据时,情况并非如此:条形码排序正确,但日期却不正确。实际数据将来自一个Android应用程序(Xscan),该应用程序具有CSV文件作为输出 不幸的是,数据导出看起来像“2014年10月21日”。当我尝试对它进行排序时,它只根据第一个

所以我有一个excel文件,里面有一些VBA代码。问题在于,我需要首先按条形码编号对大量数据进行排序,然后按访问日期(每个条形码访问多次)排序

这一切都适用于我生成的随机测试数据。它按条形码排序,然后按日期从最晚到最早排序。太棒了

但事实并非如此,当我尝试使用实际数据时,情况并非如此:条形码排序正确,但日期却不正确。实际数据将来自一个Android应用程序(Xscan),该应用程序具有CSV文件作为输出

不幸的是,数据导出看起来像“2014年10月21日”。当我尝试对它进行排序时,它只根据第一个数字进行排序,而不是作为日期(不是很有用)。。。所以不管是哪一个月,如果是31号,那将是最高的一天

我尝试了以下方法:前后更改数据类型,并在将数据类型设置为不同的情况下运行代码,但仍然不起作用

****我怎样才能让Excel理解2014年10月21日是作为日期读取的,即使它来自CSV文件,看起来像一个字符串/奇怪的除法****

理想情况下,解决方案可以以某种方式编码到VBA中。。。我和技术水平很低的用户打交道

编辑:见下面的屏幕截图:我需要排序的列是H列。如果我将数据类型设置为Number、date、general,这并不重要。。。。仍然如此。至于守则:

Function sorting_all(mySheet As Worksheet, myRangeRow As Range, myRangeCol As Range, secondSort As String)
Dim myCol As Range
Set myCol = getCol(mySheet, secondSort)
mySheet.Range("A1", mySheet.Cells(myRangeRow.Row, myRangeCol.Column)).Sort key1:=mySheet.Range("A1"), order1:=xlAscending, key2:=mySheet.Range(Columns(myCol.Column).Address()), order2:=xlDescending, Header:=xlYes, Orientation:=xlSortColumns

End Function
条形码位于A列,并且将始终位于A列,因此为硬编码(我知道我知道)。这是关键。Key2是访问日期(尽管调用该函数是为了对其他内容进行排序,因此是第二个排序变量)


进一步编辑:显然,应用程序的输出文件并不是真正保存为.CSV(尽管应用程序声称是这样),而是保存为Excel 97-2003文件。如果我从那个文件中复制过去,它就不起作用了。如果我将文件保存为CSV(正确),则从中复制过去。。。。它起作用了。我不想撒谎,我讨厌Excel。不是从应用程序更改此内容的内置功能。所以问题的核心可能是Excel 97-2003文件格式和我使用的Excel 2010文件之间的关系。。。无论如何,通过VBA导入数据似乎是最好的答案。

如果Excel无法识别这些日期,我会添加一些新列并手动解析这些日期

要分析日期,请使用以下公式:

  • I1中的“=左(H1,2)”以获取日
  • J1中的“=中间(H1,3,2)”表示月份
  • K1中的“=右(H1,4)”以获得年份
  • L1中的“=日期(I1,J1,K1)”
复制、粘贴列L上的特殊…值,并删除列H:K


添加4列公式(使用VBA脚本)不会使速度减慢很多-这正是Excel的用途。即使有数千行。

在大多数类似情况下,问题是导入的日期与Windows控制面板区域设置中的设置不匹配。因此excel将不符合这些设置的日期解释为文本,并可能错误地转换其他日期

可以使用几个修复程序

  • 更改数据源的输出,使日期格式匹配——通常不可行
  • 更改您的windows区域短日期设置以匹配csv格式--对于您的“lo-tech用户”可能不是一个好主意
  • 导入文件而不是打开它。无论是手动还是通过VBA执行此操作,您都将有机会使用文本导入向导,该向导将允许您指定导入的日期格式

上传更多信息,如:您的csv文件或其屏幕截图。有关单元格的日期格式是什么?如果你尝试了一些代码,上传。嗯,是的,这是一种方法。尽管有一些备注:-至少现在,Excel VBA对以DD/MM/YYYY形式显示的数据进行排序(我自己生成的测试数据,具有正确格式的数据类型,工作正常)。我宁愿让它阅读已经格式化为DD/MM/YYYY的内容。另外,问题是,实际上有很多代码在这上面运行了几千行,所以它可能会变慢……我刚刚要编辑我的帖子,说:如果我导入文件,它确实可以工作,因为,正如你所说,你可以使用文本导入向导。。。。到目前为止,我的首选。但在我看来,这仍然是愚蠢的:它确实应该能够让excel正确地识别这些数据。如果我没有找到其他答案,但我想我会给它几天时间…@Francky_V这可能是最安全的使用方法,并通过VBA进行操作,以便正确设置日期格式。然后通过VBA导入!