【问题标题】:EXCEL VBA - Date formattingEXCEL VBA - 日期格式
【发布时间】:2015-08-31 11:11:06
【问题描述】:

已编辑) 这是正确的吗?我需要对 P 列做同样的事情。我应该做另一个 for 循环吗?

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

而后一列是“文本”格式。不知道怎么回事

【问题讨论】:

  • 能否将完整日期的列设置为日期格式?
  • 这就是我想知道的。我无法将列设置为日期格式,因为某些列只有年份而不是完整日期。所以我必须将它设置为文本,这样我才能看到年份和完整日期
  • 你的意思是在一列中有单元格,其中一些是完整的年份和一些完整的日期?
  • 是的,我将把它附加到另一个以文本格式显示完整年份的列中。
  • 我还可以检查 Q 列中的每个单元格,看看一个单元格的数字是否大于 2000,然后仅格式化这些值,但它不起作用,因为它将被导出到访问 db,其中整列应具有相同的格式

标签: vba excel date ms-access


【解决方案1】:

已编辑以更正格式问题!!

根据您要采用的方法(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

【讨论】:

    【解决方案2】:

    我认为“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
    

    【讨论】:

      猜你喜欢
      • 2013-11-17
      • 2023-03-20
      • 2013-04-01
      • 2017-06-03
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      相关资源
      最近更新 更多