VBA를 사용하여 Excel 워크 시트의 날짜를 수정하는 방법

지금 공유 :

날짜가 유효하지 않거나 12.26.2016 개월이 없음을 알리기 위해 26 년 12 월 2016 일 또는 26 년 XNUMX 월 XNUMX 일 (영국 형식)로 제공된 스프레드 시트에서 날짜를 얼마나 자주 가져 옵니까? 이 기사에서는 TRIM, LEFT, RIGHT 및 MID 함수를 사용하여 VBA로 날짜를 수정하는 방법을 살펴 봅니다.

이 기사에서는 독자에게 개발자 리본이 표시되고 VBA 편집기에 익숙하다고 가정합니다. 그렇지 않은 경우 Google "Excel 개발자 탭"또는 "Excel 코드 창"을 사용하십시오.

이 연습의 xlsm은 다운로드 할 수 있습니다. 여기에서 확인하세요.

우리의 문제가 아닙니다!

날짜에 7 일 추가문제를 해결하는 가장 좋은 장소는 근원입니다. 그러나이 경우 12.26.1994가 유효한 날짜가 아니라는 것을 급여 부서에 설득 할 수는 없습니다 (일부 동유럽 국가의 컴퓨터 제어판에서 그렇게 구성하지 않는 한).

사실 우리는 그것이 기계가 읽을 수 없다는 것을 증명할 수 있습니다. 예를 들어, 날짜에 7 일을 추가합니다.

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

이므로…

"=2017-01-01 + 7" = 2017/01/08.

그들이 문제가 아니라고 제안한다고 가정합시다.

날짜 형식

가장 먼저 확인해야 할 것은 날짜가 미국 또는 국제 형식인지 여부입니다.미국 형식의 날짜

우리의 예는 우리가 미국 사용, 즉 국제 형식 DMY보다는 MDY를보고 있음을 분명히합니다.

소스를 설정 한 후에는 데이터 형식을 변경하여 국제적 으로든 미국에서든 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 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.