본문 바로가기
VBA/365 FUNCTION

[365리뷰] 날짜추출하기 [feat. 서랍님]

by 일등미노왕국 2024. 3. 6.

https://www.youtube.com/watch?v=e2E87OeceBM

 

오늘은 서랍님 영상중 [텍스트에서 자동날짜인식] 을 리뷰하기로 하겠다.

 

 

=LET(
     →step1, "각 셀의 단어들을 모두 행으로분리한후 숫자만 결합해라",
      q,CONCAT(IFERROR(--MID(D2,SEQUENCE(LEN(D2)),1),"")),

    →step2, "각 셀의 단어들을 모두 행으로분리한후 에러가 발생한것을 공백으로 연결한후 트림으로 공백을 분리후 하이픈으로 연결해라",
     _d,--SUBSTITUTE(TRIM(CONCAT(IFERROR(--MID(D2,SEQUENCE(LEN(D2)),1)," "),""))," ","-"),

   →step3, "전체문자의 길이가 4개인 경우",
   _d4,IF(((--LEFT(q,2)>=1)*(--LEFT(q,2)<=12))*((--RIGHT(q,2)>=1)*(--RIGHT(q,2)<=31)),--TEXT(q,"00-00")),

   →step4, "전체문자의 길이가 6개인 경우",
   _d6,IF(((--MID(q,3,2)>=1)*(--MID(q,3,2)<=12))*((--RIGHT(q,2)>=1)*(--RIGHT(q,2)<=31)),--TEXT(q,"00-00-00")),
   
    →step5, "각문자의 길이로 결과는 달리하는 SWITCH함수로 결과도출",
   SWITCH(LEN(q),4,_d4,6,_d6,_d))

 

 

이번 리뷰에서는 크게 CONCAT함수와 MID 와 SEQUENCE 함수의 콜라보를 통한 문자속 숫자들을 조합하는 방법을 배우면서 SWITCH함수를 통한 서로 다른 조건에서 원하는 날짜를 도출하는 방법을 배우게 될것이다.

 

CONCAT(IFERROR(--MID(D2,SEQUENCE(LEN(D2)),1),""))

 

MID함수에서 뽑아낸 텍스트에서 --를 붙히게 되면 숫자는 출력되지만 텍스트는 에러를 발생하게 되는데 이때 IFERROR를 통해서 에러를 없앤 후 CONCAT으로 텍스로 조합하게 되면 문자속 숫자들만 조합되게 된다.

 

--SUBSTITUTE(TRIM(CONCAT(IFERROR(--MID(D2,SEQUENCE(LEN(D2)),1)," "),""))," ","-")

 

앞서 MID함수에서 뽑아낸 숫자를 바로 조합하게 되면 숫자와 숫자 사이의 구분이 되지 않기 때문에 IFERROR 함수에서 빈값을 반환하는 것이 아니라 공백을 반환하게 되면 숫자와 숫자사이의 텍스트들이 공백으로 출력되게 되는데 이때 TRIM함수로 잘라주면 공백이 2개이상이면 하나로 만들어주는 것을 이용하여 SUBSTITUTE로 공백을 하이픈(-)으로 변경해주면 숫자와 숫자사이에 처음과는 다르게 하이픈(-)으로 숫자들이 구분되게 된다.

 

이값을 가지고 문자의 길이가 4개인지 6개인지를 비교하여, SWITCH 함수로 조건에 따른 결과를 도출하게 된다.

그럼 길이가 4개인 문자와 6개인 문자가 날짜 형식인지를 확인해야 하는 절차가 남았다.

 

그것이 바로 아래 구문이다.

 

→step3, "전체문자의 길이가 4개인 경우",
   _d4,IF(((--LEFT(q,2)>=1)*(--LEFT(q,2)<=12))*((--RIGHT(q,2)>=1)*(--RIGHT(q,2)<=31)),--TEXT(q,"00-00")),

→step4, "전체문자의 길이가 6개인 경우",
   _d6,IF(((--MID(q,3,2)>=1)*(--MID(q,3,2)<=12))*((--RIGHT(q,2)>=1)*(--RIGHT(q,2)<=31)),--TEXT(q,"00-00-00")),

 

예를 들어 1223 이라는 길이가 4인 숫자가 있을때,

LEFT함수로 앞2개의 숫자를 가져오게 되는데 이는 월을 의미함으로 1부터 12사이의 숫자인지 확인하고,

RIGHT함수로 끝2개의 숫자를 가져오게 되는데 이는 일을 의미함으로 1부터 31사이의 숫자인지 확인한다. 만약 이것을 만족하면 날짜 형식으로 변환하라는 의미이다.

 

길이가 6인숫자도 같은 의미인데, 가운데 00XX00 2자리 숫자가 월이 됨으로 MID함수를 이용한것을 볼 수 있다.

여기서 유념하여야 할것은 LEFT, RIGHT, MID 함수는 값을 텍스트로 가져오게 됨으로 --을 붙혀서 숫자로 변환하는 작업을 해야 한다는 것이다.

 

다음에도 서랍님 코드를 함께 리뷰하면서 365마스터를 위해서 여러분과 함께 동행하기로 하겠다..

 

그럼 이만

 

날짜추출.xlsx
0.01MB

 

 

댓글