跳到主要內容

[EXCEL]以VBA與巨集自動化修改日期格式

在工作上可能會遇上的問題,在此紀錄與分享一下。

問題:Excel中輸入日期,有些人輸入108/7/8、108.3.5等等格式要怎麼統一成1080506這樣的格式呢?

步驟一:先以內建函數轉換(取代)日期

要認識的基本函數
IF、Mid、Left、Right、Substitute

進行取代
IF(MID(RIGHT(A1,2),1,1)="/",IF(RIGHT(LEFT(A1,6),1)="/",SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","0",1),SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","",1)),IF(RIGHT(LEFT(A1,6),1)="/",SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","0",1),SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","",1)))

第一個IF是用來判斷"日"的格式,舉例來說108/5/6,Right(A1,2)會取出"/6",再用Mid設定取第1個字"/",108/5/16,Right(A1,2)會取出"16",再用Mid設定取第1個字"1",這也代表如果是1-9日可以讓她進行補0的動作。

第二個IF是用來判斷"月"的格式,與上面用取法類似。

步驟二:建立自訂函數


改為VBA格式,建立一個自己設定的函數SubstituteDate()
Function SubstituteSlash(A1)
    If InStr(A1, "/") > 0 Then
    
        If Mid(Right(A1, 2), 1, 1) = "/" Then
            If Right(Left(A1, 6), 1) = "/" Then
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, "/", "0", 2), "/", "0", 1)
            Else
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, "/", "0", 2), "/", "", 1)
            End If
                
        Else
            If Right(Left(A1, 6), 1) = "/" Then
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, "/", "", 2), "/", "0", 1)
            Else
               SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, "/", "", 2), "/", "", 1)
            End If
            
        End If
        
    ElseIf InStr(A1, ".") > 0 Then
        If Mid(Right(A1, 2), 1, 1) = "." Then
            If Right(Left(A1, 6), 1) = "." Then
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, ".", "0", 2), ".", "0", 1)
            Else
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, ".", "0", 2), ".", "", 1)
            End If
                
        Else
            If Right(Left(A1, 6), 1) = "." Then
                SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, ".", "", 2), ".", "0", 1)
            Else
               SubstituteSlash = WorksheetFunction.Substitute(WorksheetFunction.Substitute(A1, ".", "", 2), ".", "", 1)
            End If
            
        End If
    Else
        SubstituteSlash = A1
    
        
    End If
    
        
    
   
End Function

步驟三:建立巨集自動化執行

錄製巨集的方式待補

留言