본문 바로가기
VBA/엑사남_기초방

[기초방] VBA 100제 #89 [ 쇼핑몰 키워드 정리하기 ]

by 일등미노왕국 2023. 10. 28.

 

보통 이런식의 키워드 분류를 쇼핑몰을 운영하시는 분들이 많이 사용하시고 요청도 많이 들어온다.

 

한달전만해도 이런 문제가 들어오면 정규식으로 패턴을 등록해서 하나하나 패턴을 모두 대조하면서 원하는 키워드를 도출하였다.

 

물론 코드도 지저분했지만 이젠 딱~!! 한줄이면 된다.

 

일단 코드 진행에 대해서 시뮬레이션을 해보자

 

상품명에서 키워드들을 순환하면서 변경될 키워드들로 하나씩 바꾸면서 그 결과값을 출력해야 한다.

=LET(_s,B5:B30,

REDUCE(_s,$D$5:$D$24,

LAMBDA(_t,_old,SUBSTITUTE(_t,_old, OFFSET(_old,0,1)))))

LET함수로 _s 에 [B5:B30] 영역을 넘기고, REDUCE함수에 _s를 초기값으로 주고 바꿔줄 영역을 기존 영역보다는 추가할 수 있어서 몇줄 더 여유를 주었다. [$D$5:$D$24]

 

REDUCE초기값 _s를  LAMBDA함수에 _t로 넘기고 _old에 수정해야 하는 키워드 영역[$D$5:$D$24] 을 넘겼다

 

REDUCE함수에서 인자를 두개를 넘겼으니, LAMBDA 함수에서도 같은 수의 인자를 받아야 한다.

 

그 다음은 우리가 잘 알고 있는 SUBSTITUTE함수로 [텍스트영역, 수정키워드 영역, 바꿀내용] 각각 인자에 변수들을 넣어서 계산해 주면된다.

 

[바꿀내용]은 [찾을내용]의 옆셀에 위치함으로 바꿀내용은 OFFSET(_old,0,1)으로 불필요한 인자를 더 받지않고 종속된 상태 그대로  값을 가져올 수 있음에 체크하길 바란다.

 

이게 어떻게 보면 가장 보편적인 방법일 것이고,

여기에 약간 트릭을 사용한것이 TEXTSPLIT 함수의 구분자로 [찾을 내용]을 사용하여 TEXTSPLIT는 구분자로 텍스트가 분리될때 구분자를 삭제해 버리는데 이를 사용하면 구분자대로 분리하면서 자연스럽게 키워드분리가 되는 연출이 가능하다.

 

이방법은 같은 크루 서랍님이 가르쳐주었다..

 

땡큐~~! 서랍센세

 

 

=TEXTSPLIT((B5:B30),(D5:D14),";",TRUE)

뭔가 너무 압축이 되어서 잘 이해가 안갈수도 있다. 설명을 하면 이렇다.

(B5:B30)을 셀에 수식입력창에 넣고 F9 키를 누르면

이런식으로 배열상수를 만드는거 볼수 있는데 우리가 계속적으로 TEXTJOIN 으로 열방향으로 콤마(,) 를 열방향으로 세미콜론(;)으로 만든 형태처럼 배열상수를 반환한다.

 

TEXTSPLIT함수는 [텍스트, 열구분자, 행구분자, 빈셀무시:TRUE/포함무시:FALSE..] 으로 이루어지기 때문에 각 인자에 값들을 넣어주면 된다.

 

그럼 코드를 다시 리뷰해 보자.

 

=TEXTSPLIT((B5:B30)  ,(D5:D14)  ,   ";"   ,TRUE)

=TEXTSPLIT([TEXT영역],[열구분자],[행구분자],[빈셀무시])

 

이제 코드가 보일것이다.

 

이렇게 하면 열 구분자 영역이 배열상수로 들어와서 하나씩 텍스트 영역과 비교해서 구분자에 해당하는 것들을 삭제를 하게 되는 트릭이 완성되는 것이다.

 

 

이걸 vba에 입히면

 

ARRAYTOTEXT를 이용하여 표현할 수 있고,  아래와 같은 배열상수 식으로 우리가 원하는 값을 가져올 수 있다.

 

 

수식 한줄에 비해서 우리 vba는 참~~~길다..ㅋㅋ

기초방89.xlsm
0.02MB

댓글