엑셀 5회 기출(132~137쪽)에서 '참조행'이 잘 이해가 되지 않습니다.
for each~next 문을 이용하여 프로시저를 작성하는 문제인데요.
Private Sub cmd조회_Click()
스위치 = 0
참조행 = 3
For Each aa In Range("b4:b25")
참조행 = 참조행 + 1
If aa.Value = txt사원번호 Then
txt사원번호 = Format(Cells(참조행, 2), ">&&&&&")
txt성명 = Cells(참조행, 3)
txt부서명 = Cells(참조행, 4)
txt직위 = Cells(참조행, 5)
txt신청일 = Cells(참조행, 6)
txt총점 = Cells(참조행, 7)
스위치 = 1
Exit For
End If
Next
If 스위치 = 0 Then
MsgBox "사원번호가 잘못되었습니다."
End If
End Sub
1. 여기서 초반에 참조행을 '3'으로 초기화한 후,
참조행 = 참조행 + 1 이라고 하였는데,
이것이 참조행이 3부터 시작하여 3,4,5,6.... 순으로 인식(?)되기 때문에 +1을 한 것인가요?
실제로 참조해야 하는 행은 4행부터 이므로,
이것을 맞춰주기(?) 위해 +1을 한 것인가요?
2. 만약 그렇다면, 초반에 참조행을 0이나 1 등으로 초기화하고
For Each aa In Range("b4:b25")
참조행 = 참조행 + 4
혹은
For Each aa In Range("b4:b25")
참조행 = 참조행 + 3
라고 작성해도 괜찮을까요?? 실제로 시험해봤지만, 일치값을 제대로 찾지 못하던데....
(가령, '나1'을 검색했는데 '가1'이 조회되었습니다.)
3. 이것이 불가능한 이유는 무엇인가요?? (일치값을 제대로 찾지 못하는 이유)
for each~next 구문에서의 참조행의 원리가 확실하게 이해되지 않습니다. listindex는 이해가 되는데...
이상입니다.
답변해주신다면 감사하겠습니다.
안녕하세요.
1.
'참조행' 변수는 '참조행 = 참조행+1'과 같이 1씩 증가하는 변수로 데이터의 행을 가리킵니다.
초기값이 3이므로 3행부터 차례로 4행, 5행....으로 변하는 것이지요.
2. 3.
이 때, For문이 [B4] 부터 [B25]까지 반복되는 동안 참조행이 1씩 증가합니다.
참조행 = 참조행 + 4로 코드를 넣으면 4씩 증가하기 때문에 데이터의 행을 건너뛰어 가리키게 됩니다.
그래서 정확한 결과가 나타나지 않는 것입니다.
For 문은 반복해서 같은 명령어들을 동작시킬 때 유용하게 사용됩니다.
좀 복잡해 보이지만 차근차근 생각해 보시면 이해하실 수 있을 것 같습니다.
For Each aa In Range("b4:b25") : aa에 [B4]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
aa에 [B5]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
aa에 [B6]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
.
.
.
aa에 [B25]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
For 문으로 이동했다가 범위 밖인 것을 확인하고 Next 다음 문장을 실행하러 제어가 움직입니다.
좋은 하루 보내세요.
-
*2018-09-13 20:51:19
안녕하세요.
1.
'참조행' 변수는 '참조행 = 참조행+1'과 같이 1씩 증가하는 변수로 데이터의 행을 가리킵니다.초기값이 3이므로 3행부터 차례로 4행, 5행....으로 변하는 것이지요.
2. 3.
이 때, For문이 [B4] 부터 [B25]까지 반복되는 동안 참조행이 1씩 증가합니다.참조행 = 참조행 + 4로 코드를 넣으면 4씩 증가하기 때문에 데이터의 행을 건너뛰어 가리키게 됩니다.
그래서 정확한 결과가 나타나지 않는 것입니다.
For 문은 반복해서 같은 명령어들을 동작시킬 때 유용하게 사용됩니다.
좀 복잡해 보이지만 차근차근 생각해 보시면 이해하실 수 있을 것 같습니다.For Each aa In Range("b4:b25") : aa에 [B4]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
aa에 [B5]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
aa에 [B6]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
.
.
.
aa에 [B25]의 값을 넣습니다. Next를 만날 때까지 수행하다가 Next를 만나면
For 문으로 이동했다가 범위 밖인 것을 확인하고 Next 다음 문장을 실행하러 제어가 움직입니다.좋은 하루 보내세요.