본문 바로가기
질문있어요

[VBA] 주문리스트와 상품리스트에 주문 수량 출력하기(feat.정규식)

by 일등미노왕국 2021. 10. 14.

근 한달만에 글을 쓴다..

블로그를 시작할때만 하더라도 하루에 한개정도는 우습게 올릴줄 알았는데 역시 인생 쉽지않다.

오늘 질문은 [유튜브'엑사남'의Excel VBA 함께하기]에서 같이 활동하고 있는 [오리]님의 질문이다.

https://open.kakao.com/o/glXWEB3b

 

유튜브 '엑사남'의 Excel VBA 함께하기

[방암호 : M으로 시작하는 VBA 메세지창 명령어는? 'MsgB**', 힌트 : 6글자, **은 소문자] #엑셀 #excel #VBA #엑사남

open.kakao.com

개인적으로 질문하신거라 데이터들은 나름(?) 편집하여 공유하기로 했다.

질문의 내용은 상품리스트가 있고 오더리스트가 있는데 상품리스트와 오더리스트가 서로 일치하는 부분에 오더 리스트의 수량을 두 리스트가 만나는 셀에 출력하는 질문이었다. 

 

오리님은 VBA를 시작하신지 얼마 안되셔서 아직은 엑셀 함수를 VBA에 적용하여 코드를 작성할려는 코드패턴을 보여주셨는데, 생각외로 잘 하셨다고 생각한다. 무언가 계속 만들어보고 실패해봐야 그게 본인의 실력이 되기에 시간을 두고 끙끙거리는 오리님 모습을 보다가 잘난척(?)은 아니지만 호기심이 땡겨 코드를 만들어 보았다.

 

오늘 사용된 것은 [정규식]이다. 이건 VBA방에 몇가지 예제를 통해서 오픈하려고 했는데 너무나 어이없게 오픈되어 버렸다..그래도 아직 VBA의 길은 멀기에 오늘의 질문을 어떻게 풀었는지 보도록 하자. 

 

상품명을 봤을 때 혹시 패턴이 보였는가를 묻고 싶다.

  언뜻 보기에 Split로  공백을 기준으로 제품명과 수량을 분리하여 배열에 담아 상품리스트와 비교하면 되겠다고 생각했지만 [10_화이트로즈 ab 4]에서 우리는 방금한 생각이 틀렸음을 알 수 있다.

젠장 띄어쓰기가 2개이다....크윽

자 그럼 이렇게 하자...

1. 줄바꿈을 기준으로 배열에 담자.

2. 각각의 배열에서 [공백+숫자] 이 조합을 패턴으로 하는 정규식을 구하자

3. 구한 정규식을 기준으로 각 배열을 split로 분리하여 상품명과 주문수량을 분리하자

4. 분리된 상품명을 [상품리스트]에서 find하여 일치한 값이 있으면

   분리된 상품명의 열값과 상품리스트의 행값에 주문수량을 위치시키자.

 

정규식의 패턴을 빨리 찾아낼 수 있다면 그만큼 코드 짜는게 쉬워진다. 물론 정규식 옵션에서 Multiline을 사용하면 굳이 윗부분에서 V=Split(rngA, Chr(10)) 을 안해도 된다. 허나 육안으로는 안보이지만 상품명과 수량조합에서 수량 뒷부분에도 공백이 있는것들이 다수 확인되어 가령 아래와 같은 주문리스트가 있다고 하면 주문수량뒤에 공백이 없으면 정규식 패턴대로 [공백6 / 공백8 / 공백5]만 나와야 하지만 입력부분이 주문수량 뒤에 공백이 있는것들이 다수 확인되어 실제로는 [공백6 / 공백13 / 공백8 / 공백07 / 공백5] 처럼 다음 줄 앞의 제품고유번호를 달고 오는 경우가 많아서 정규식 옵션인 MultiLine을 사용하지 않고 줄바꿈을 기준으로 배열에 담았다. 

 

28_레드벨벳벨트 6
13_레드코듀로이 8
07_딥그린쉬폰 5

 

더 많은 정규식 문제는 VBA방에서 진행하기로 하겠다...그럼 빠이~~~

판매분석(21.10.13).xlsm
0.03MB

댓글