일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 사무자동화
- Excel
- 엑셀 사무자동화
- 재고관리프로그램
- 재고 자동화
- 재고관리 자동화
- 데이터 중복확인
- 엑셀 데이터 삭제
- VBA Redo
- 엑셀 데이터관리
- 엑셀 재고관리
- 견적서 자동 입력
- 엑셀 데이터 자동
- 재고 자동 갱신
- 재고관리 프로그램
- 고시원개발자
- 입출고 데이터 관리
- VBA 사무자동화
- 엑셀
- VBA Undo
- 엑셀 매크로
- 엑셀 VBA 뒤로가기
- VBA 데이터삭제
- 엑셀 함수 정리
- redo
- 엑셀 재고데이터 입력
- 매크로
- 엑셀 매크로 뒤로가기
- VBA
- 엑셀자동화
- Today
- Total
내일도 화이팅
입고 데이터 추가하기 코드 분석 본문
https://ksm30546.tistory.com/10
위 매크로에 나오는 코드를 분석해보겠습니다.
분석이 끝나면 원하는 대로 코드를 변경할 수 있습니다.
1. 데이터입력(하나의 데이터 입력) 매크로
먼저 개별 데이터를 입력했던 "데이터입력"이라는 매크로(위의 링크의 첫번째 매크로)부터 분석해보겠습니다.
해당 매크로의 코드는
Sub 데이터입력()
Dim input_data As String
Dim data As Integer
data = 3
Do While (Cells(data, "B").Value <> "")
data = data + 1
Loop
input_data = "B" & Trim(Str(data)) & ":" & "E" & Trim(Str(data))
Range(input_data).Value = Range("G3:J3").Value
End Sub
였습니다. 한줄씩 뜯어보겠습니다.
1행 : Sub 데이터입력()
프로시저에는 sub와 function이 있는데, sub는 반환을 하지않는 프로시저이고 function은 반환을 하는 프로시저입니다.
그리고 "데이터입력"은 제가 만든 매크로명이며, ()는 입력할 인수가 없다는 뜻입니다.
2행 : Dim input_data As String
위 코드는 문자열을 담는 변수를 선언하겠다는 뜻입니다. 그리고 변수명은 "input_data"로 제가 설정했으며 원하신다면 바꾸실 수 있습니다.
3행 : Dim data As Integer
위 코드는 정수형을 담는 변수를 선언하겠다는 뜻입니다. 그리고 변수명은 "data"로 설정했으며 이 역시 원하신다면 바꾸실 수 있습니다.
4행 : data = 3
반복 작업을 하기 위해 시작값을 3으로 설정했습니다.(아래에서 언급하겠지만, 3행부터 탐색할 목적으로 3으로 설정했으며, 2행부터 탐색하려면 2행, 1행부터 탐색하려면 1행으로 바꾸실 수 있습니다.)
5행~7행 :
Do While (Cells(data, "B").Value <> "")
data = data + 1
Loop
해당 코드는 데이터를 빈 값에 넣기 위해서 B열에서 빈 값을 찾기 위해 만든 반복문입니다.
Do While은 조건이 맞으면 While 밑에 Loop위에 있는 코드를 반복하며(무한 반복문이 될 수 도 있으니 주의하여야합니다.)
제가 입력한 조건으로는 Cells(data, "B").Value <> ""으로
직역하면 B열의 data번째 행(data라는 변수에 들어있는 값 -> 시작값은 3으로 셋팅)의 셀 값이 ""(공란)이 아니면 반복한다.이고 만약 공란이 아닐 경우 data의 변수를 1증가시켜서 다음 행을 탐색하도록 코드를 짰습니다.
- Cells함수는 셀을 의미하며 인수를 행과 열순으로 입력합니다. 예를들어 B7이면
Cells(7,"B") 또는 Cells(7,2)로 쓸 수 있습니다.(A = 1, B = 2, ... , Z = 26 입니다.)
- Value는 값을 의미합니다.
- <>는 같지않다를 의미합니다.
8행 : input_data = "B" & Trim(Str(data)) & ":" & "E" & Trim(Str(data))
8행이 실행되었다는 것은 B열에서 빈칸을 찾았음을 의미합니다. input_data에 빈칸의 범위를 저장합니다.
만약에 셀 B7이 비어있어 data가 7이라면,
input_data라는 변수에는 "B7:E7" 이라는 문자열이 담깁니다.
&는 문자열을 잇는 기호이고 Str은 숫자형 데이터를 문자형 데이터로 바꾸는 형변환 함수입니다.
data라는 변수가 정수형으로 선언이 되었기때문에 문자열과 결합하기 위해서는 문자열로 바꿔야 합니다.
※ data를 형변환하는 과정에서 7->"7"이 아니라 7 -> " 7" 으로 공백이 생깁니다. 그렇게 되면
input_data는 "B 7:E 7"이 되므로 해당 범위를 사용할 때 오류가 발생합니다.
때문에 Trim이라는 양쪽에 공백을 제거하는 함수를 사용해서 " 7"을 "7"으로 바꿔줍니다.
그러면 우리가 처음 원했던 값(범위)인 "B7:E7"이 input_data에 저장됩니다.
9행 : Range(input_data).Value = Range("G3:J3").Value
input_data에 들어있는 범위의 "값"을 G3:J3에 있는 "값"으로 대체한다는 뜻입니다.
- Range는 범위를 의미한다는 점에서 하나의 셀만 의미하는 Cells와 다릅니다.
10행 : End Sub
"데이터입력"이라는 프로시저를 종료하겠다는 뜻입니다.
2. 견적서입력(다량의 데이터 입력) 매크로
Sub 견적서입력()
Dim input_data As String
Dim data As Integer
data = 3
Do While (Cells(data, "B").Value <> "")
data = data + 1
Loop
input_data = "B" & Trim(Str(data)) & ":" & "E" & Trim(Str(data + 100))
Range(input_data).Value = Worksheets("견적서").Range("B3:E100").Value
End Sub
1행 : Sub 견적서입력()
앞서 설명했듯이 "견적서입력"이라는 프로시저를 뜻합니다.
2행~4행 :
Dim input_data As String
Dim data As Integer
data = 3
2행~4행은 기초셋팅코드로 1번과 동일합니다.
5행~7행 :
Do While (Cells(data, "B").Value <> "")
data = data + 1
Loop
위 코드도 역시 B열의 빈칸을 찾는 코드로 1번과 동일합니다.
8행 : input_data = "B" & Trim(Str(data)) & ":" & "E" & Trim(Str(data + 100))
input_data에 범위를 의미하는 값을 넣는다는 것은 1번과 동일하지만, 하나 다른점은 +100을 했다는 점입니다.
만약 data라는 변수의 값이 7이였다면 +100을 하기전에는
input_data에는 "B7:E7"이 저장되었을 겁니다.
하지만, +100을 함으로서 "B7:E107"로 바뀌게 되었습니다.
그렇다면,
100의 범위가 내가 원하는 범위보다 작다싶으면 100초과의 값으로 바꾸면되고
100의 범위가 내가 원하는 범위보다 크다싶으면 100미만의 값으로 바꾸면됩니다.
9행 : Range(input_data).Value = Worksheets("견적서").Range("B3:E100").Value
1번 코드와 다르점은 Worksheets라는 함수가 사용되었다는 점입니다.
Worksheets는 sheet를 의미하고 인수로 "견적서"를 넣으면서 "견적서"라는 이름의 시트를 의미합니다.
즉, Worksheets("견적서").Range("B3:E100").Value는 "견적서"라는 시트에 셀 B3에서 셀 E100까지의 값을 의미합니다.
그래서 위 코드를 전체 직역하면(input_data가 "B7:E107"이라 가정했을때)
"견적서"시트에 있는 B3부터 E100까지의 값을 해당 시트의 B7부터 E107의 값으로 넣을게. 입니다.
이 역시 알파벳과 숫자를 바꿔서 범위를 조정하면 원하는 크기로 바꿀 수 있고
Worksheets안의 인수인 "견적서"를 다른 시트이름으로 대체하면 복사해올 시트를 바꿀 수 있습니다.
10행 : End Sub
1번에서 언급한대로 프로시저 종료를 의미합니다.
도움이 되셨다면 좋아요 댓글 부탁드립니다.
모든 피드백, 질문 환영합니다 ㅎㅎ
'엑셀 > 엑셀 매크로 사무자동화 이해' 카테고리의 다른 글
입출고 Undo, Redo 구현 - 코드분석 (0) | 2023.07.30 |
---|---|
입출고 시 중복 업로드 방지 - 코드 분석 (0) | 2023.07.23 |
입고, 출고 시 재고 자동 업데이트 코드 분석 (0) | 2023.07.18 |
매크로 사용 방법 (0) | 2023.07.15 |