근 한달만에 글을 쓴다..
블로그를 시작할때만 하더라도 하루에 한개정도는 우습게 올릴줄 알았는데 역시 인생 쉽지않다.
오늘 질문은 [유튜브'엑사남'의Excel VBA 함께하기]에서 같이 활동하고 있는 [오리]님의 질문이다.
https://open.kakao.com/o/glXWEB3b
개인적으로 질문하신거라 데이터들은 나름(?) 편집하여 공유하기로 했다.
질문의 내용은 상품리스트가 있고 오더리스트가 있는데 상품리스트와 오더리스트가 서로 일치하는 부분에 오더 리스트의 수량을 두 리스트가 만나는 셀에 출력하는 질문이었다.
오리님은 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방에서 진행하기로 하겠다...그럼 빠이~~~
'질문있어요' 카테고리의 다른 글
[콤보상자] 유효성 검사를 통한 발주서 업데이트 (3) | 2021.11.11 |
---|---|
같은 날짜의 마지막행에 Correl(상관계수) 구하기 (0) | 2021.10.16 |
[VBA_검증하기] 네이버 지식인 질문사항 (0) | 2021.09.09 |
[VBA_find] 출근부 작성하기 (0) | 2021.08.28 |
[VBA_파일통합] 폴더내 파일 통합하기(완초님 질문) (0) | 2021.08.28 |
댓글