Excel(VBA):格式化为未识别日期的数据

时间:2014-10-21 18:47:00

标签: excel vba date type-conversion

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

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

但是,当我尝试使用实际数据时却没有:条形码可以排序,但不是日期。实际数据将来自以 CSV文件作为输出的Android应用(Xscan)。

不幸的是,数据导出看起来像这样“21/10/2014”。当我尝试对它进行排序时,它只根据第一个数字进行排序,而不是作为日期(不是非常有用)...所以无论月份是什么,如果当天是31日,它将是最高的地方。

我尝试过以下操作:更改数据类型&在数据类型设置为不同的东西时运行代码,但它仍然不起作用。

****如何让Excel了解 21/10/2014 将被视为日期,即使它来自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栏中,并且始终是,因此硬编码(我知道我知道)。这是关键1。 Key2是访问日期(尽管调用该函数来对其他东西进行排序,因此是秒数变量)。

enter image description here

进一步编辑:显然,应用程序的输出文件并未真正保存为.CSV(即使这是应用程序声称的内容),它仍保存为Excel 97-2003文件。如果我从该文件复制过去,则不起作用。如果我将文件保存为CSV(正确),那么从它复制过去....它的工作原理。不会说谎,我讨厌Excel。不是内置函数来从应用程序更改此功能。因此问题的核心可能是Excel 97-2003文件格式和&我使用的Excel 2010文件......无论如何,似乎通过VBA导入数据似乎是最佳答案。

2 个答案:

答案 0 :(得分:0)

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

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

  • ' =左(H1,2)'在I1得到一天
  • ' = mid(H1,3,2)'在J1获得月份
  • ' =右(H1,4)'在K1获得一年
  • ' = date(I1,J1,K1)'在L1

复制,粘贴特殊...列L上的值,并删除列H:K。

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

答案 1 :(得分:0)

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

可以使用几种修复方法。

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