지역 설정을 변경하지 않고 Excel에 날짜를 수동으로 삽입할 때 날짜 형식을 설정하는 방법은 무엇입니까?

지역 설정을 변경하지 않고 Excel에 날짜를 수동으로 삽입할 때 날짜 형식을 설정하는 방법은 무엇입니까?

내 로케일에서는 날짜가 dd/mm/yyyy 또는 그 변형(dd-mm-yy 포함)으로 삽입됩니다. 날짜를 dd/mm/yyyy로 표시하도록 이미 형식이 지정된 Excel 양식(일반 Excel 파일)을 만들었지만 "05/04/2015"를 입력하면 "04/05/2015"로 표시됩니다. 지역 설정을 내 로컬 설정으로 변경하면 이 문제가 해결될 수 있다는 것을 알고 있지만 지역 설정 변경에 대한 지식이 없고 아무도 방법을 가르칠 수 없다고 가정하고 이 양식을 많은 사람들에게 배포해야 합니다. 따라서 내 질문은 다음과 같습니다.

지역 설정을 변경하지 않고도 "2015년 5월 4일"을 입력하고 "2015년 4월 5일"로 인식되는 방법이 있습니까?

추가 참고 사항: "15년 5월 4일"(2015년 4월 5일 입력)을 의미하는 경우 Excel에서는 입력을 "mm/dd/yy" 형식으로 사용하므로 Excel에서는 이를 "4월 15일"로 인식합니다. Excel의 기본 동작을 "dd/mm/yyyy"로 변경해야 합니다.이것이 사용자가 입력하는 방식이기 때문입니다.

가능하다면 최종 사용자가 설정을 변경하지 않고도 양식을 사용할 수 있도록 설정도 파일에 포함/포함되어야 합니다.

저는 매크로와 VBA에 익숙하지 않지만 시도해 볼 의향이 있습니다 :)

편집: 이것은 내 질문과 관련이 있습니다. MS-EXCEL의 수식 표시줄에서 날짜 형식을 dd-mm-yyyy에서 dd-mm-yy로 변경하는 방법은 무엇입니까?

하지만 Excel에서 dd/mm/yy 형식으로 입력하고 있음을 인식하는 한 전체 수식 입력줄을 변경할 필요는 없습니다.

답변1

이벤트 Worksheet_Change는 기본적으로 귀하가 요청한 것을 달성할 수 있지만 사용자가 변경하려는 의도가 있는지 확인해야 합니다. 'Yes/No'실수로 인한 변경을 방지하기 위해 솔루션에 선택 상자를 추가했습니다 . 선택 상자 없이 이 작업을 수행하면 기존 값을 편집하려고 하면 원래 형식으로 다시 변경되므로 위험합니다.

이 코드는 작동하려는 시트의 VBA 코드 내에 '살아 있어야' 합니다.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim iDay, iMonth, iYear As Integer
Dim solutionRange As Range

'the cells you want the date to change for
Set solutionRange = Range("D4:D12")

'only triggers if the user's changing one cell
If Target.Count = 1 Then
    If (Not (Intersect(solutionRange, Target) Is Nothing) And (Target.Value > 0)) Then
        'disable application events so this change doesn't trigger itself
        Application.EnableEvents = False

        iDay = Left(Target.Value, 2)
        iMonth = Mid(Target.Value, 4, 2)
        iYear = Right(Target.Value, 4)

        ' Give the user a choice to say whether they need the date changed. You *can* remove both the 'If' and 'End If' if you really need to, but I'd strongly suggest keeping them.
        If (MsgBox("Have you entered your date in the format 'MM/DD/YYYY'?", vbYesNo) = vbYes) Then
            Target.Value = DateValue(iMonth & "/" & iDay & "/" & iYear)
        End If

        Application.EnableEvents = True
    End If
End If
End Sub

답변2

나는 당신이 무슨 말을 하는지 정확히 알고 있습니다. 나는 YY-MM-DD를 입력하는 것을 좋아합니다. 원하는대로 변경하는 설정이 엑셀에 없습니다. 원하는 설정은 Windows에 있습니다. 제어판 "시간 및 언어" 어딘가에 숨겨져 있습니다.

고급 설정인 "시간 및 날짜 형식 변경"으로 이동하여 "간단한 날짜" 설정을 변경해야 했습니다.

사용하는 운영 체제에 따라 지침이 약간 다를 수 있습니다.

도움이 되었기를 바랍니다.

답변3

기본값을 변경할 수는 없다고 생각합니다. 특히 해외에서 데이터를 가져올 때 수정하기가 어색합니다.

내가 생각할 수 있는 이 작업을 수행하는 가장 덜 지저분한 방법은 일종의 수동 방법입니다.


옵션 1: 우리는 다음의 입력을 받아들일 수 있습니다.텍스트형식을 지정하고 셀에 넣습니다. 이렇게 하면 Excel에서 날짜로 해석하지 않습니다. 그런 다음 인접한 셀에서 DATE 함수를 LEFT, RIGHT 및 MID와 함께 사용할 수 있습니다. 예를 들어(사용자가 날짜를 전체 MM/DD/YYYY로 입력해야 함을 지정):

셀 A1: 2015년 4월 5일

셀 B1: =DATE( RIGHT(A1,4), LEFT(A1,2), MID(A1,4,2) )


옵션 2: 사용자가 세 개의 개별 셀이나 필드에 '일', '월' 및 '연도'를 입력하도록 요청합니다. 이는 설정에 따라 더 좋을 수도 있고 나쁠 수도 있습니다.

어쨌든, 행운을 빕니다!

답변4

이미 사용했던 것과 동일한 형식을 사용하여 내 셀에 새 데이터 값을 할당할 때도 동일한 문제가 발생했습니다.

2018년 2월 12일은 2018년 12월 2일로 바뀌었지만 대상 셀의 형식은 동일했습니다.

..Range("B10").Value = DateValue(newdate)를 사용하면 문제가 해결되었습니다.

관련 정보