나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 조삿갓 (choga21)

추천:  2
파일:     조회:  2203
제목:   애써 답변 준비했는데 질문이 행방불명 되었네요 - 배열첨자 실행오류
     
  이곳 게시판의 특성 상, 
답변 내용이 길어지면 타이핑하는 동안에 자동 로그아웃이 되어
애써 타이핑한 내용이 참 난감해지는 사태가 발생합니다.

그래서 질문내용을 확인하고 일단 메모장에서 열심히 타이핑한 다음에
답변 올리려고 보니... 어라...?
질문이 안 보이네요.

아마 질문자께서 스스로 답을 찾으셔서 삭제하신 것 같습니다

그런데 제 입장에선, 열심히 타이핑했던 게 좀 억울하기도 하고
혹시 다른 분께 도움이 될까 해서 업로드합니다.
배열변수 사용 시 첨자 오류는 흔히 실수하는 오류이기도 하지요.
(저도 가끔 아차! 할 때가 있답니다.)

=====================

아래와 같은 프로시저에서 첨자 오류가 난다고 질문하셨습니다.

====== 답변 =========

A8셀로부터 아래로 연속된 데이터가 A15셀까지 있다고 가정해 보겠습니다.

Sub 등록()
     Dim 연번() As String
     Dim i As Integer
    ' Dim flag As Boolean
     
     i = Range("A8").End(xlDown).Row
' 여기에서 i 값은 A15 셀의 행번호 즉, 15가 저장되겠지요
     
     ReDim 연번(1 To i - 1)
' 그리고 이 명령에 의해서, 연번 배열의 첨자는 1부터 14까지만 사용 가능하게 됩니다.

         k = 8
' 그런데 초기 첨자를 8부터 시작해 버리네요.

         For Each c In Range("A8:A" & i)
' A8:A15 범위 내의 모든 셀에 대해 루프를 돌리셨습니다.

             연번(k) = c.Value
' 반복문이 돌면서,
' A8 셀의 값은 연번(8)에
' A9 셀의 값은 연번(9)에.... 저장되겠지요
' 그러다가 A15 셀 차례가 되면? A(15)를 사용할 수 있나요?
' 저 위에 ReDim 명령문을 다시 보세요.
' 왜 첨자 상한선을 i가 아니고 i-1로 지정한 이유가 뭔가요?

             If Trim(c.Value) = Empty Then
                 'MsgBox "TT" & k - 7
                 Range("A" & k).Value = k - 7
                 Range("B" & k, "I" & k).Value = Range("B3:I3").Value
                 Range("E" & k).Value = Range("E3").Value
             Exit For
             End If
             MsgBox c.Value
             k = k + 1
         Next c
 End Sub

결국, 원인은 오류가 발생한 연번(k) = c.Value 명령이 아니고
필요한 방을 하나 적게 만들어 버린  ReDim 연번(1 To i - 1) 명령입니다.

더구나, 사실상 사용하지도 않는 첨자 1부터 7까지는 팡팡 놀고 있네요.

변수 공간을 효율적으로 사용하려면

 ReDim 연번(8 To i)

로 써야 맞습니다.

========================
이상으로 물고기는 잡아 드렸고
낚시를 하는 방법입니다.

이 경우에 런타임 오류 메시지 창에서 [디버그] 버튼을 선택하면
VBA 편집기가 열리고, 오류가 발생한 지점에 노란 띠가 보입니다.

보통은 아래 쪽에 '지역창'이라고, 변수 목록과 당시 저장 값들을 보여주는데
만일 이게 안보이면 메뉴에서 보기-지역창을 실행해 주면 됩니다.

첨자에서 오류가 발생했으니 첨자인 k의 값을 확인해 보면
아마 15가 되어 있겠지요(위 설명에 가정한 조건인 경우)

그러면 이전의 Dim이나 ReDim 명령에서 첨자 범위를 어떻게 정해 주었는지
확인해 보고 수정하면 될 것입니다.

VBA 편집기를 이용한 디버깅(실행 추적) 방법은 다음 내용을 참고하시기 바랍니다.

http://www.officetutor.co.kr/board/Dtype/bfrmvw.asp?f_tn=Dqa_excel_n2&f_bno=123276&page=
 
[불량 게시물 신고]  
        
  

작성일 : 2017-09-28(18:39)
최종수정일 : 2017-09-28(18:40)