일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 엑셀 사무자동화
- 재고관리 프로그램
- VBA
- VBA 데이터삭제
- 엑셀 매크로 뒤로가기
- 재고 자동 갱신
- 사무자동화
- 엑셀 VBA 뒤로가기
- 엑셀 매크로
- VBA Undo
- 매크로
- 재고 자동화
- 엑셀 재고관리
- 입출고 데이터 관리
- VBA Redo
- 엑셀 데이터 삭제
- 재고관리 자동화
- 고시원개발자
- redo
- 엑셀자동화
- 엑셀
- 엑셀 함수 정리
- 재고관리프로그램
- 엑셀 데이터관리
- 엑셀 재고데이터 입력
- 엑셀 데이터 자동
- VBA 사무자동화
- Excel
- 데이터 중복확인
- 견적서 자동 입력
- Today
- Total
내일도 화이팅
입고, 출고 시 재고 자동 업데이트 코드 분석 본문
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
해당 코드를 직역하면 입고견적서의 상품명(입고된 상품)과 재고관리의 상품명을 하나씩 비교해보며 같은게 있으면 증가시키는 코드입니다.
위의 그림처럼 재고관리의 상품명이 입고견적서나 출고견적서의 상품명과 하나씩 대조를 해보면서 같은걸 찾으면 해당 견적서의 크기만큼 증가(감소)하여 재고관리의 다음 상품명으로 탐색하고 모든 탐색이 끝나면 이중 반복문이 종료됩니다.
쉽게 말해서 민희와 철수가 각자 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
2. 입고, 출고 시 재고 자동 업데이트 - 코드제공, 파일제공(無 저작권)
https://ksm30546.tistory.com/15
'엑셀 > 엑셀 매크로 사무자동화 이해' 카테고리의 다른 글
입출고 Undo, Redo 구현 - 코드분석 (0) | 2023.07.30 |
---|---|
입출고 시 중복 업로드 방지 - 코드 분석 (0) | 2023.07.23 |
입고 데이터 추가하기 코드 분석 (0) | 2023.07.15 |
매크로 사용 방법 (0) | 2023.07.15 |