【问题标题】:Excel seems to change format of only some columnsExcel 似乎只更改了某些列的格式
【发布时间】:2013-05-24 02:43:42
【问题描述】:

使用 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 列中的一个单元格和另一个单元格的时间(也是日期/时间格式)花费时间并检查差异。经过一番研究,我决定最好的方法是将所有单元格转换为时间格式,然后进行计算。

或者,我可以尝试将列转换为文本并使用拆分函数(使用空格作为分隔符)并取消超时,但我也遇到了麻烦,因为再次尝试将整个列转换为文本在日期的两位数处停止。

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

编辑:意识到我的一些语法在我的帖子中不正确,但这在我的宏中是正确的

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

【问题讨论】:

  • 对于具有个位数天数的单元格,公式栏中是否可以识别 dd/MM/yyyy 格式?看起来 Excel 可能认为它类似于 MM/dd/yyyy。检查您的区域设置,您可能需要先调整日期。
  • 你可能是对的,我忘了提到在转换后的单元格中,在公式栏中它已经反转了天/月
  • 嗯,我检查了我的 Windows 区域设置 - 那里看起来一切正常。短格式设置为 dd/mm/yyyy

标签: excel format vba


【解决方案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

【讨论】:

  • 谢谢大家!是的,它肯定有助于将这些单元格作为字符串导入。目前看来一切正常。感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多