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

 조삿갓 (choga21)

추천:  2
파일:     조회:  2227
제목:   추가 보충: For Each 반복문을 활용하는 방법
     
  ===========================================
추가 보충: For Each 반복문을 활용하는 방법
-------------------------------------------

그런데, Intersect 함수를 활용하는 방법은
조사해야 할 대상 범위가 넓어지는 경우 즉,
For 루프의 반복 변수 r의 범위가 커지거나
또는 더 나아가 c 까지도 일정 범위를 조사해야 하는 등으로
반복이 많아지게 되면 상당히 효율이 떨어질 수 있습니다.

그래서 또 하나의 해결 방법으로
이번에는 Target에 소속된 각각의 셀을 하나 하나
차례대로 모두 조사해 보는 방법을 생각할 수 있습니다.

이 경우에 유용한 구문이 For Each 반복문이지요.
다음 코드를 보시겠습니다.
(전체적으로는 위의 첫 번째 코드를 약간 변형한 것입니다)

------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cc As Range
    Dim r As Long
    Application.EnableEvents = False
    For Each cc in Target
      ' Taget 내에 포함된 모든 셀에 대해 각각 한 셀씩 반복함
        If cc.Column = 6 Then
            r = cc.Row
            If  r >= 4 And r <= 8 Then _
                Cells(r, 7).ClearContents
        End If
    Next cc
    Application.EnableEvents = True
End Sub
------------------------------------------------------

실제로 값이 바뀐 셀들에 대해서만 반복 조사하여 기능을 수행하므로
좀 더 효율적일 수 있습니다.
 
[불량 게시물 신고]  
안성진감사합니다. 
코드를 작성하고 사용하는 도중 다음의 경우에도 이벤트가 발생하더라고.
셀을 더블클릭했다가 다른 셀을 클릭하면 더블클랙했던 셀의 값이 변하지 않았더라도 이벤트가 발생해 값이 지워지더라고요. 이부분까지 제어 할 수 있나요?
03-30 (10:44)
삭제 ■신고
조삿갓아,! 그러고 보니 코드에 오류가 있네요.
방금 다시 수정하였습니다.

그리고
말씀하신 상황은 더블클릭(엑셀이 편집 의도로 해석함) 뿐만 아니라 F2 키를 눌러 편집을 하거나, 심지어 똑같은 값을 다시 입력하여도 값이 바뀌었다고 판단하네요.

이런 현상을 굳이 방지하자면
Worksheet_SelectionChange 이벤트를 가로채서
선택되는 순간 해당 셀의 값을 따로 전역변수에 기억시켰다가
Worksheet_Change 이벤트핸들러에서 그 값과 비교하여
달라진 경우만 기능을 수행하도록 하는 방법을 쓸 수 있겠지만

역시 단일 셀이 아닌 범위가 선택된 경우 등을 고려하자면
상당히 복잡한 문제입니다.
03-30 (20:39)
삭제 ■신고
조삿갓도대체 어떤 목적에서 그런 기능을 필요로 하시는 건지
그 구체적인 상황을 파악해서
그에 맞는 대책을 세우는 것이 더 효율적일 것 같네요.
03-30 (20:41)
삭제 ■신고
        
  

작성일 : 2018-03-30(09:54)
최종수정일 : 2018-03-30(20:42)
 


 ◎ 관련글

  제 목   작성자   날짜
조삿갓님 저번 Worksheet _change 답변에대한 추가질문이요!! 안성진 2018-03-29
강좌: Worksheet _change 이벤트 핸들러 설계하기 조삿갓 2018-03-29
추가 보충: For Each 반복문을 활용하는 방법 조삿갓 2018-03-30