내일도 화이팅

입고, 출고 시 재고 자동 업데이트 코드 분석 본문

엑셀/엑셀 매크로 사무자동화 이해

입고, 출고 시 재고 자동 업데이트 코드 분석

내일도화이팅 2023. 7. 18. 00:56
Sub 입고재고갱신()
Dim count_inven As Integer
count_inven = 3

Do While (Not IsEmpty(Worksheets("재고관리").Cells(count_inven, 2).Value))
    count_inven = count_inven + 1
Loop

For i = 3 To 100
    For j = 3 To count_inven - 1
        If Worksheets("재고관리").Cells(j, 2).Value Like Worksheets("입고견적서").Cells(i, 3).Value Then
            Worksheets("재고관리").Cells(j, 3).Value = Worksheets("재고관리").Cells(j, 3).Value + Worksheets("입고견적서").Cells(i, 5).Value
            Exit For
        End If
    Next j
Next i
        
End Sub

해당 코드는 입고에서 재고가 자동으로 갱신되는 코드였습니다.

 

코드를 한줄씩 뜯어보며 어떤의도로 만들어진 코딩인지 분석해봅시다.

 

1. 
Dim count_inven As Integer
count_inven = 3

Do While (Not IsEmpty(Worksheets("재고관리").Cells(count_inven, 2).Value))
    count_inven = count_inven + 1
Loop

 

해당 코드는 재고관리에 상품의 종류가 몇개가 있는지 구하는 코드입니다. 

 

제가 만든 파일에서 재고관리는 B3부터 시작하니 B열의 3행부터 탐색하기 위해 count_inven을 3으로 잡고 비어있지않으면 1씩 증가(1행씩 증가)하도록 만들었습니다.

 

2.

For i = 3 To 100
    For j = 3 To count_inven - 1
        If Worksheets("재고관리").Cells(j, 2).Value Like Worksheets("입고견적서").Cells(i, 3).Value Then
            Worksheets("재고관리").Cells(j, 3).Value = Worksheets("재고관리").Cells(j, 3).Value + Worksheets("입고견적서").Cells(i, 5).Value

            Exit For
        End If
    Next j
Next i
해당 코드를 직역하면 입고견적서의 상품명(입고된 상품)과 재고관리의 상품명을 하나씩 비교해보며 같은게 있으면 증가시키는 코드입니다.

[그림 1] for문의 이해

위의 그림처럼 재고관리의 상품명이 입고견적서나 출고견적서의 상품명과 하나씩 대조를 해보면서 같은걸 찾으면 해당 견적서의 크기만큼 증가(감소)하여 재고관리의 다음 상품명으로 탐색하고 모든 탐색이 끝나면 이중 반복문이 종료됩니다.

[그림 2] for문의 이해 2

쉽게 말해서 민희와 철수가 각자 5개의 카드를 갖고 있고 철수와 민희의 카드는 서로 쌍이 될 때,

 

철수는 자신의 카드와 쌍이 되는 민희의 카드를 찾기 위해서 첫번째 카드의 값과 같은 카드를 민희의 첫번째 카드부터 탐색해보아야하며, 만약 민희의 카드를 세번째 뒤집었을때(민희의 세번째카드) 철수의 첫번째 카드와 일치하게 되면, 더이상 탐색할 필요 없이 같았을 경우의 조건에 따른 실행문을 실행한 뒤 철수의 첫번째 카드와 같은 카드를 찾는 탐색은 종료하고 두번째 카드와 같은 카드를 찾는 탐색을 시작합니다.

 

그리고 if문 안에 있는 Exit For은 현재 상품명 탐색은 종료하고 다음 상품명을 탐색하라. 혹은 탐색을 종료하라(내부의 반복문을 끝내라)라는 의미를 가집니다.

 

이중 반복문은 초보자가 이해하기 쉬운 개념은 아닙니다.

예를들어

for i = 1 to 5

  for j = 1 to 3

       Debug.print("식사하세요") ->(로그창에 "식사하세요"를 출력)

  Next j

Next i

 

라는 코드가 있다고 가정했을 때,

내부의 for문은 1부터 3까지이니 총 3번 "식사하세요"를 출력합니다.(연속으로 출력이 되겠지만, 그건 일단 넘어갑시다.)

그리고 3번의 반복문이 돌면 외부의 i가 1증가 하면서 다시 내부의 반복문이 실행되고 그러면 또 "식사하세요"가 세번이 로그에 출력됩니다.

 

그러면 총 "식사하세요는 15번 출력됩니다.

내부의 반복문은 3번씩 도는 것을 5번 반복했기 때문입니다.

 

※ 깜빡했는데 입고견적서입력 매크로와 출고견적서입력 매크로에 Call을 넣은 이유는 다른 프로시저를 호출하기 위해서 입니다.

입고견적서입력 매크로에 "Call 입고재고갱신" 이라는 코드를 넣어 입고견적서입력 매크로가 실행될 경우 개발자가 정한 순서나 조건에 따라 입고재고갱신 매크로가 실행됩니다. 이는 출고견적서입력 매크로에 "Call 출고재고갱신"라는 코드를 넣은 이유와 동일합니다.

 

※ 출고재고관리에 대해 다루지않은 이유는 

For i = 3 To 100
    For j = 3 To count_inven - 1
        If Worksheets("재고관리").Cells(j, 2).Value Like Worksheets("입고견적서").Cells(i, 3).Value Then
            Worksheets("재고관리").Cells(j, 3).Value = Worksheets("재고관리").Cells(j, 3).Value + Worksheets("입고견적서").Cells(i, 5).Value

            Exit For
        End If
    Next j
Next i

 

해당 반복문의 Worksheets("재고관리").Cells(j, 3).Value = Worksheets("재고관리").Cells(j, 3).Value + Worksheets("입고견적서").Cells(i, 5).Value 코드에서 +를 -로 바꾼 것과 시트 이름을 "출고견적서"로 바꾼 것밖에 없어서 그렇습니다.

 

해당 코드는 재고관리의 개수를 갱신하는 코드이니 입고는 +, 출고는 -를 한 것입니다.

 

오늘은 조금 어려운 개념이었습니다.. 제가 아직 설명이 미숙해서 헷깔리게 만들지 않았을까 걱정됩니다.

 

혹시라도 도움이 되셨다면 좋아요와 댓글주시고

 

모든 질문이나 피드백에는 답변 또는 수용을 할테니 편하게 질문해주시고 말씀해주세요 ㅎㅎ

 

오늘도 감사합니다.

 

1. 입고견적서입력, 출고견적서입력 이해

https://ksm30546.tistory.com/12

 

입고 데이터 추가하기 코드 분석

https://ksm30546.tistory.com/10 입고 데이터 추가하기-코드 제공(복붙용)입고 데이터를 자동입력해주는 매크로 코드를 제공하겠습니다. 아래 복붙하시면 바로 사용 가능합니다. Sub 데이터입력() Dim input

ksm30546.tistory.com

2. 입고, 출고 시 재고 자동 업데이트 - 코드제공, 파일제공(無 저작권)

https://ksm30546.tistory.com/15

 

입고, 출고 시 재고 자동 업데이트-코드제공,파일제공(복붙용)

※ 제 코드와 파일은 상업적 이용, 개인적 이용이 모두 가능합니다. 다만, 게시판이나 블로그에 업로드할 목적이라면 꼭 출처를 남겨주시기바랍니다. 안녕하세요. 저번시간엔 입고와 출고시 견

ksm30546.tistory.com