我們多久會在提供給我們的電子表格中獲取日期為 12.26.2016 或 26/12/2016(英國格式),卻被告知日期無效或沒有第 26 個月? 本文探討了使用 VBA 修復日期,使用 TRIM、LEFT、RIGHT 和 MID 函數。
本文假定讀者已顯示“開發人員”功能區,並且熟悉VBA編輯器。 如果沒有,請使用Google“ Excel開發人員標籤”或“ Excel代碼窗口”。
可以下載本練習中的xlsm 此處.
不是我們的問題!
解決問題的最佳地點是源頭。 然而,在這種情況下,再多的說服也無法說服工資部門 12.26.1994 不是一個有效日期(除非在某些東歐國家的計算機控制面板中如此配置)。
事實上,我們可以證明它不是機器可讀的。 例如,給一個日期加上 7 天:
"=01.01.2017 + 7" = #VALUE. "=2017.01.01 + 7" = #VALUE.
然而…
"=2017-01-01 + 7" = 2017/01/08.
讓我們假設他們認為這不是他們的問題。
日期格式
我們必須確定的第一件事是日期是美國格式還是國際格式。
我們的示例清楚地表明我們正在查看美國的使用情況,即 MDY 而不是國際格式 DMY。
一旦我們確定了來源,我們就需要更改數據格式,以便 Excel 能夠理解它們,無論是在國際上還是在美國。
最好的方法是將日期更改為 yyyymmdd,這是一種不需要限定的格式。
該過程
我們將遍歷文檔中的每一行,調用一個函數來根據來源國家“更正”日期。 一旦日期更正,我們將計算員工的年齡。
守則
將以下代碼複製到新模塊中:
Option Explicit
Sub Main()
Dim strNewFormat As String
Dim strDate As String
Sheets("Main").Range("B4").Select
'Cycle through the sheet rows, using IDNumber as an anchor
'to prevent a premature halt caused by a blank date of birth
Do While ActiveCell > ""
If ActiveCell.Offset(0, 2) > "" Then
strDate = ActiveCell.Offset(0, 2)
'Remove leading or trailing spaces
strDate = Trim(strDate)
'Call the function
strNewFormat = ReformatDate(strDate, "USA")
'Write the result from the function ReformatDate to a new column
ActiveCell.Offset(0, 3) = strNewFormat
'Determine age by subtracting the previous column from today's date
ActiveCell.Offset(0, 4) = "=(NOW()-RC[-1])/365.25"
'Convert to intger, thus lopping off decimal places
ActiveCell.Offset(0, 4) = Int(ActiveCell.Offset(0, 4))
End If
Range("B" & ActiveCell.Row + 1).Select
Loop
End Sub
Function ReformatDate(sDate As String, sSource As String)
Dim yyyy, mm, dd As String
yyyy = Right(sDate, 4)
If sSource = "USA" Then
mm = Left(sDate, 2)
dd = Mid(sDate, 4, 2)
Else
mm = Mid(sDate, 4, 2)
dd = Left(sDate, 2)
End If
ReformatDate = yyyy & "-" & mm & "-" & dd
End Function
向您的表單添加一個按鈕,並將其分配給 Sub Main。
買者
在向您的模塊添加太多複雜的代碼之前,請注意 Excel 在主要應用程序開發中並不總是穩定的,並且通常無法恢復損壞的代碼本身。 結果可能是您唯一的副本損壞,因為損壞發生在“保存”中。
經常備份並使用工具進行修復 Excel文件損壞.
作者簡介:
Felix Hooker是的數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 修復 rar 文件損壞 和sql恢復軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM
