보통 이런식의 키워드 분류를 쇼핑몰을 운영하시는 분들이 많이 사용하시고 요청도 많이 들어온다.
한달전만해도 이런 문제가 들어오면 정규식으로 패턴을 등록해서 하나하나 패턴을 모두 대조하면서 원하는 키워드를 도출하였다.
물론 코드도 지저분했지만 이젠 딱~!! 한줄이면 된다.
일단 코드 진행에 대해서 시뮬레이션을 해보자
상품명에서 키워드들을 순환하면서 변경될 키워드들로 하나씩 바꾸면서 그 결과값을 출력해야 한다.
=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는 참~~~길다..ㅋㅋ
'VBA > 엑사남_기초방' 카테고리의 다른 글
[기초방] VBA 100제 #91 [ 표에서 다중검색하기 ] (1) | 2024.01.07 |
---|---|
[기초방] VBA 100제 #90 [ 부분합 구하기 ] (2) | 2023.11.01 |
[기초방] VBA 100제 #88 [ 리스트에서 해당 월 카운트하기 ] (0) | 2023.10.28 |
[기초방] VBA 100제 #87 [ MMULT 를 이용한 효율구하기 ] (0) | 2023.10.27 |
[기초방] VBA 100제 #86 [ MMULT 를 이용한 행렬만들기 ] (0) | 2023.10.26 |
댓글