[Excel VBA]輸入yyyymmdd直接轉換成日期格式,已有初步程式碼

本身習慣直接輸入yyyymmdd做日期格式,剛開始是用儲存格格式修改,讓它表面像是日期,但後續需求需要使用正式的日期格式,使用google & 本身的想法稍微撰寫了一下VBA,但是其實出現許多BUG,希望版上的神人能幫在下修改一下!

PS:月與日部分希望能維持2位數,9月>09
這部分後來有在格式那邊調整成yyyy/mm/dd,但有時候會自動填0,有時候不會(主要是為了整齊)

已知BUG:
1.選取多個儲存格進行資料變更、刪除會錯誤13,型態不符合。
2.儲存格原始是日期格式,直接輸入日期(yyyymmdd)會產生錯誤6,溢位。



=====程式碼=====
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim DteValue As String
Dim YY As String
Dim MM As String
Dim DD As String
Set KeyCells = Range("A:A")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing And Len(Target.Cells) = 8 Then
DteValue = Target.Value
YY = Left(DteValue, 4)
MM = Mid(DteValue, 5, 2)
DD = Right(DteValue, 2)
Target.Cells = YY + "/" + MM + "/" + DD
End If
End Sub
=====程式碼=====
2014-11-12 2:11 發佈
假設:A欄 (像日期的文字格式)
一、全選A欄=>資料=>資料剖析=>下一步=>下一步=>選日期=>完成

如果“月份”"日期"的 0 要補回去
二、全選A欄=>儲存格格式=>自訂=>在類型中填入 yyyy/mm/dd =>確定
謝謝!學習到了新的方法!您的方式也非常值得學習!
不過期待有神人可以幫我修改這段程式碼,原意是想要直接輸入yyyymmdd自動轉成日期。
謝謝您的回覆!
如果您的表格可以多一欄
那改用公式比較方便,您試看看

(範例:放在b1)
=TEXT(a1,"0000\/00\/00")

litor31 wrote:
本身習慣直接輸入yy...(恕刪)

可以再說明一下你是如何操作
Worksheet_Change如何來觸發它呀

saint_ch wrote:
可以再說明一下你是如...(恕刪)

有選定範圍(A:A),然後在該範圍內,輸入長度為8的字串Len(Target.Cells) = 8,就會觸發。
我是寫個function放在模組。

Function DateConvert(x)
If Val(x) <> 0 And Len(x) = 8 Then
DateConvert = Val(Left(x, 4)) & "/" & Val(Mid(x, 5, 2)) & "/" & Val(Right(x, 2))
Else
DateConvert = "#N/A"
End If
End Function

不要去0的話把Val()去掉就行了。
這樣的話就可以直接用公式(DateConvert)去做了,不過我想這沒有比snare用的方法快。
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?