Excel似乎只更改了某些列的格式

时间:2013-05-24 02:43:42

标签: excel-vba format vba excel

使用VBA,我导入一个csv文件并将一堆数据放入多个列中。

其中一列有日期和时间。由于我需要能够仅使用这些单元格的“时间”部分,我尝试使用(以及几乎所有其他变体)将整个列转换为时间

Cells(x.y).EntireColumn.NumberFormat = "hh:mm:ss"  
or   
Range("C1").NumberFormat = "hh:mm:ss"     
Range("C1").EntireColumn.NumberFormat = "hh:mm:ss"

但是,这不会转换整个列。我已经尝试了所有其他可能的方法来选择整个列并更改它(通过VB)但是仍然只有一部分仍然被转换。

如果我双击这些未转换的单元格并按Enter键,它们将更改为正确的格式。我意识到这是与计算相关的常见问题,但我的工作簿设置为自动计算,我也试过在VB中设置它。这不会改变任何事情。

我能找到的唯一模式是当Day达到两位数时,单元格会停止转换。例如:

Column C

01/05/2013 7:28:56  
03/05/2013 13:24:53  
07/05/2013 20:13:24  
09/05/2013 8:29:22  
12/05/2013 9:28:56  
15/05/2013 21:14:25  
17/05/2013 7:28:56 

成为:

Column C

7:28:56  
13:24:53  
20:13:24  
8:29:22  
12/05/2013 9:28:56  
15/05/2013 21:14:25  
17/05/2013 7:28:56  

在每个单元格的顶部公式栏中,它仍显示所有单元格的整个日期和时间,不确定这是否相关,但在我必须使用的计算方面似乎无关紧要时间。

基本上我必须花时间在C列中的单元格和从另一个单元格的时间(也在日期/时间格式)并检查差异。经过一些研究后,我决定最好的方法是将所有单元格转换为时间格式,然后进行计算。

或者我可以尝试将列转换为文本并使用Split函数(使用空格作为分隔符)并拉出时间,但我也无法做到这一点,因为再次尝试将整列转换为文本以日期的两位数停止。

感谢您阅读所有内容,我们将不胜感激任何想法和帮助。

编辑:在我的帖子中实现了一些我的语法不正确,但这在我的宏中是正确的

另一个编辑:我认为这肯定与日期格式有关...我只是意识到在我格式化它们之前,日期是m/dd/yyyy然后当它达到实际的两位数天时它会改变到dd/mm/yyyy,那就是问题发生时......

1 个答案:

答案 0 :(得分:1)

为了避免混淆,并且由于日期似乎总是占据相同的宽度,我建议

1)将此列导入为文本

2)然后翻阅整个专栏

For Each C In Range("A:A").Cells
    If C <> "" Then
        ' ....
    End If
Next C
3)切掉领先的11个位置,例如C = Mid(C, 11, 99)

4)将剩余的字符串转换为时间,例如C = CDate(C) ...是的它也适用于时间,因为时间是日期的一小部分

或者,您可能希望捕获日期部分并将其形成。有关使用工作表公式的一些想法,请参阅here