첨부화일 : 컴활 엑셀 프로시저 (888634 Bytes)

Download Report

Transcript 첨부화일 : 컴활 엑셀 프로시저 (888634 Bytes)

컴퓨터활용능력1급
엑셀 프로시저
비호전산교육학원
053-853-5554
http://www.bihocom.com
1. CurrentRegion ( 파일 : CurrentRegion.xls )
 문제 이해
 폼에 입력되어 있는 데이터를 항상 엑셀 표
의 마지막 위치에 입력하고자 한다.
데이터 입력 순서
 데이터 양의 변화에 따라 입력되는 위치가
변경이 된다.
 즉, 데이터를 입력하여야 하는 행 번호를 구
하는 작업이다.
코드 : [기준셀].CurrentRegion.Rows.Count
 기준셀에서 주변을 참조하여 데이터가
있다면 범위에 포함이 되고, 없다면 범위
에 포함을 하지 않는다.
 A16셀 “결제기준”을 기준으로 오른쪽으
로는 데이터가 입력되어 있지만 주변에
는 데이터가 없다. 따라서 데이터가 있는
범위를 지정하여 보면 오른쪽 범위가 되
고 해당 범위의 행의 개수를 반환하므로
결과는 1이다.
A
B
C
결제종류
카드/은행명
금액
D
15
16
17
한번의 데이터를 입력하였을 경우
 만약 아래에 데이터가 입력하게 되면 범
위는 변하게 된다. 이 때 데이터의 범위를
지정하면 다음과 같고 행의 개수는 2개이
므로 결과는 2를 반환한다.
A
B
C
16
결제종류
카드/은행명
금액
17
신용카드
비씨카드
50,000
15
18
D
코드 : [기준셀].CurrentRegion.Rows.Count + α
 속성의 결과는 표 내부에서 데이터를 입력할
행 번호를 나타낸다.
 엑셀에서 실제 표가 있는 위치까지의 오차는
반영을 하지 않았다. 오차의 행 수는 속성 결
과에 더하여 계산한다.
속성결과
1
입력할 행번호
17
예) 17-1=16행이 실제 엑셀에서 표의 위치
16행이 표의 위치
 표의 위치는 데이터 입력에 따라 변하지 않으
므로 상수를 더해 주면 된다.
입력행 = [A16].CurrentRegion.Rows.Count + 16 → 표의 위치 행 지정
↓
입력행번호
↓
표에서 입력 행 지정
입력행은 1과 16을 더해 17이라는 데이터가 입력된다.
즉, 변수값을 이용하여 입력 데이터 행을 지정할 수 있다.
코드 : Cells( 행번호 , 열번호 ) = 컨트롤이름
 프로시저에서는 오른쪽에 있는 항목을 왼쪽으로 대입하는 개념이다.
 입력될 행은 데이터의 양에 따라 변한다. 따라서 앞에서 계산된 입력행이 행번호로 사용되
면 데이터 양에 따른 행변화를 구현할 수 있게 된다.
 그리고 항목에 따른 열번호는 항상 같으므로 해당 열을 상수로 입력하면 된다.
예) 금액 데이터를 엑셀에 입력하고자 한다. 컨트롤의 이름은 ‘txt금액’ 이다.
→ 금액은 엑셀에서 항상 C열에 입력이 된다. 따라서 열번호는 항상 3이다.
행은 데이터 양에 따라 값이 변하므로 앞에서 계산한 입력행을 입력한다.
Cells( 입력행 , 3 ) = txt금액
문) <결제화면> 폼의 ‘결제(cmd결제)’ 버튼을 클릭하면 폼에 입력된 결제종류, 선택(cmb선택), 금액
(txt금액)의 값이 [표1]에 입력되도록 작성하시오.
▶단, 결제종류는 선택된 결제종류의 caption 속성을 이용
▶시트에 입력될 때 숫자로 인식되도록 하기 위하여 금액은 ‘txt금액’에 1을 곱함
※ 데이터를 추가하면 항상 마지막 데이터 다음에 입력되어야 함
<코드>
Private Sub cmd결제_Click()
입력행 = [A16].CurrentRegion.Rows.Count + 16
If Opt은행 = True Then
Cells(입력행 , 1) = Opt은행.Caption
Else
Cells(입력행 , 1) = Opt신용.Caption
End If
 ‘Opt은행’ 옵션단추 컨트롤은 선택되었을 때 True 값
을 가진다.
 조건으로 ‘Opt은행 = True’라고 지정하면 선택하면
Opt은행이 선택되었을 때 참이라는 결과를 나타내고,
만약 거짓이라면 선택하지 않은 것으로 다른 하나의
옵션단추 Opt신용이 선택된 결과를 나타낸다.
Cells(입력행 , 2) = cmb선택
 컨트롤의 속성을 값으로 반환하기 위해서는 이름에
마침표(.)와 함께 속성의 이름을 입력하면 가져올 수
있다.
Cells(입력행 , 3) = txt금액 * 1
 문제에 제시한 것처럼 컨트롤에 1을 곱하여 준다.
End Sub
2. ListIndex ( 파일 : ListIndex.xls )
 문제 이해
 폼의 콤보상자나 목록상자에서 선택된 데이터에 따라 엑셀 데이터를 조회하고자 한다.
 상자에서 선택 데이터가 변경되면 엑셀에서 조회하는 대상의 행 번호도 변경이 된다.
 즉, 선택되는 데이터에 따라 엑셀에서 검색될 행 번호를 구하는 작업이다.
코드 : 컨트롤이름.ListIndex
선택 데이터에 따라
반환값이 달라진다.
선택값
반환값
마우스
0
모니터
1
키보드
2
프린터
3
CD-ROM
4
CPU
5
FDD
6
HDD
7
 ListIndex 속성은 콤보상자나 목록상자의 목록에서 데이터를 선택하였을 경우 해당 데이터의
순번을 데이터로 반환하여 준다.
 ListIndex 속성의 값은 0부터 시작한다. 즉, 첫번째 데이터는 0을, 두번째 데이터는 1을 데이터
로 반환한다.
 그림을 참조하면 폼의 콤보상자에서 ‘키보드’를 선택하였을 때 해당 데이터는 목록에서 3번째
에 위치하고 있으므로 결과값은 2를 반환한다.
코드 : 컨트롤이름.ListIndex + α
엑셀에서 표의 위치
ListIndex 결과가 0부터 시작
 속성의 결과는 엑셀 표에서 조회할 행 번호를 나타낸다. 하지만 실제 표에서 조회할 데이터가
위치한 행의 번호와는 차이가 발생한다.
 속성 결과가 2이고 실제 엑셀에서 조회할 해당 데이터가 위치하고 있는 행은 6이라면 4만큼의
오차가 발생한다. 이는 CurrentRegion 속성과 마찬가지로 엑셀에서의 표의 위치 오차와
ListIndex 속성이 0부터 반환하는 특징에서 발생하는 오차이다.
조회행 = cmb제품명.ListIndex + 4
코드 : 컨트롤이름 = Cells( 행번호 , 열번호 )
 이번에는 CurrentRegion과는 달리 엑셀의 데이터를 컨트롤에 표시하는 구조이다.
 선택된 데이터에 따라 조회 행 번호가 변경되므로 행번호는 앞에서 계산한 조회행 변수가
사용이 되고, 열번호는 해당 항목에 따른 열은 항상 일치하므로 상수로 입력이 되어 진다.
예) ‘키보드’를 조회하였을 때 생산단가 데이터 표시하기. 컨트롤의 이름은 ‘txt생산단가’ 이다.
→ 생산단가는 엑셀 표에서 항상 B열에 있다. 그러므로 열번호는 2이다.
조회하는 제품에 행은 선택된 데이터의 순번에 따라 변하므로 조회행 변수가
사용이 된다.
txt생산단가 = Cells( 조회행 , 2 )
문) <제품보유현황폼>에서 제품명(cmb제품명)을 선택한 후 <조회(cmb조회)>버튼을 클릭하면 워
크시트에 입력된 해당 제품의 데이터를 폼에 표시하는 프로시저를 작성하시오. (ListIndex 사용)
<코드>
조회행 = cmb제품명.ListIndex + 4
txt생산단가 = Cells(조회행, 2)
 ListIndex 속성을 사용하여 조회행을 계산한다.
txt생산량 = Cells(조회행, 3)
 각 컨트롤에 입력할 데이터를 조회행을 행번호로 사
용하여 엑셀의 데이터를 가져와 입력한다.
txt불량품수 = Cells(조회행, 4)
txt재고량 = Cells(조회행, 5)
txt총보유량 = Cells(조회행, 6)
 열번호는 조회를 할 때마다 항상 같은 열에 있으므로
조회 항목이 있는 열의 번호를 상수로 입력한다.
3. 복합 문제 ( 파일 : 복합.xls )
 문제 이해
 이번에는 CurrentRegion과 ListIndex 속성을 둘 다 사
용하여 해결하는 문제이다.
 폼의 데이터를 엑셀에 입력하는 형태가 아니라 셀에
서 데이터를 조회하여 다른 셀로 입력하는 형태이다.
 즉, 목록상자에서 선택하여 조회할 행 번호와 등록을
클릭했을 때 엑셀에 입력할 행 번호를 따로 만들어야
하는 구조이다.
셀에서 다른 셀로 바로 데이터 입력
코드 : 컨트롤이름.ListIndex + α
 목록상자에서 상품을 선택하였을 때 첫 데이터부터
값을 0부터 순서대로 반환한다.
 만약 ‘수박’을 선택하였다면 위에서 4번째 있으므로
반환되는 값은 3이다.
 엑셀의 오른쪽 표을 참조하여 ‘수박’이 8번째 행에
있는 것을 알 수 있다.
 속성값은 3이고 조회행은 8이므로 5만큼의 오차가
발생한다.
 따라서, 조회행의 코드는 다음과 같다. 이 때, 목록상
자의 컨트롤의 이름은 ‘Lst품목’이다.
조회행 = Lst품목.ListIndex + 5
코드 : [기준셀].CurrentRegion.Rows.Count + α
 기준셀은 입력 표에서 첫번째 셀인 [B5] 셀이다.
 이미 2개의 데이터가 입력되어 있으므로 [B5]셀부터 범위를 지정하
여 보면 [B5:F7]까지 된다. 따라서 속성의 결과는 행의 개수인 3이 반
환된다.
 데이터는 8번째 행에 입력이 되어야 하므로 5만큼의 오차가 있다.
입력행 = [B5].CurrentRegion.Rows.Count + 5
데이터 입력 행
코드 : Cells( 행번호 , 열번호 ) = Cells( 행번호 , 열번호 )
 엑셀의 데이터를 조회하여 다른 셀에 데이터를 입력하는 구조이다.
 오른쪽에는 조회행을 사용한 셀의 주소가, 왼쪽에는 데이터를 입력받을 셀의 주소가 입력되
어야 한다.
 예를 들면, 상품코드 데이터는 H열에 위치한다. H는 8열이므로 조회행의 열번호는 8이다.
 상품코드가 입력되어야 하는 열은 B열이다. B는 2열이므로 입력행의 열번호는 2이다.
Cells( 입력행 , 2 ) = Cells( 조회행 , 8 )
표의 데이터를 다른 표로 입력
입력 표
조회 표
문) <매출입력> 폼의 등록(cmd등록) 버튼을 클릭하면 상품코드, 구분, 상품명, 수량(spn수량), 금액
을 계산하여 [표1]에 입력되도록 작성하시오.
▶ 금액은 단가와 수량의 곱으로 계산하시오.
<코드>
조회행 = Lst품목.ListIndex + 5
입력행 = [B5].CurrentRegion.Rows.Count + 5
Cells(입력행 , 2) = Cells(조회행 , 8)
Cells(입력행 , 3) = Cells(조회행 , 9)
Cells(입력행 , 4) = Cells(조회행 , 10)
Cells(입력행 , 5) = spn수량.Value
 ListIndex 를 사용하여 조회행을 계산하고,
CurrentRegion 으로 입력행을 따로 계산한다.
 조회행을 오른쪽에, 입력행을 왼쪽에 적용하
여 모든 항목에 대해 셀 입력 구조를 작성한다.
 판매수량에는 셀의 데이터를 참조할 수 없다.
따라서, ‘spn수량’ 컨트롤의 스핀버튼을 이용
하여 변경된 컨트롤 Value 속성값을 입력한다.
 금액은 단가와 수량의 곱으로 계산한다.
Cells(입력행 , 6) = Cells(조회행 , 11) * spn수량.Value
 ‘spn수량’의 스핀버튼은 위, 아래 버튼을 클릭하면 컨트롤
의 Value 속성의 값이 증가, 감소하는 특징이 있다. 따라서,
스핀버튼의 Value 속성의 값을 이용하여 수량과 같은 데
이터를 입력할 수 있다.