책 내용 질문하기
참조행에 변수를 누적하는 부분이요~
도서
[2013] 컴퓨터활용능력 1급 실기(엑셀, 액세스 2007 사용자용)
페이지
245
조회수
58
작성일
2013-01-19
작성자
첨부파일

스위치 = 0

참고행 = 3
For Each Name In Range("D4:D7")

참조행 = 참조행 + 1

If Name = txt고객명 Then
txt고객등급 = Cells(참조행, 5)
txt매출금액 = Cells(참조행, 6)
txt결제방식 = Cells(참조행, 7)
스위치 = 1
Exit For

next

if 스위치 = 0 then
MsgBox "조건에 일치하는 자료가 없습니다."
End If
Next

245쪽에 이런 설명이 있는데

우선 스위치가 무엇인지에 대한 설명이 나와있지 않네요ㅠㅠ 스위치가 무엇인가요?

그리고 참조행에 1을 누적키는 것이 이해가 되지 않습니다ㅠㅠ 제가 이해를 잘못하고 있는 것 같습니다

이게 시트에 나와있는대로 김현진 성은희 정민호 주성치 순으로 txt고객명에 입력을 한다면

김현진은 참조행 초깃값인 3에 1을 더한 4행의 5열에서 고객등급을 찾고, 성은희는 김현진의 참조행이었던 5행의 5열에서 고객등급을 찾고 다른 두사람도 그런식으로 할 수 있는데 고객들의 이름을 입력하는 순서가 바뀐다면 김현진의 고객등급을 6행 5열에서 찾고 성은희의 고객등급을 4행 5열에서 찾게되는 일이 발생하지 않나요??

답변
2013-01-21 17:54:57

스위치 : 스위치는 TXT원아명에 입력한 원아가 b4:b19 영역에 있는지, 없는지를 판단하는 것입니다. 맨 처음 스위치에 0을 넣은 후 IF 문 안에 '스위치 = 1'를 넣었습니다. 그런 다음 맨 마지막에 ' If 스위치 = 0 Then'에서 스위치가 0인지를 비교합니다. 맨 처음에 넣은 0이 그대로 있으면 동일한 원아가 없어 '스위치 = 1'를 한번도 수행하지 않은 것이고, 스위치 값이 1로 변경되었다면 동일한 데이터가 있었다는 의미입니다.
- 참조행 : 참조행은 b4:b19 영역에서 TXT원아명에 입력한 원아가 몇번째에 있는지를 구하는 것입니다. b4:b19 영역의 첫번째 부터 비교를 하려면 참조행의 초기화 값은 1이여야 맞습니다. 하지만 IF 문으로 값을 비교하기 전에 '참조행 = 참조행 + 1'를 수행하게 되므로 이것을 수행했을 때 참조행의 값이 1이 되게 하기 위해 처음에 초기화 값으로 0을 지정하는 것입니다.

- FOR EACH~NEXT : 컬렉션에 포함된 개체의 수만큼 명령 코드를 반복 실행하는 명령문입니다. For Each aa In Range("b4:b19") 이렇게 작성하면 b4:b19 영역의 개체 수 즉, 셀의 수인 16번을 반복 수행하게 되는 것입니다.

- IF AA.VALUE=TXT원아명 : 앞에 For Each aa In Range("b4:b19")에서 b4:b19 영역의 각 셀의 값이 하나씩 aa 변수에 저장이 됩니다. 그랬을 때 현재 aa 변수에 들어 있는 값(value)이 txt원아명 컨트롤에 입력된 값과 같은지를 비교하는 것입니다.

- lst원아정보.RowSource = "b" & 참조행 + 3 & ":h" & 참조행 + 3 : b4:b19 영역에서 txt원아명에 입력된 원아가 있는지 비교하여 있으면 해당 원아의 데이터를 lst원아정보 목록 상자에 표시해야 합니다. 예를들어 첫번째 영역에 있는 '장명수'를 예를 들자면 '장명수'의 데이터를 lst원아정보 목록 상자에 표시하지면 lst원아정보.RowSource = b4:h4로 지정해야 합니다. 참조행 변수를 이용하자면 '장명수'는 b4:b19 영역의 첫번째에 있으므로 참조행 변수에는 1이 들어 있죠? 참조행은 1인데, 워크시트에 실제 입력되어 있는 위치는 4행이므로 참조행+3을 하여 4를 만든 것입니다. b4:h4를 참조행 변수를 이용하여 작성하면 '"b" & 참조행 + 3 & ":h" & 참조행 + 3 '이 되는 것입니다.

즐거운 하루 되세요.

"
  • *
    2013-01-21 17:54:57

    스위치 : 스위치는 TXT원아명에 입력한 원아가 b4:b19 영역에 있는지, 없는지를 판단하는 것입니다. 맨 처음 스위치에 0을 넣은 후 IF 문 안에 '스위치 = 1'를 넣었습니다. 그런 다음 맨 마지막에 ' If 스위치 = 0 Then'에서 스위치가 0인지를 비교합니다. 맨 처음에 넣은 0이 그대로 있으면 동일한 원아가 없어 '스위치 = 1'를 한번도 수행하지 않은 것이고, 스위치 값이 1로 변경되었다면 동일한 데이터가 있었다는 의미입니다.
    - 참조행 : 참조행은 b4:b19 영역에서 TXT원아명에 입력한 원아가 몇번째에 있는지를 구하는 것입니다. b4:b19 영역의 첫번째 부터 비교를 하려면 참조행의 초기화 값은 1이여야 맞습니다. 하지만 IF 문으로 값을 비교하기 전에 '참조행 = 참조행 + 1'를 수행하게 되므로 이것을 수행했을 때 참조행의 값이 1이 되게 하기 위해 처음에 초기화 값으로 0을 지정하는 것입니다.

    - FOR EACH~NEXT : 컬렉션에 포함된 개체의 수만큼 명령 코드를 반복 실행하는 명령문입니다. For Each aa In Range("b4:b19") 이렇게 작성하면 b4:b19 영역의 개체 수 즉, 셀의 수인 16번을 반복 수행하게 되는 것입니다.

    - IF AA.VALUE=TXT원아명 : 앞에 For Each aa In Range("b4:b19")에서 b4:b19 영역의 각 셀의 값이 하나씩 aa 변수에 저장이 됩니다. 그랬을 때 현재 aa 변수에 들어 있는 값(value)이 txt원아명 컨트롤에 입력된 값과 같은지를 비교하는 것입니다.

    - lst원아정보.RowSource = "b" & 참조행 + 3 & ":h" & 참조행 + 3 : b4:b19 영역에서 txt원아명에 입력된 원아가 있는지 비교하여 있으면 해당 원아의 데이터를 lst원아정보 목록 상자에 표시해야 합니다. 예를들어 첫번째 영역에 있는 '장명수'를 예를 들자면 '장명수'의 데이터를 lst원아정보 목록 상자에 표시하지면 lst원아정보.RowSource = b4:h4로 지정해야 합니다. 참조행 변수를 이용하자면 '장명수'는 b4:b19 영역의 첫번째에 있으므로 참조행 변수에는 1이 들어 있죠? 참조행은 1인데, 워크시트에 실제 입력되어 있는 위치는 4행이므로 참조행+3을 하여 4를 만든 것입니다. b4:h4를 참조행 변수를 이용하여 작성하면 '"b" & 참조행 + 3 & ":h" & 참조행 + 3 '이 되는 것입니다.

    즐거운 하루 되세요.

    "
· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.