EXCEL VBA - 日期格式

时间:2015-06-15 19:58:28

标签: vba excel-vba date ms-access excel

编) 这是正确的吗?我需要为P列做同样的操作。我应该为循环做另一个吗?

Dim i As Long
        For i = 1 To Rows.Count
        If Len(Cells(i, "Q").Value) <= 4 Then
        Cells(i, 1).NumberFormat = "01/01/yyyy"
        Else: Cells(i, "Q").NumberFormat = "MM/DD/YYYY"
        End If
        Next i

当我导入要访问的excel文件时,导入后具有年份(19xx)或完整日期的列无法正确显示。 这些年似乎很好,但完整日期改为随机数,如39213等。 所以我试图将整个列格式化为文本并导出到访问,同样的事情发生。 我该怎么办? 原始列采用“通用”格式

01/01/1962
01/01/1966
01/01/1956
  1964
01/01/1943
01/01/1943
01/01/1964
  1964
01/01/1972
01/01/1948
01/01/1961
01/01/1953
01/01/1961
01/01/1963
01/01/1963
01/01/1973
  1960
01/01/1956
01/01/1940
  1958
1958
1955
01/01/1948
01/01/1948
01/01/1970
  1959
  1964
01/01/1975
  1966

这变为

22647
24108
20455
1964
15707
15707
19
23377
1964
26299
17533
22282
19360
22282
23012
23012
26665
1960
20455
14611
1958
1958
1955
17533
17533
25569
1959
1964
27395
1966

后一列是'Text'格式。我不知道出了什么问题

2 个答案:

答案 0 :(得分:0)

编辑正确格式问题!!

取决于您要采用的方法(A.修复Excel; B.修复Access),您的解决方案会有所不同。为了使用你的代码,我稍作修改。

警告!如果只有一年,我的代码将破坏第1列的内容!根据您的需求进行更改。

Sub Convert_Dates()
Dim lLastRow    As Long
Dim i           As Long

' Find last row
lLastRow = Cells.Find(What:="*", After:=Range("A1"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
' Loop until last row
For i = 1 To lLastRow
    If Len(Cells(i, "Q").value) <= 4 Then           ' IF only a year found
        Cells(i, "Q") = "01/01/" & Cells(i, "Q")    ' Change date value from yyyy to mm/dd/yyyy
        Cells(i, "Q").NumberFormat = "mm/dm/yyyy"   ' Set format
    Else
        Cells(i, "Q").NumberFormat = "mm/dd/yyyy"   ' Else just set format.
    End If
Next i
End Sub

答案 1 :(得分:0)

我认为“Q”的所有行的日期格式应为“MM / DD / YYYY”。我稍微修改了你的代码。

Sub test1()
            k = Cells(Rows.Count, "Q").End(xlUp).row
            Dim i As Long
            For i = 1 To k
            If Len(Cells(i, "Q").Value) <= 4 Then
            Cells(i, "Q").Value = "01/01/" & Cells(i, "Q").Value
            Cells(i, "Q").NumberFormat = "MM/DD/YYYY"
            Else: Cells(i, "Q").NumberFormat = "MM/DD/YYYY"
            End If
            Next i
End Sub

执行“Q”列中的所有日期后,将格式化为“MM / DD / YYYY”

如果您想在Q列中保留4位数的格式年份并在第1列中单独格式化该年份,请使用以下代码

Sub test1()
            k = Cells(Rows.Count, "Q").End(xlUp).row
            Dim i As Long
            For i = 1 To k
            If Len(Cells(i, "Q").Value) <= 4 Then
            Cells(i, 1).Value = "01/01/" & Cells(i, "Q").Value
            Cells(i, 1).NumberFormat = "MM/DD/YYYY"
            Else: Cells(i, "Q").NumberFormat = "MM/DD/YYYY"
            End If
            Next i
End Sub